kerneltest/e32test/bench/t_userbm.h
changeset 43 96e5fb8b040d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/bench/t_userbm.h	Thu Dec 17 09:24:54 2009 +0200
@@ -0,0 +1,83 @@
+// Copyright (c) 2005-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\bench\t_userbm.h
+// 
+//
+
+#ifndef __T_USERBM_H__
+#define __T_USERBM_H__
+
+#include "t_asmbm.h"
+#include <e32std.h>
+
+/// Base class for user benchmarks
+class TUserBenchmark : public TBmInfo
+	{
+public:
+	virtual void Run(TInt aIts) = 0;
+protected:
+	TUserBenchmark(const TDesC8& aName, TUint aCategory);
+	};
+
+class TUserBenchmarkList : public MBenchmarkList
+	{
+	virtual TInt Count();
+	virtual TInt Info(TInt aIndex, TBmInfo& aInfoOut);
+	virtual TInt Run(TInt aIndex, const TBmParams& aParams, TInt& aDeltaOut);
+	};
+
+/// List containing all defined benchmarks
+extern RPointerArray<TUserBenchmark> UserBenchmarks;
+
+#define CALL_10_TIMES(x) x; x; x; x; x; x; x; x; x; x
+
+/// Macro to define a benchmark easily
+#define DEFINE_USER_BENCHMARK(name, pre, test)         \
+_LIT8(KName_##name, #name);                            \
+class TBenchmark_##name : public TUserBenchmark        \
+	{                                                  \
+public:                                                \
+	TBenchmark_##name() :                              \
+         TUserBenchmark(KName_##name, KCategoryGeneral)\
+		 {}                                            \
+	virtual void Run(TInt aIts)                        \
+		{                                              \
+		pre;                                           \
+		for (TInt j = 0 ; j < aIts ; ++j)              \
+			{                                          \
+			CALL_10_TIMES(test);                       \
+			}                                          \
+		}                                              \
+	} Instance_##name
+
+/// Macro to define a benchmark in category 'extra'
+#define DEFINE_EXTRA_BENCHMARK(name, pre, test)        \
+_LIT8(KName_##name, #name);                            \
+class TBenchmark_##name : public TUserBenchmark        \
+	{                                                  \
+public:                                                \
+	TBenchmark_##name() :                              \
+         TUserBenchmark(KName_##name, KCategoryExtra)  \
+		 {}                                            \
+	virtual void Run(TInt aIts)                        \
+		{                                              \
+		pre;                                           \
+		for (TInt j = 0 ; j < aIts ; ++j)              \
+			{                                          \
+			CALL_10_TIMES(test);                       \
+			}                                          \
+		}                                              \
+	} Instance_##name
+
+#endif