--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/debug/d_perflogger_ldd.h Thu Dec 17 09:24:54 2009 +0200
@@ -0,0 +1,176 @@
+// 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:
+// A helper test driver for testing Kernel Performance Logger.
+//
+//
+
+/**
+ @file
+ @internalAll
+*/
+
+#ifndef D_PERFLOGGER_LDD_H__
+#define D_PERFLOGGER_LDD_H__
+
+#include <kernel/kernel.h>
+#include <kernel/kern_priv.h>
+
+#include "t_perflogger_drv.h"
+
+//-- current LDD version
+const TInt KMajorVersionNumber=1;
+const TInt KMinorVersionNumber=0;
+const TInt KBuildVersionNumber=1;
+
+//-----------------------------------------------------------------------------------
+/** panic codes */
+enum TPanic
+ {
+ EWrongRequest, ///< wrong request number from the user side
+ EReqAlreadyPending ///< user asynchronous reques is already pending
+ };
+
+//-----------------------------------------------------------------------------------
+
+/**
+ Helper class that provides events generation in ISR, DFC or IDFC context
+*/
+class DLogTicker
+ {
+ public:
+
+ DLogTicker();
+ ~DLogTicker();
+
+ void Construct(DThread* apUserThreadContext, TDfcQue* apDfcQ, NKern::TContext aLogContext);
+ void Start(const TTestLogCtrl* apLogControl, TRequestStatus* apRqStat);
+ void Cancel(void);
+ void CompleteRequest(TInt aCompletionCode=KErrNone);
+
+ private:
+
+ static void LogTimerCallback(TAny* apSelf);
+ static void LogDFC(TAny* apSelf);
+
+ protected:
+
+ NTimer iTimer; ///< timer for generating events
+ TTestLogCtrl iLogControl; ///< log control structure
+ TClientRequest *iRequest; ///< encapsulates the client's request status that will be completed when the logging has finished
+ TDfc *iLogDFC; ///< DFC for logging.
+
+ DThread* iUserThreadContext;///< thread context where the ipRqStat will be completed in
+ NKern::TContext iLogContext; ///< specifies the desirable context the logging function shall be called from (Kern thread, ISD, IDFC)
+
+ };
+
+//-----------------------------------------------------------------------------------
+
+/**
+ Logger test helper LDD class.
+ Performs some actions from kernel side on behalf of the user test application.
+ Used for testing kernel performance logger
+
+ This is a singleton class, no more than 1 channel allowed
+*/
+class DKPLoggerTestHelperLDD : public DLogicalChannelBase
+ {
+ public:
+
+ static DKPLoggerTestHelperLDD* CreateInstance();
+ ~DKPLoggerTestHelperLDD();
+
+ protected:
+ virtual TInt DoCreate(TInt aUnit, const TDesC8* anInfo, const TVersion& aVer);
+ virtual TInt Request(TInt aFunction, TAny* a1, TAny* a2);
+
+ void DoCancel(TUint aReqNumber);
+ TInt DoRequest(TInt aReqNumber, TRequestStatus* apRqStat, TAny* apArg1, TAny* apArg2);
+ TInt DoControl(TInt aFunction,TAny* apArg1,TAny* apArg2);
+
+ private:
+ DKPLoggerTestHelperLDD();
+
+ private:
+ TDynamicDfcQue* iDfcQ; ///< pointer to the Kern::DfcQue0
+ TTestLogCtrl iLogControlUserThread; ///< log parameters for testting in User-thread context mode.
+ DThread* iClientThread; ///< pointer to the client thread for requests completion
+
+ public:
+
+
+ DLogTicker iIsrLogTicker; ///< generates events in ISR context.
+ DLogTicker iDfcLogTicker; ///< generates events in DFC context.
+ DLogTicker iIDfcLogTicker; ///< generates events in IDFC context.
+
+ static DKPLoggerTestHelperLDD* pSelf; ///< static pointer to the single instance of this class
+
+ };
+
+
+//-----------------------------------------------------------------------------------
+
+
+/**
+ Logger test helper LDD factory class.
+*/
+class DKPLoggerTestHelperLDDFactory : public DLogicalDevice
+ {
+ public:
+
+ static DKPLoggerTestHelperLDDFactory* CreateInstance();
+ ~DKPLoggerTestHelperLDDFactory();
+
+ // from DLogicalDevice
+ virtual TInt Install();
+ virtual void GetCaps(TDes8& aDes) const;
+ virtual TInt Create(DLogicalChannelBase*& aChannel);
+
+ private:
+
+ DKPLoggerTestHelperLDDFactory();
+ };
+
+
+//-----------------------------------------------------------------------------------
+//-- debug print macros. Debug print in this component is absolutely not important and exists only
+//-- for debugging purposes. So that, devising a mask for __KTRACE_OPT isn't necessary.
+//-----------------------------------------------------------------------------------
+
+//-- define this macro if you wish a debug trace from this driver.
+//#define ENABLE_DEBUG_TRACE
+
+#if defined(ENABLE_DEBUG_TRACE) && (defined(_DEBUG) || defined(_DEBUG_RELEASE))
+#define __PRINT(t) { Kern::Printf(t);}
+#define __PRINT1(t,a) { Kern::Printf(t,a);}
+#define __PRINT2(t,a,b) { Kern::Printf(t,a,b);}
+#define __PRINT3(t,a,b,c) { Kern::Printf(t,a,b,c);}
+#define __PRINT4(t,a,b,c,d) { Kern::Printf(t,a,b,c,d);}
+#else
+#define __PRINT(t)
+#define __PRINT1(t,a)
+#define __PRINT2(t,a,b)
+#define __PRINT3(t,a,b,c)
+#define __PRINT4(t,a,b,c,d)
+#endif
+
+//-----------------------------------------------------------------------------------
+
+
+
+#endif //D_PERFLOGGER_LDD_H__
+
+
+
+