lowlevellibsandfws/pluginfw/Framework/frame/EComSessionAux.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 02:01:42 +0200
changeset 0 e4d67989cc36
permissions -rw-r--r--
Revision: 201002 Kit: 201005

// 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 "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 __ECOMSESSIONAUX_H__
#define __ECOMSESSIONAUX_H__

#include <e32cmn.h>
#include <startup.hrh>

/**
Codes used for processing ESetGetParameters messages.
Note: The constants are intended for component testing of
EcomServer.
@internalComponent
*/
enum TEComParameterOptions
	{
#ifdef __ECOM_SERVER_TESTABILITY__
	//these enumerated values are used for ecom component testing
	EChangeStartupState,
	EProcessStartupState,
	EGetStartupState,
#endif
#ifdef __ECOM_SERVER_PERFORMANCE__
	//this enumerated value is used for ecom performance testing
	EGetStartupStateTimerResult,
	EGetAccumulatedClientRequestsTimerResult,
	EGetRegistryCounts,
	EResetStartupStateTimerCounts,
	EGetEComPerfTimeRecord,
	EResetEComPerfTimeRecords,
	EGetEComServerHeapResult,
#endif 
	ELastOption
	};

#ifdef __ECOM_SERVER_TESTABILITY__

void ChangeStartupStateL(TInt aState);
	
void ProcessCurrentStartupStateL();
	
TInt GetCurrentStartupStateL();

#endif

#ifdef __ECOM_SERVER_PERFORMANCE__

//==================== For Startup State Time Results ===================
/**
@internalComponent
Class for storing start and end timer results for a state.
*/
class TStartupStateTimerResult
	{
public:
	/** State for which to store the timer result */
	TInt iState;
	/** Timer result reading in [ms] at the beginning of the state */
	TReal iStartTime;
	/** Timer result reading in [ms] at the end of the state */
	TReal iEndTime;
	};

/**
@internalComponent
Class for storing start and end timer results for a state and client request type.
*/
class TStartupStateTimerEntry
	{
public:
	/** State in which the ECom client request was made */
	TInt iState;
	/** Timer result reading in [ms] at the beginning of the request */
	TUint32 iTimerResult;
	};

class RStartupStateTimerResults
	{
public: // public methods
	void GetAllTimerResults();
	void Close();
	TInt Count();
	TStartupStateTimerResult& At(TInt aIndex);
	TInt FindInOrderTimerResult(TInt aState);
	TInt FindTimerResult(TInt aState);
	void ResetTimerCountL();
private: // private methods
	TInt GetTimerResult(TInt aTimerIdx, TUint32& aTimerResult, TInt& aState);
private: // private member variables
	RArray<TStartupStateTimerResult> iTimerResults;
	};

//==================== For Client Requests Time Results ===================
/**
@internalComponent
Enumeration of ECom client request types
*/
enum TEComClientRequestType
	{
	EEComCreateRequestType,
	EEComListRequestType,
	EEComNotifyOnChangeRequestType,
	EEComCancelNotifyOnChangeRequestType,
	EEComCollectImplementationsRequestType,
	EEComListExtendedInterfacesRequestType,
	EEComNumClientRequestTypes
	};

/**
@internalComponent
Class for storing start and end timer results for a state and client request type.
*/
class TClientRequestTimerEntry
	{
public:
	/** State in which the ECom client request was made */
	TInt iState;
	/** Timer result reading in [ms] at the beginning of the request */
	TUint iStartTime;
	/** Timer result reading in [ms] at the end of the request */
	TUint iEndTime;
	/** Whether the client request was a list request or a create request */
	TEComClientRequestType iClientRequestType;
	};

/**
@internalComponent
Class to retrieve timing for ECom client requests during the different stages of start-up
*/
class RClientRequestTimerResults
	{
public: // public methods
	void RetrieveResultsL();
	void Close();
	TReal GetAccumulatedClientRequestTime(TUint& aNumRequests);
	TReal GetAccumulatedClientRequestTime(TInt aState, TUint& aNumRequests);
	TReal GetAccumulatedClientRequestTime(TEComClientRequestType aRequestType, TUint& aNumRequests);
	TReal GetAccumulatedClientRequestTime(TInt aState, TEComClientRequestType aRequestType, TUint& aNumRequests);
private: // private methods
	static TInt GetTimerResult(TInt aTimerIdx, TClientRequestTimerEntry& aTimerEntry);
private: // private data
	/** List of all timer results */
	RArray<TClientRequestTimerEntry> iResults;
	};

/**
@internalComponent
Class to retrieve ECom plugin counts
*/
class RegistryCounts
	{
public:
	// Struct for storing registry counts.
	struct TRegistryCounts
		{
		enum TRegistryCountDriveType
			{
			ERoInternal,
			ENonRoInternal,
			EAll
			};
		/** The number of drives found */
		TInt iDrives;
		/** The number of plugins found */
		TInt iDlls;
		/** The number of interfaces found */
		TInt iInterfaces;
		/** The number fo implementations found */
		TInt iImplementations;
		};

public: // public methods
	static void GetRegistryCountsL(TRegistryCounts::TRegistryCountDriveType aType, TRegistryCounts& aCounts);
private: // private methods
private: // private data
	};

//==================== For ECom Performance Time Results ===================
/**
@internalComponent
ECom performance time record types. Time records can be retrieved by type.
*/
enum TEComPerfTimeRecordType
	{
	// Used only for validation, not used by any real types
	ENullType,
	// Time record types, distinguished by functions it exams
	ECDiscovererNotifierRunL,
	ECDiscovererTimerRunL,
	ECDiscovererRediscoveryScanDirectoryL,
	};

/**
@internalComponent
Class for storing a fast count result with type and other information.
*/
class TEComPerfTimeRecordEntry
	{
public:
	// Fast counter result.
	TUint iTime;
	// The type of time record.
	TEComPerfTimeRecordType iType;
	// Additional inforamtion attached with the record. Eg. Drive number of a notifier
	TInt iInfo;
	};

/**
@internalComponent
Class for storing a complete time measurement result (in ms) with type and other information.
*/
class TEComPerfRealTimeResult
	{
public:
	// Time result reading in [ms] at the beginning of the measurement.
	TReal iStartTime;
	// Time result reading in [ms] at the end of the measurement.
	TReal iEndTime;
	// Time result type, indicating which function/method it measures.
	TEComPerfTimeRecordType iType;
	// Additional information if needed.
	TInt iInfo;
	};

/**
@internalComponent
Class for storing the heap usage at various startup state
*/
class TEComPerfHeapUsage
	{
public:
	/** State for which to store the heap usage */
	TInt iState;
	/** Current committed heap reading */
	TInt iHeapSize;	
	};

/**
@internalComponent
An R Class to retrieve the heap record from the server side
*/
class REComHeapUsageRecords
	{
public:
	void OpenL();
	void GetAllHeapUsageResultsL();
	TInt GetHeapUsageAtState(TInt aState);
	void Close();
private:
	TInt GetHeapRecordEntry(TInt aHeapIdx,TEComPerfHeapUsage& aHeapEntry);
private:
	// this will store the actual heap usage at different state
	RArray<TEComPerfHeapUsage> iHeapRecords;	
	};

/**
@internalComponent
An R Class to retrieve time records from server side and process them into real time results. 
 APIs of the class are used by test cases.
*/
class REComPerfTimeRecords
	{
public: // public methods
	void OpenL();
	TInt Count();
	void Reset();
	void ResetRecordsOnServerL();
	void RetrieveResultsByTypeL(TEComPerfTimeRecordType aType, RArray<TEComPerfRealTimeResult>& aTimeResults);
	void RetrieveResultsInfoByTypeL(TEComPerfTimeRecordType aType, RArray<TInt>& aInfos);
	void Close();
private: // private methods
	TInt GetTimeRecordEntry(TInt aTimerIdx, TEComPerfTimeRecordEntry& aTimerEntry);
private: // private member variables
	// Local duplicate of time records on server, filled by Open()
	RArray<TEComPerfTimeRecordEntry> iTimeRecords;
	};

//===========================================================
TReal FastCountToMilliseconds(TInt aFastCount);

#endif

#endif // __ECOMSESSIONAUX_H__