phonebookengines/contactsmodel/inc/CntApiProfile.h
changeset 0 e686773b3f54
child 24 0ba2181d7c28
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/inc/CntApiProfile.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,306 @@
+// 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:
+//
+
+
+
+// uncomment define to select debug prints for API profiling 
+//#define CONTACTS_API_PROFILING
+
+
+// only process header once
+#if !defined(SYMBIAN_CNT_API_PROFILE)
+#define SYMBIAN_CNT_API_PROFILE
+
+
+// is profile logging enabled?
+#if defined(CONTACTS_API_PROFILING)
+
+// for RProcess & RThread
+#include <e32std.h>
+
+// Contact Views
+#include <cntviewbase.h>
+
+
+class CContactDbApiTimer;
+
+class TContactsApiProfile
+	{
+public:
+	enum TCntViewClass
+		{
+		ECntVwClassViewBase,			// "CContactViewBase"
+		ECntVwClassLocalView,			// "CContactLocalView"
+		ECntVwClassNamedLocalView,		// "CContactNamedLocalView"
+		ECntVwClassRemoteViewBase,		// "CContactRemoteViewBase"
+		ECntVwClassRemoteView,			// "CContactRemoteView"
+		ECntVwClassNamedRemoteView,		// "CContactNamedRemoteView"
+		};
+
+	enum TCntViewApi
+		{
+		ECntViewDestructor,						// "~..."
+		// create API
+		ECntViewApiNewL,						// "NewL"
+
+		ECntViewApiAllFieldsLC,					// "AllFieldsLC"
+		ECntViewApiAtL,							// "AtL"
+		ECntViewApiChangeSortOrderL,			// "ChangeSortOrderL"
+		ECntViewApiClose,						// "Close"
+		ECntViewApiConstructL,					// "ConstructL"
+		ECntViewApiContactAtL,					// "ContactAtL"
+		ECntViewApiContactViewBase_Reserved_1,	// "ContactViewBase_Reserved_1"
+		ECntViewApiContactViewPreferences,		// "ECntViewApiContactViewPreferences"
+		ECntViewApiCountL,						// "CountL"
+		ECntViewApiFieldsWithSeparatorLC,		// "FieldsWithSeparatorLC"
+		ECntViewApiFindL,						// "FindL"
+		ECntViewApiGetContactIdsL,				// "GetContactIdsL"
+		ECntViewApiGetSortOrderL,				// "GetSortOrderL"
+		ECntViewApiGetViewFindConfigPlugin,		// "GetViewFindConfigPlugin"
+		ECntViewApiMatchesCriteriaL,			// "MatchesCriteriaL"
+		ECntViewApiNotifyObserverAsync,			// "NotifyObserverAsync"
+		ECntViewApiNotifyObservers,				// "NotifyObservers"
+		ECntViewApiOpen,						// "Open"
+		ECntViewApiOpenL,						// "OpenL"
+		ECntViewApiSetViewFindConfigPlugin,		// "SetViewFindConfigPlugin"
+		ECntViewApiSortL,						// "SortL"
+		ECntViewApiSortOrder,					// "SortOrder"
+		ECntViewApiUpdateGroupViewL,			// "UpdateGroupViewL"
+		};
+
+	enum TCntDbApi
+		{
+		ECntDbDestructor,					// "~CContactDatabase"
+		// create APIs - these create a CContactDatabase object plus NewL/NewLC
+		ECntDbApiNewL,						// "NewL/LC"
+		ECntDbApiCreateL,					// "CreateL"
+		ECntDbApiOpen,						// "Open"
+		ECntDbApiOpenL,						// "OpenL"
+		ECntDbApiReplaceL,					// "ReplaceL"
+
+		ECntDbApiDoOpenL,					// client side Open
+
+		// most other APIs (omits some very frequently called APIs)
+		ECntDbApiAddNewContactL,			// "AddNewContactL"
+		ECntDbApiAddContactToGroupL,		// "AddContactToGroupL"
+
+		ECntDbApiCancelAsyncSort,			// "CancelAsyncSort"
+		ECntDbApiCloseContactL,				// "CloseContactL"
+		ECntDbApiCommitContactL,			// "CommitContactL"
+		ECntDbApiCompactL,					// "CompactL"
+		ECntDbApiCompressRequired,			// "CompressRequired"
+		ECntDbApiConnectionId,				// "ConnectionId"
+		ECntDbApiContactDatabaseExistsL,	// "ContactDatabaseExistsL"
+		ECntDbApiContactMatchesHintFieldL,	// "ContactMatchesHintFieldL"
+		ECntDbApiContactsChangedSinceL,		// "ContactsChangedSinceL"
+		ECntDbApiCountL,					// "CountL"
+
+		ECntDbApiCreateCompressorLC,		// "CreateCompressorLC"
+		ECntDbApiCreateContactCardTemplateL,	// "CreateContactCardTemplateL/LC"
+		ECntDbApiCreateContactGroupL,		// "CreateContactGroupL/LC"
+		ECntDbApiCreateRecoverLC,			// "CreateRecoverLC"
+		ECntDbApiCreateOwnCardL,			// "CreateOwnCardL/LC"
+
+		ECntDbApiDatabaseBeginL,			// "DatabaseBeginL"
+		ECntDbApiDatabaseCommitL,			// "DatabaseCommitL"
+		ECntDbApiDatabaseDrive,				// "DatabaseDrive"
+		ECntDbApiDatabaseRollback,			// "DatabaseRollback"
+
+		ECntDbApiDeleteContactL,			// "DeleteContactL"
+		ECntDbApiDeleteContactsL,			// "DeleteContactsL"
+		ECntDbApiDeleteDatabaseL,			// "DeleteDatabaseL"
+		ECntDbApiDeletedContactsLC,			// "DeletedContactsLC"
+		ECntDbApiDeleteDefaultFileL,		// "DeleteDefaultFileL"
+
+		ECntDbApiExportSelectedContactsL,	// "ExportSelectedContactsL"
+
+		ECntDbApiFileSize,					// "FileSize"
+		ECntDbApiFilterDatabaseL,			// "FilterDatabaseL"
+		ECntDbApiFindContactFile,			// "FindContactFile"
+
+		ECntDbApiGetCardTemplateIdListL,	// "GetCardTemplateIdListL"
+		ECntDbApiGetCurrentDatabase,		// "GetCurrentDatabase"
+		ECntDbApiGetCurrentItem,			// "GetCurrentItem"
+		ECntDbApiGetDefaultNameL,			// "GetDefaultNameL"
+		ECntDbApiGetGroupIdListL,			// "GetGroupIdListL"
+		ECntDbApiGetLastSyncDateL,			// "GetLastSyncDateL"
+		ECntDbApiGetSpeedDialFieldL,		// "GetSpeedDialFieldL"
+
+		ECntDbApiHandleDatabaseEventL,		// "HandleDatabaseEventL"
+
+		ECntDbApiICCTemplateIdL,			// "ICCTemplateIdL"
+		ECntDbApiImportContactsL,			// "ImportContactsL"
+		ECntDbApiIsDamaged,					// "IsDamaged"
+
+		ECntDbApiListDatabasesL,			// "ListDatabasesL"
+		ECntDbApiLockRecordLC,				// internal method "LockRecordLC"
+
+		ECntDbApiMachineId,					// "MachineId"
+
+		ECntDbApiOpenContactL,				// "OpenContactL/LX"
+		ECntDbApiOverrideMachineUniqueId,	// "OverrideMachineUniqueId"
+
+		ECntDbApiPhonebookGroupIdL,			// "PhonebookGroupIdL"
+
+		ECntDbApiReadContactAndAgentL,		// "ReadContactAndAgentL"
+		ECntDbApiReadContactL,				// "ReadContactL/LC"
+		ECntDbApiReadContactTextDefL,		// "ReadContactTextDefL"
+		ECntDbApiReadMinimalContactL,		// "ReadMinimalContactL/LC"
+
+		ECntDbApiRecoverL,					// "RecoverL"
+		ECntDbApiRecreateSystemTemplateL,	// "RecreateSystemTemplateL"
+		ECntDbApiRemoveContactFromGroupL,	// "RemoveContactFromGroupL"
+		ECntDbApiRemoveSpeedDialFieldL,		// "RemoveSpeedDialFieldL"
+		ECntDbApiResetServerSpeedDialsL,	// "ResetServerSpeedDialsL"
+		ECntDbApiRestoreSortOrderL,			// "RestoreSortOrderL"
+
+		ECntDbApiSetDatabaseDriveL,			// "SetDatabaseDriveL"
+		ECntDbApiSetDbViewContactType,		// "SetDbViewContactType"
+		ECntDbApiSetCurrentDatabase,		// "SetCurrentDatabase"
+		ECntDbApiSetCurrentItem,			// "SetCurrentItem")
+		ECntDbApiSetFieldAsSpeedDialL,		// "SetFieldAsSpeedDialL"
+		ECntDbApiSetLastSyncDateL,			// "SetLastSyncDateL"
+		ECntDbApiSetOwnCardL,				// "SetOwnCardL"
+		ECntDbApiSetPrefTempateL,			// "SetPrefTempateL"
+		ECntDbApiSetSortedItemsList,		// "SetSortedItemsList"
+		ECntDbApiSetViewDefinitionL,		// "SetViewDefinitionL"
+
+		ECntDbApiSortArrayL,				// "SortArrayL/LC"
+		ECntDbApiSortAsyncL,				// "SortAsyncL"
+		ECntDbApiSortByTypeL,				// "SortByTypeL"
+		ECntDbApiSortL,						// "SortL"
+		ECntDbApiSortedItemsL,				// "SortedItemsL"
+
+		ECntDbApiStoreSortOrderL,			// "StoreSortOrderL"
+
+		ECntDbApiTemplateId,				// "TemplateId"
+
+		ECntDbApiUnfiledContactsL,			// "UnfiledContactsL"
+		ECntDbApiUpdateContactLC,			// "UpdateContactLC"
+
+		ECntDbApiVersion,					// "Version"
+
+		ECntDbApiWastedSpaceInBytes,		// "WastedSpaceInBytes"
+		};
+
+
+	// Logging for CContactDatabase APIs:
+	// line 1 = time, PID, Thread Id, method(..);
+	// if (aProcessDetail) then line 2 = Proc Name, Thread Name
+
+	// log API method call only
+	static	void CntDbMethodLog(const TCntDbApi& aApiId, TBool aProcessDetail=EFalse);
+	static	void CntDbMethodLog(const TCntDbApi& aApiId, const TContactItemId aContactId, TBool aProcessDetail=EFalse);
+	static	void CntDbMethodLog(const TCntDbApi& aApiId, const TDriveUnit aDriveUnit, TBool aProcessDetail=EFalse);
+	static	void CntDbMethodLog(const TCntDbApi& aApiId, const TDesC& aFileName, TBool aProcessDetail=EFalse);
+	static	void CntDbMethodLog(const TCntDbApi& aApiId, const TContactItemId aContactItemId, const TContactItemId aContactGroupId, TBool aProcessDetail=EFalse);
+	static	void CntDbMethodLog(const TCntDbApi& aApiId, const TContactDbObserverEvent &aDbEvent, TBool aProcessDetail=EFalse);
+
+	// CContactOpen APIs
+	static	void CntOpenOpMethodLog(const TDesC& aMethodName, TBool aProcessDetail=EFalse);
+
+	// CContactXyzView classes
+	static	void CntViewMethodLog(const TCntViewClass& aViewClass, const TCntViewApi& aViewApi);
+	static	void CntViewMethodLog(const TCntViewClass& aViewClass, const TCntViewApi& aViewApi, TInt aIndex);
+	static	void CntViewMethodLog(const TCntViewClass& aViewClass, const TCntViewApi& aViewApi, const TContactViewEvent& aEvent);
+	static	void CntViewMethodLog(const TCntViewClass& aViewClass, const TCntViewApi& aViewApi, const RContactViewSortOrder& aSortOrder);
+	static	void CntViewMethodLog(const TCntViewClass& aViewClass, const TCntViewApi& aViewApi, 
+									const RContactViewSortOrder& aSortOrder, TContactViewPreferences aContactTypes);
+	static	void CntViewMethodLog(const TCntViewClass& aViewClass, const TCntViewApi& aViewApi,
+									const RContactViewSortOrder& aSortOrder,TContactViewPreferences aContactTypes, const TDesC8& aSortPluginName);
+
+	static	void CntViewMethodLog(const TCntViewClass& aViewClass, const TCntViewApi& aViewApi, const TDesC& aViewName,
+									const RContactViewSortOrder& aSortOrder, TContactViewPreferences aContactTypes);
+	static	void CntViewMethodLog(const TCntViewClass& aViewClass, const TCntViewApi& aViewApi, const TDesC& aViewName,
+									const RContactViewSortOrder& aSortOrder, TContactViewPreferences aContactTypes, const TDesC8& aSortPluginName);
+
+private:
+	friend class CContactDbApiTimer;
+	// convert enumertion to ContactDatabase method name
+	static	const TDesC& CntDbMethodName(const TCntDbApi& aApiId);
+
+	// convert enumertions to Contact View class or method names
+	static	const TDesC& CntViewClassName(const TCntViewClass& aClassId);
+	static	const TDesC& CntViewMethodName(const TCntViewClass& aClassId, const TCntViewApi& aApiId);
+	static	const TDesC& CntViewEventName(TInt& aParamFlags, const TContactViewEvent& aEvent);
+
+	static	void CntDbMethodLog(TTime& aTime, const TCntDbApi& aApiId, TBool aProcessDetail);
+	static	void CntDbMethodLog(TTime& aTime, const TCntDbApi& aApiId, const TContactItemId aContactId, TBool aProcessDetail);
+	static	void CntDbMethodLog(TTime& aTime, const TCntDbApi& aApiId, const TDriveUnit aDriveUnit, TBool aProcessDetail);
+	static	void CntDbMethodLog(TTime& aTime, const TCntDbApi& aApiId, const TDesC& aFileName, TBool aProcessDetail);
+	static	void CntDbMethodLog(TTime& aTime, const TCntDbApi& aApiId, const TContactItemId aContactItemId, const TContactItemId aContactGroupId, TBool aProcessDetail);
+	static	void CntDbMethodLog(TTime& aTime, const TCntDbApi& aApiId, const TContactDbObserverEvent &aDbEvent, TBool aProcessDetail);
+
+	static	void CntDbMethodEndLog(const TContactsApiProfile::TCntDbApi& aApiId, TTime& aStartTime);
+#if !defined(EKA2)
+	static	void CntDbMethodEndLog(const TContactsApiProfile::TCntDbApi& aApiId, TTime& aStartTime, TInt64& aCpuElapsedTime);
+#endif
+
+	// debug print time, PID etc, and class :: method details
+	static	void MethodCallLogHelper(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, TBool aProcessDetail, TBool aNewLine);
+	static	void MethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, const TContactItemId aContactId, TBool aProcessDetail);
+	static	void MethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, const TContactItemId aContactItemId, const TContactItemId aContactGroupId, TBool aProcessDetail);
+	static	void MethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, const TDriveUnit aDriveUnit, TBool aProcessDetail);
+	static	void MethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, const TDesC& aFileName, TBool aProcessDetail);
+	static	void MethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, const TContactDbObserverEvent &aDbEvent, TBool aProcessDetail);
+
+
+	static	void ViewMethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, TInt aIndex, TBool aProcessDetail);
+	static	void ViewMethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, const TContactViewEvent& aEvent, TBool aProcessDetail);
+	static	void ViewMethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, const RContactViewSortOrder& aSortOrder, TBool aProcessDetail, TBool aNewLine);
+	static	void ViewMethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName,
+											const RContactViewSortOrder& aSortOrder, TContactViewPreferences aContactTypes, TBool aProcessDetail, TBool aNewLine);
+	static	void ViewMethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName,
+											const RContactViewSortOrder& aSortOrder, TContactViewPreferences aContactTypes, const TDesC8& aSortPluginName, TBool aProcessDetail);
+	static	void ViewMethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, const TDesC& aViewName,
+											const RContactViewSortOrder& aSortOrder, TContactViewPreferences aContactTypes, TBool aProcessDetail, TBool aNewLine);
+	static	void ViewMethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, const TDesC& aViewName,
+											const RContactViewSortOrder& aSortOrder, TContactViewPreferences aContactTypes, const TDesC8& aSortPluginName, TBool aProcessDetail);
+
+	static	void ProcessNameLog();
+	};
+
+
+// Log & time API method call
+NONSHARABLE_CLASS(CContactDbApiTimer) : public CBase
+	{	
+public:
+	static	CContactDbApiTimer* CntDbMethodTimeBeginLC(const TContactsApiProfile::TCntDbApi& aApiId);
+	static	CContactDbApiTimer* CntDbMethodTimeBeginLC(const TContactsApiProfile::TCntDbApi& aApiId, const TContactItemId aContactId);
+	static	CContactDbApiTimer* CntDbMethodTimeBeginLC(const TContactsApiProfile::TCntDbApi& aApiId, const TDriveUnit aDriveUnit);
+	static	CContactDbApiTimer* CntDbMethodTimeBeginLC(const TContactsApiProfile::TCntDbApi& aApiId, const TDesC& aFileName);
+	static	CContactDbApiTimer* CntDbMethodTimeBeginLC(const TContactsApiProfile::TCntDbApi& aApiId, const TContactItemId aContactItemId, const TContactItemId aContactGroupId);
+
+	~CContactDbApiTimer();
+private:
+	CContactDbApiTimer(const TContactsApiProfile::TCntDbApi& aApiId);
+
+private:
+	TContactsApiProfile::TCntDbApi	iCntDbApi;
+	TTime							iStartTime;
+#if !defined(EKA2)
+	TTimeIntervalMicroSeconds		iCpuStartTime;
+	TTimeIntervalMicroSeconds		iCpuEndTime;
+	TInt64							iCpuElapsedTime;
+#endif
+	};
+
+
+#endif // CONTACTS_API_PROFILING
+
+
+
+// SYMBIAN_CNT_API_PROFILE
+#endif
\ No newline at end of file