--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32utils/profiler/profiler.h Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,142 @@
+// Copyright (c) 1998-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:
+// e32utils\profiler\profiler.h
+//
+// WARNING: This file contains some APIs which are internal and are subject
+// to change without notice. Such APIs should therefore not be used
+// outside the Kernel and Hardware Services package.
+//
+
+#ifndef __PROFILER__
+#define __PROFILER__
+
+#include <e32base.h>
+
+
+_LIT(KProfilerName,"Profiler");
+
+/**
+The Profiler class provides a functional interface to the sampling profiler. <p>
+The engine must already be running for this interface to work, this can be
+achieved by executing PROFILER.EXE. The control methods are all static, and
+require no other context.
+
+@internalTechnology
+*/
+class Profiler : private RSessionBase
+ {
+public:
+ enum TState {EStart, EStop, EClose, EUnload};
+public:
+ /** Start the sampler */
+ static inline TInt Start();
+ /** Stop the sampler */
+ static inline TInt Stop();
+ /** Release the sample trace file */
+ static inline TInt Close();
+ /** Unload the profile engine from memory */
+ static inline TInt Unload();
+//
+ /** Issue a control request to the engine */
+ static inline TInt Control(TState aRequest);
+private:
+ inline Profiler();
+ };
+
+inline Profiler::Profiler()
+ {}
+
+inline TInt Profiler::Control(TState aRequest)
+//
+// Connect to the profiler engine, and issue the control request if successful
+//
+ {
+ Profiler p;
+ TInt r = p.CreateSession(KProfilerName, TVersion(), 0);
+ if (r == KErrNone)
+ {
+ p.SendReceive(aRequest);
+ p.RSessionBase::Close();
+ }
+ return r;
+ }
+
+inline TInt Profiler::Start()
+ {return Control(EStart);}
+
+inline TInt Profiler::Stop()
+ {return Control(EStop);}
+
+inline TInt Profiler::Close()
+ {return Control(EClose);}
+
+inline TInt Profiler::Unload()
+ {return Control(EUnload);}
+
+
+
+/*
+ * This is an internal interface to the profiling engine which allows
+ * an additional control DLL to be loaded, replacing the profiler's
+ * default console UI
+ */
+
+/**
+Implementation class providing access to the profiler engine
+
+@internalTechnology
+*/
+class MProfilerEngine
+ {
+public:
+ virtual TInt Control(Profiler::TState aCommand) =0;
+ virtual Profiler::TState State() const =0;
+ };
+
+/**
+The interface that the extra controller must implement to access the profiler.
+
+@internalTechnology
+*/
+class MProfilerController
+ {
+public:
+ /** Release the controller from the profiler. This is invoked when the profiler is unloading. */
+ virtual void Release() =0;
+ /** Ask the profiler to change state */
+ inline TInt Control(Profiler::TState aCommand) const;
+ /* Query the profiler state */
+ inline Profiler::TState GetState() const;
+protected:
+ inline MProfilerController(MProfilerEngine& aEngine);
+private:
+ MProfilerEngine& iEngine;
+ };
+
+/** The signature of ordinal 1 in the controller DLL */
+typedef MProfilerController* (*TProfilerControllerFactoryL)(TInt aPriority, MProfilerEngine& aEngine);
+
+/** The second UID required by the controller DLL */
+const TUid KUidProfilerKeys={0x1000945c};
+
+
+inline MProfilerController::MProfilerController(MProfilerEngine& aEngine)
+ :iEngine(aEngine)
+ {}
+inline TInt MProfilerController::Control(Profiler::TState aCommand) const
+ {return iEngine.Control(aCommand);}
+inline Profiler::TState MProfilerController::GetState() const
+ {return iEngine.State();}
+
+#endif