phonebookengines/contactsmodel/inc/CntApiProfile.h
changeset 0 e686773b3f54
child 24 0ba2181d7c28
equal deleted inserted replaced
-1:000000000000 0:e686773b3f54
       
     1 // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 
       
    17 
       
    18 // uncomment define to select debug prints for API profiling 
       
    19 //#define CONTACTS_API_PROFILING
       
    20 
       
    21 
       
    22 // only process header once
       
    23 #if !defined(SYMBIAN_CNT_API_PROFILE)
       
    24 #define SYMBIAN_CNT_API_PROFILE
       
    25 
       
    26 
       
    27 // is profile logging enabled?
       
    28 #if defined(CONTACTS_API_PROFILING)
       
    29 
       
    30 // for RProcess & RThread
       
    31 #include <e32std.h>
       
    32 
       
    33 // Contact Views
       
    34 #include <cntviewbase.h>
       
    35 
       
    36 
       
    37 class CContactDbApiTimer;
       
    38 
       
    39 class TContactsApiProfile
       
    40 	{
       
    41 public:
       
    42 	enum TCntViewClass
       
    43 		{
       
    44 		ECntVwClassViewBase,			// "CContactViewBase"
       
    45 		ECntVwClassLocalView,			// "CContactLocalView"
       
    46 		ECntVwClassNamedLocalView,		// "CContactNamedLocalView"
       
    47 		ECntVwClassRemoteViewBase,		// "CContactRemoteViewBase"
       
    48 		ECntVwClassRemoteView,			// "CContactRemoteView"
       
    49 		ECntVwClassNamedRemoteView,		// "CContactNamedRemoteView"
       
    50 		};
       
    51 
       
    52 	enum TCntViewApi
       
    53 		{
       
    54 		ECntViewDestructor,						// "~..."
       
    55 		// create API
       
    56 		ECntViewApiNewL,						// "NewL"
       
    57 
       
    58 		ECntViewApiAllFieldsLC,					// "AllFieldsLC"
       
    59 		ECntViewApiAtL,							// "AtL"
       
    60 		ECntViewApiChangeSortOrderL,			// "ChangeSortOrderL"
       
    61 		ECntViewApiClose,						// "Close"
       
    62 		ECntViewApiConstructL,					// "ConstructL"
       
    63 		ECntViewApiContactAtL,					// "ContactAtL"
       
    64 		ECntViewApiContactViewBase_Reserved_1,	// "ContactViewBase_Reserved_1"
       
    65 		ECntViewApiContactViewPreferences,		// "ECntViewApiContactViewPreferences"
       
    66 		ECntViewApiCountL,						// "CountL"
       
    67 		ECntViewApiFieldsWithSeparatorLC,		// "FieldsWithSeparatorLC"
       
    68 		ECntViewApiFindL,						// "FindL"
       
    69 		ECntViewApiGetContactIdsL,				// "GetContactIdsL"
       
    70 		ECntViewApiGetSortOrderL,				// "GetSortOrderL"
       
    71 		ECntViewApiGetViewFindConfigPlugin,		// "GetViewFindConfigPlugin"
       
    72 		ECntViewApiMatchesCriteriaL,			// "MatchesCriteriaL"
       
    73 		ECntViewApiNotifyObserverAsync,			// "NotifyObserverAsync"
       
    74 		ECntViewApiNotifyObservers,				// "NotifyObservers"
       
    75 		ECntViewApiOpen,						// "Open"
       
    76 		ECntViewApiOpenL,						// "OpenL"
       
    77 		ECntViewApiSetViewFindConfigPlugin,		// "SetViewFindConfigPlugin"
       
    78 		ECntViewApiSortL,						// "SortL"
       
    79 		ECntViewApiSortOrder,					// "SortOrder"
       
    80 		ECntViewApiUpdateGroupViewL,			// "UpdateGroupViewL"
       
    81 		};
       
    82 
       
    83 	enum TCntDbApi
       
    84 		{
       
    85 		ECntDbDestructor,					// "~CContactDatabase"
       
    86 		// create APIs - these create a CContactDatabase object plus NewL/NewLC
       
    87 		ECntDbApiNewL,						// "NewL/LC"
       
    88 		ECntDbApiCreateL,					// "CreateL"
       
    89 		ECntDbApiOpen,						// "Open"
       
    90 		ECntDbApiOpenL,						// "OpenL"
       
    91 		ECntDbApiReplaceL,					// "ReplaceL"
       
    92 
       
    93 		ECntDbApiDoOpenL,					// client side Open
       
    94 
       
    95 		// most other APIs (omits some very frequently called APIs)
       
    96 		ECntDbApiAddNewContactL,			// "AddNewContactL"
       
    97 		ECntDbApiAddContactToGroupL,		// "AddContactToGroupL"
       
    98 
       
    99 		ECntDbApiCancelAsyncSort,			// "CancelAsyncSort"
       
   100 		ECntDbApiCloseContactL,				// "CloseContactL"
       
   101 		ECntDbApiCommitContactL,			// "CommitContactL"
       
   102 		ECntDbApiCompactL,					// "CompactL"
       
   103 		ECntDbApiCompressRequired,			// "CompressRequired"
       
   104 		ECntDbApiConnectionId,				// "ConnectionId"
       
   105 		ECntDbApiContactDatabaseExistsL,	// "ContactDatabaseExistsL"
       
   106 		ECntDbApiContactMatchesHintFieldL,	// "ContactMatchesHintFieldL"
       
   107 		ECntDbApiContactsChangedSinceL,		// "ContactsChangedSinceL"
       
   108 		ECntDbApiCountL,					// "CountL"
       
   109 
       
   110 		ECntDbApiCreateCompressorLC,		// "CreateCompressorLC"
       
   111 		ECntDbApiCreateContactCardTemplateL,	// "CreateContactCardTemplateL/LC"
       
   112 		ECntDbApiCreateContactGroupL,		// "CreateContactGroupL/LC"
       
   113 		ECntDbApiCreateRecoverLC,			// "CreateRecoverLC"
       
   114 		ECntDbApiCreateOwnCardL,			// "CreateOwnCardL/LC"
       
   115 
       
   116 		ECntDbApiDatabaseBeginL,			// "DatabaseBeginL"
       
   117 		ECntDbApiDatabaseCommitL,			// "DatabaseCommitL"
       
   118 		ECntDbApiDatabaseDrive,				// "DatabaseDrive"
       
   119 		ECntDbApiDatabaseRollback,			// "DatabaseRollback"
       
   120 
       
   121 		ECntDbApiDeleteContactL,			// "DeleteContactL"
       
   122 		ECntDbApiDeleteContactsL,			// "DeleteContactsL"
       
   123 		ECntDbApiDeleteDatabaseL,			// "DeleteDatabaseL"
       
   124 		ECntDbApiDeletedContactsLC,			// "DeletedContactsLC"
       
   125 		ECntDbApiDeleteDefaultFileL,		// "DeleteDefaultFileL"
       
   126 
       
   127 		ECntDbApiExportSelectedContactsL,	// "ExportSelectedContactsL"
       
   128 
       
   129 		ECntDbApiFileSize,					// "FileSize"
       
   130 		ECntDbApiFilterDatabaseL,			// "FilterDatabaseL"
       
   131 		ECntDbApiFindContactFile,			// "FindContactFile"
       
   132 
       
   133 		ECntDbApiGetCardTemplateIdListL,	// "GetCardTemplateIdListL"
       
   134 		ECntDbApiGetCurrentDatabase,		// "GetCurrentDatabase"
       
   135 		ECntDbApiGetCurrentItem,			// "GetCurrentItem"
       
   136 		ECntDbApiGetDefaultNameL,			// "GetDefaultNameL"
       
   137 		ECntDbApiGetGroupIdListL,			// "GetGroupIdListL"
       
   138 		ECntDbApiGetLastSyncDateL,			// "GetLastSyncDateL"
       
   139 		ECntDbApiGetSpeedDialFieldL,		// "GetSpeedDialFieldL"
       
   140 
       
   141 		ECntDbApiHandleDatabaseEventL,		// "HandleDatabaseEventL"
       
   142 
       
   143 		ECntDbApiICCTemplateIdL,			// "ICCTemplateIdL"
       
   144 		ECntDbApiImportContactsL,			// "ImportContactsL"
       
   145 		ECntDbApiIsDamaged,					// "IsDamaged"
       
   146 
       
   147 		ECntDbApiListDatabasesL,			// "ListDatabasesL"
       
   148 		ECntDbApiLockRecordLC,				// internal method "LockRecordLC"
       
   149 
       
   150 		ECntDbApiMachineId,					// "MachineId"
       
   151 
       
   152 		ECntDbApiOpenContactL,				// "OpenContactL/LX"
       
   153 		ECntDbApiOverrideMachineUniqueId,	// "OverrideMachineUniqueId"
       
   154 
       
   155 		ECntDbApiPhonebookGroupIdL,			// "PhonebookGroupIdL"
       
   156 
       
   157 		ECntDbApiReadContactAndAgentL,		// "ReadContactAndAgentL"
       
   158 		ECntDbApiReadContactL,				// "ReadContactL/LC"
       
   159 		ECntDbApiReadContactTextDefL,		// "ReadContactTextDefL"
       
   160 		ECntDbApiReadMinimalContactL,		// "ReadMinimalContactL/LC"
       
   161 
       
   162 		ECntDbApiRecoverL,					// "RecoverL"
       
   163 		ECntDbApiRecreateSystemTemplateL,	// "RecreateSystemTemplateL"
       
   164 		ECntDbApiRemoveContactFromGroupL,	// "RemoveContactFromGroupL"
       
   165 		ECntDbApiRemoveSpeedDialFieldL,		// "RemoveSpeedDialFieldL"
       
   166 		ECntDbApiResetServerSpeedDialsL,	// "ResetServerSpeedDialsL"
       
   167 		ECntDbApiRestoreSortOrderL,			// "RestoreSortOrderL"
       
   168 
       
   169 		ECntDbApiSetDatabaseDriveL,			// "SetDatabaseDriveL"
       
   170 		ECntDbApiSetDbViewContactType,		// "SetDbViewContactType"
       
   171 		ECntDbApiSetCurrentDatabase,		// "SetCurrentDatabase"
       
   172 		ECntDbApiSetCurrentItem,			// "SetCurrentItem")
       
   173 		ECntDbApiSetFieldAsSpeedDialL,		// "SetFieldAsSpeedDialL"
       
   174 		ECntDbApiSetLastSyncDateL,			// "SetLastSyncDateL"
       
   175 		ECntDbApiSetOwnCardL,				// "SetOwnCardL"
       
   176 		ECntDbApiSetPrefTempateL,			// "SetPrefTempateL"
       
   177 		ECntDbApiSetSortedItemsList,		// "SetSortedItemsList"
       
   178 		ECntDbApiSetViewDefinitionL,		// "SetViewDefinitionL"
       
   179 
       
   180 		ECntDbApiSortArrayL,				// "SortArrayL/LC"
       
   181 		ECntDbApiSortAsyncL,				// "SortAsyncL"
       
   182 		ECntDbApiSortByTypeL,				// "SortByTypeL"
       
   183 		ECntDbApiSortL,						// "SortL"
       
   184 		ECntDbApiSortedItemsL,				// "SortedItemsL"
       
   185 
       
   186 		ECntDbApiStoreSortOrderL,			// "StoreSortOrderL"
       
   187 
       
   188 		ECntDbApiTemplateId,				// "TemplateId"
       
   189 
       
   190 		ECntDbApiUnfiledContactsL,			// "UnfiledContactsL"
       
   191 		ECntDbApiUpdateContactLC,			// "UpdateContactLC"
       
   192 
       
   193 		ECntDbApiVersion,					// "Version"
       
   194 
       
   195 		ECntDbApiWastedSpaceInBytes,		// "WastedSpaceInBytes"
       
   196 		};
       
   197 
       
   198 
       
   199 	// Logging for CContactDatabase APIs:
       
   200 	// line 1 = time, PID, Thread Id, method(..);
       
   201 	// if (aProcessDetail) then line 2 = Proc Name, Thread Name
       
   202 
       
   203 	// log API method call only
       
   204 	static	void CntDbMethodLog(const TCntDbApi& aApiId, TBool aProcessDetail=EFalse);
       
   205 	static	void CntDbMethodLog(const TCntDbApi& aApiId, const TContactItemId aContactId, TBool aProcessDetail=EFalse);
       
   206 	static	void CntDbMethodLog(const TCntDbApi& aApiId, const TDriveUnit aDriveUnit, TBool aProcessDetail=EFalse);
       
   207 	static	void CntDbMethodLog(const TCntDbApi& aApiId, const TDesC& aFileName, TBool aProcessDetail=EFalse);
       
   208 	static	void CntDbMethodLog(const TCntDbApi& aApiId, const TContactItemId aContactItemId, const TContactItemId aContactGroupId, TBool aProcessDetail=EFalse);
       
   209 	static	void CntDbMethodLog(const TCntDbApi& aApiId, const TContactDbObserverEvent &aDbEvent, TBool aProcessDetail=EFalse);
       
   210 
       
   211 	// CContactOpen APIs
       
   212 	static	void CntOpenOpMethodLog(const TDesC& aMethodName, TBool aProcessDetail=EFalse);
       
   213 
       
   214 	// CContactXyzView classes
       
   215 	static	void CntViewMethodLog(const TCntViewClass& aViewClass, const TCntViewApi& aViewApi);
       
   216 	static	void CntViewMethodLog(const TCntViewClass& aViewClass, const TCntViewApi& aViewApi, TInt aIndex);
       
   217 	static	void CntViewMethodLog(const TCntViewClass& aViewClass, const TCntViewApi& aViewApi, const TContactViewEvent& aEvent);
       
   218 	static	void CntViewMethodLog(const TCntViewClass& aViewClass, const TCntViewApi& aViewApi, const RContactViewSortOrder& aSortOrder);
       
   219 	static	void CntViewMethodLog(const TCntViewClass& aViewClass, const TCntViewApi& aViewApi, 
       
   220 									const RContactViewSortOrder& aSortOrder, TContactViewPreferences aContactTypes);
       
   221 	static	void CntViewMethodLog(const TCntViewClass& aViewClass, const TCntViewApi& aViewApi,
       
   222 									const RContactViewSortOrder& aSortOrder,TContactViewPreferences aContactTypes, const TDesC8& aSortPluginName);
       
   223 
       
   224 	static	void CntViewMethodLog(const TCntViewClass& aViewClass, const TCntViewApi& aViewApi, const TDesC& aViewName,
       
   225 									const RContactViewSortOrder& aSortOrder, TContactViewPreferences aContactTypes);
       
   226 	static	void CntViewMethodLog(const TCntViewClass& aViewClass, const TCntViewApi& aViewApi, const TDesC& aViewName,
       
   227 									const RContactViewSortOrder& aSortOrder, TContactViewPreferences aContactTypes, const TDesC8& aSortPluginName);
       
   228 
       
   229 private:
       
   230 	friend class CContactDbApiTimer;
       
   231 	// convert enumertion to ContactDatabase method name
       
   232 	static	const TDesC& CntDbMethodName(const TCntDbApi& aApiId);
       
   233 
       
   234 	// convert enumertions to Contact View class or method names
       
   235 	static	const TDesC& CntViewClassName(const TCntViewClass& aClassId);
       
   236 	static	const TDesC& CntViewMethodName(const TCntViewClass& aClassId, const TCntViewApi& aApiId);
       
   237 	static	const TDesC& CntViewEventName(TInt& aParamFlags, const TContactViewEvent& aEvent);
       
   238 
       
   239 	static	void CntDbMethodLog(TTime& aTime, const TCntDbApi& aApiId, TBool aProcessDetail);
       
   240 	static	void CntDbMethodLog(TTime& aTime, const TCntDbApi& aApiId, const TContactItemId aContactId, TBool aProcessDetail);
       
   241 	static	void CntDbMethodLog(TTime& aTime, const TCntDbApi& aApiId, const TDriveUnit aDriveUnit, TBool aProcessDetail);
       
   242 	static	void CntDbMethodLog(TTime& aTime, const TCntDbApi& aApiId, const TDesC& aFileName, TBool aProcessDetail);
       
   243 	static	void CntDbMethodLog(TTime& aTime, const TCntDbApi& aApiId, const TContactItemId aContactItemId, const TContactItemId aContactGroupId, TBool aProcessDetail);
       
   244 	static	void CntDbMethodLog(TTime& aTime, const TCntDbApi& aApiId, const TContactDbObserverEvent &aDbEvent, TBool aProcessDetail);
       
   245 
       
   246 	static	void CntDbMethodEndLog(const TContactsApiProfile::TCntDbApi& aApiId, TTime& aStartTime);
       
   247 #if !defined(EKA2)
       
   248 	static	void CntDbMethodEndLog(const TContactsApiProfile::TCntDbApi& aApiId, TTime& aStartTime, TInt64& aCpuElapsedTime);
       
   249 #endif
       
   250 
       
   251 	// debug print time, PID etc, and class :: method details
       
   252 	static	void MethodCallLogHelper(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, TBool aProcessDetail, TBool aNewLine);
       
   253 	static	void MethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, const TContactItemId aContactId, TBool aProcessDetail);
       
   254 	static	void MethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, const TContactItemId aContactItemId, const TContactItemId aContactGroupId, TBool aProcessDetail);
       
   255 	static	void MethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, const TDriveUnit aDriveUnit, TBool aProcessDetail);
       
   256 	static	void MethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, const TDesC& aFileName, TBool aProcessDetail);
       
   257 	static	void MethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, const TContactDbObserverEvent &aDbEvent, TBool aProcessDetail);
       
   258 
       
   259 
       
   260 	static	void ViewMethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, TInt aIndex, TBool aProcessDetail);
       
   261 	static	void ViewMethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, const TContactViewEvent& aEvent, TBool aProcessDetail);
       
   262 	static	void ViewMethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, const RContactViewSortOrder& aSortOrder, TBool aProcessDetail, TBool aNewLine);
       
   263 	static	void ViewMethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName,
       
   264 											const RContactViewSortOrder& aSortOrder, TContactViewPreferences aContactTypes, TBool aProcessDetail, TBool aNewLine);
       
   265 	static	void ViewMethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName,
       
   266 											const RContactViewSortOrder& aSortOrder, TContactViewPreferences aContactTypes, const TDesC8& aSortPluginName, TBool aProcessDetail);
       
   267 	static	void ViewMethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, const TDesC& aViewName,
       
   268 											const RContactViewSortOrder& aSortOrder, TContactViewPreferences aContactTypes, TBool aProcessDetail, TBool aNewLine);
       
   269 	static	void ViewMethodCallLog(TTime& aTime, const TDesC& aClassName, const TDesC& aMethodName, const TDesC& aViewName,
       
   270 											const RContactViewSortOrder& aSortOrder, TContactViewPreferences aContactTypes, const TDesC8& aSortPluginName, TBool aProcessDetail);
       
   271 
       
   272 	static	void ProcessNameLog();
       
   273 	};
       
   274 
       
   275 
       
   276 // Log & time API method call
       
   277 NONSHARABLE_CLASS(CContactDbApiTimer) : public CBase
       
   278 	{	
       
   279 public:
       
   280 	static	CContactDbApiTimer* CntDbMethodTimeBeginLC(const TContactsApiProfile::TCntDbApi& aApiId);
       
   281 	static	CContactDbApiTimer* CntDbMethodTimeBeginLC(const TContactsApiProfile::TCntDbApi& aApiId, const TContactItemId aContactId);
       
   282 	static	CContactDbApiTimer* CntDbMethodTimeBeginLC(const TContactsApiProfile::TCntDbApi& aApiId, const TDriveUnit aDriveUnit);
       
   283 	static	CContactDbApiTimer* CntDbMethodTimeBeginLC(const TContactsApiProfile::TCntDbApi& aApiId, const TDesC& aFileName);
       
   284 	static	CContactDbApiTimer* CntDbMethodTimeBeginLC(const TContactsApiProfile::TCntDbApi& aApiId, const TContactItemId aContactItemId, const TContactItemId aContactGroupId);
       
   285 
       
   286 	~CContactDbApiTimer();
       
   287 private:
       
   288 	CContactDbApiTimer(const TContactsApiProfile::TCntDbApi& aApiId);
       
   289 
       
   290 private:
       
   291 	TContactsApiProfile::TCntDbApi	iCntDbApi;
       
   292 	TTime							iStartTime;
       
   293 #if !defined(EKA2)
       
   294 	TTimeIntervalMicroSeconds		iCpuStartTime;
       
   295 	TTimeIntervalMicroSeconds		iCpuEndTime;
       
   296 	TInt64							iCpuElapsedTime;
       
   297 #endif
       
   298 	};
       
   299 
       
   300 
       
   301 #endif // CONTACTS_API_PROFILING
       
   302 
       
   303 
       
   304 
       
   305 // SYMBIAN_CNT_API_PROFILE
       
   306 #endif