--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/defrag/perf/t_perf.h Thu Dec 17 09:24:54 2009 +0200
@@ -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_
+