--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/perfsrv/piprofiler/piprofiler_plat/inc/SamplerPluginInterface.h Fri Sep 17 08:38:31 2010 +0300
@@ -0,0 +1,257 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:
+*
+*/
+
+
+#ifndef __SAMPLER_PLUGIN_INTERFACE__
+#define __SAMPLER_PLUGIN_INTERFACE__
+
+#include <e32base.h>
+#include <ecom/ecom.h>
+#include <badesca.h>
+#include <piprofiler/ProfilerAttributes.h> // internal settings format presentations
+
+
+// Constant for indexing (iOrder):
+const TInt KSamplerPluginNotIndexed = -1;
+
+/**
+ * Constant: KSamplerPluginInterfaceUid
+ *
+ * Description: UID of this ECOM interface. It should be unique in the system.
+ * It is used to identify this specific custom interface.
+ * Implementations of this interface will use this ID, when they
+ * publish the implementation. Clients use this UID to search for
+ * implementations for this interface (the
+ * EcomInterfaceDefinition.inl does this).
+ */
+const TUid KSamplerPluginInterfaceUid = {0x2001E5BC};
+
+/**
+ *
+ * Description: UID of this ECOM interface. It should be unique in the system.
+ *
+ */
+enum TGenericSettingTypes
+{
+ EEnablePlugin,
+ EOutputSettings,
+ ESaveDrive,
+ EFilePrefix,
+ ETracingMode
+};
+
+
+enum TSamplerCaptionTypes
+ {
+ ECaptionLengthShort,
+ ECaptionLengthMedium,
+ ECaptionLengthLong,
+ ESettingsCaption
+ };
+
+
+/**
+* Used by GetValue(). These are the keys for retrieving a specific
+* value. This enum can be extended to provide other values as well as
+* long as the original keys are not changed.
+*/
+enum TSamplerPluginValueKeys
+ {
+
+ ESamplerPluginKeySettingsItemValueString = 1,
+ ESamplerPluginSettings,
+ ESamplerPluginEnabled,
+ ESamplerPluginDisabled,
+ ESamplerPluginType,
+ ESamplerPluginVersion
+ };
+
+
+/**
+ * Class: CSamplerInterfaceDefinition
+ *
+ * Description: Custom ECOM interface definition. This interface is used by
+ * clients to find specific instance and do corresponding
+ * calculation operation for given too numbers. Plugin
+ * implementations implement the Calculate function.
+ */
+class TBapBuf;
+class CProfilerSampleStream;
+
+class CSamplerPluginInterface : public CBase
+{
+
+ // CSamplerPluginLoader accesses iOrder which should not be accessed outside.
+ friend class CSamplerPluginLoader;
+
+public:
+ // Wrapper functions to handle ECOM "connectivity".
+ // These are implemented in EComInterfaceDefinition.inl.
+ // These functions are used only by the client.
+
+ /**
+ * Function: NewL
+ *
+ * Description: Wraps ECom object instantitation. Will search for
+ * interface implementation, which matches to given
+ * aOperationName.
+ *
+ * Param: aOperationName name of requested implementation.
+ * Implementations advertise their "name" as specified
+ * in their resource file field
+ * IMPLEMENTATION_INFO::default_data.
+ * For details, see EcomInterfaceDefinition.inl comments.
+ * In this example, the allowed values are "sum" and
+ * "multiply".
+ *
+ * Note: This is not a "normal" NewL method, since normally NewL
+ * methods are only defined for concrete classes.
+ * Note that also implementations of this interface provide
+ * NewL methods. They are the familiar NewL's, which create
+ * instance of classes.
+ */
+ static CSamplerPluginInterface* NewL(const TUid aImplementationUid, TAny* aInitParams);
+
+ /**
+ * Function: ~CSamplerPluginInterface
+ *
+ * Description: Wraps ECom object destruction. Notifies the ECOM
+ * framework that specific instance is being destroyed.
+ * See EcomInterfaceDefinition.inl for details.
+ */
+ virtual ~CSamplerPluginInterface();
+protected: // New
+
+ /**
+ * C++ constructor.
+ */
+ CSamplerPluginInterface();
+
+public:
+ // Public pure virtual functions, which are implemented by
+ // interface implementations (See ..\plugin)
+
+ /**
+ * Method for initializing and starting of profiling in single plugin implementation
+ * @param aStream is a data stream to store the gathered data, provided by engine
+ * @return TInt if no error KErrNone, else any of system-wide errors
+ */
+ virtual TInt ResetAndActivateL(CProfilerSampleStream& aStream) = 0;
+
+ /**
+ * Method for stopping of profiling in single plugin implementation
+ * @return TInt if no error KErrNone, else any of system-wide errors
+ */
+ virtual TInt StopSampling() = 0;
+
+ /**
+ * Method for checking if plugin is enabled
+ * @return TBool if enabled return ETrue else EFalse
+ */
+ virtual TBool Enabled() = 0;
+
+ /**
+ * Method for getting an array of sampler attributes, size of an array: 1...n
+ * @return array of settings of one or several sampler plugins
+ */
+ virtual void GetAttributesL(CArrayFixFlat<TSamplerAttributes>* aAttributeArray) = 0;
+
+ /**
+ * Method for setting configurations of single sampler attributes
+ * @param aAttributes contains settings of a single sampler plugin
+ */
+ virtual TInt SetAttributesL(TSamplerAttributes& aAttributes) = 0;
+
+ /**
+ * Method for parsing text formatted settings block and converting
+ * it to TSamplerAttributes data structure
+ * @param aSingleSettingArray containing setting lines of a single sampler
+ * @return status of conversion, if success KErrNone, else KErrGeneral
+ */
+ virtual TInt ConvertRawSettingsToAttributes(CDesC8ArrayFlat* aSingleSettingArray) = 0;
+
+ /**
+ * Method for getting UID of this plugin.
+ * @param aSubId the implementation id of sub sampler
+ * @returns uid of sampler or sub sampler, if aSubId -1 uid of sampler, else uid of sub sampler
+ */
+ virtual TUid Id(TInt aSubId) const = 0;
+
+ /**
+ * Method for getting locally defined sub ID value inside a specific plug-in.
+ * @param aUid of a specific sampler
+ * @returns local ID of sampler or sub sampler
+ */
+ virtual TInt SubId(TUid aUid) const = 0;
+
+ /**
+ * Method for getting sampler type.
+ * @returns PROFILER_USER_MODE_SAMPLER, PROFILER_KERNEL_MODE_SAMPLER or PROFILER_DUMMY_MODE_SAMPLER
+ */
+ virtual TInt GetSamplerType() = 0;
+
+
+ // some internal inline methods, used by engine
+ inline TInt Flush();
+ inline TInt AddSample(TUint8* sample, TUint32 length, TInt limitSize);
+ inline void SetOrder( TInt aOrder );
+ inline static void ListAllImplementationsL(RImplInfoPtrArray& aImplInfoArray);
+
+ /**
+ * Static methods for getting setting value out of descriptor
+ *
+ * @param aBuf buffer where to convert the value
+ * @param aValue parameter where to store the requested type of value
+ */
+ inline static void Str2Bool(const TDesC8& aBuf, TBool& aValue);
+ inline static void Str2Int(const TDesC8& aBuf, TInt& aValue);
+ inline static void Str2Int(const TDesC8& aBuf, TUint32& aValue);
+
+ /** iDtor_ID_Key Instance identifier key. When instance of an
+ * implementation is created by ECOM framework, the
+ * framework will assign UID for it. The UID is used in
+ * destructor to notify framework that this instance is
+ * being destroyed and resources can be released.
+ */
+ TUid iDtor_ID_Key;
+
+ /**
+ * Index of the plugin in listbox. Used for CSamplerPluginLoader. Default
+ * value is KSamplerPluginNotIndexed which means not ordered. This value is
+ * read, if defined, from the opaque_data field of the plugin's resource
+ * definition. Index starts from 0.
+ */
+ TInt iOrder;
+
+public:
+ TInt iSamplerType;
+
+ // this variable must be defined by the extending classes!!
+ TInt iSamplerId;
+
+ CProfilerSampleStream* iStream;
+ TBool iEnabled;
+
+private:
+ TBapBuf* iBuffer;
+};
+
+#include <piprofiler/ProfilerGenericClassesUsr.h>
+#include <piprofiler/SamplerPluginInterface.inl>
+
+
+#endif // __SAMPLER_PLUGIN_INTERFACE__