diff -r 000000000000 -r a41df078684a kerneltest/e32test/defrag/perf/t_perf.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/defrag/perf/t_perf.h Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,137 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// e32test/defrag/perf/t_perf.h +// +// + +#ifndef _DEFRAG_PERF_T_PERF_H_ +#define _DEFRAG_PERF_T_PERF_H_ + +#include "t_testdll.h" +#include "..\d_pagemove.h" + +typedef TUint32 DTime_t; +//#define EXTRA_TRACE + +#ifdef EXTRA_TRACE +#define TEST_PRINTF(x...) test.Printf(x) +#else +#define TEST_PRINTF(x...) +#endif + +#define MAXCHUNK_SIZE (40 * 1024 * 1024) +#define MINCHUNK_SIZE (2 * 1024 * 1024) + + +extern TInt TestDLLPerformance(TInt aNum); +class DefragLatency +{ +public: + DefragLatency() + { + iIterations = iCummulative = iResult = 0; + iMaxTime = (DTime_t)0; + iMinTime = (DTime_t) -1; + iCalDelay = 0; + } + ~DefragLatency() {} + + void CalibrateTimer(RTest& test); + +private: + static inline TUint32 GetFastCounter(void) + { + return User::FastCounter(); + } +public: + + /** Log the new time diff and update iMaxTime and iMinTime appropriately + */ + inline void AddIteration(DTime_t aTimeDiff) + { + iTime1 = 0; + iTime2 = 0; + + if (aTimeDiff > iMaxTime) + iMaxTime = aTimeDiff; + + if (aTimeDiff < iMinTime) + iMinTime = aTimeDiff; + + iCummulative += aTimeDiff; + iIterations++; + } + + inline void StartTimer(void) + { + iTime1 = GetFastCounter(); + } + + inline TUint32 StopTimer(RTest& aTest) + { + iTime2 = GetFastCounter(); + TUint32 diff = iTime2 - iTime1; + if (iTime2 < iTime1) + { + aTest.Printf(_L("WARNING - Fast Counter rolled over. Assuming only once and continuing\n")); + diff = (KMaxTUint32 - iTime1) + iTime2; + } + AddIteration(diff); + return diff; + } + + DTime_t GetResult(DTime_t& aMax, DTime_t& aMin, DTime_t& aDelay) + { + iResult = (iCummulative / iIterations); + aMax = iMaxTime; + aMin = iMinTime; + aDelay = iCalDelay; + return iResult; + } + + + TInt iFastCounterFreq; +private: + int iIterations; + DTime_t iCalDelay; + DTime_t iTime1, iTime2; + DTime_t iMaxTime, iMinTime; + DTime_t iCummulative; + DTime_t iResult; +}; + + +class DllDefrag +{ +public: + DllDefrag() + { + iFunc0Addr = (TInt8 *)(-1); + iFuncNAddr = (TInt8 *)0; + iLib = new RLibrary; + } + ~DllDefrag() + { + delete iLib; + } + TInt LoadTheLib(TInt aIdx, RTest& aTest); + TInt TestDLLPerformance(TInt aNum, RPageMove& aPageMove, RTest& aTest); +public: + RLibrary *iLib; + TInt8 *iFunc0Addr; + TInt8 *iFuncNAddr; +}; + +#endif // _DEFRAG_PERF_T_PERF_H_ +