diff -r 000000000000 -r e686773b3f54 phonebookengines/contactsmodel/inc/CntApiProfile.h --- /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 + +// Contact Views +#include + + +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