phonebookui/Phonebook2/inc/Pbk2Profile.h
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/inc/Pbk2Profile.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,349 @@
+/*
+* Copyright (c) 2005-2007 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:  Phonebook 2 profiling support.
+*
+*/
+
+
+#ifndef PBK2PROFILE_H
+#define PBK2PROFILE_H
+
+#include <e32def.h>
+#include <e32std.h>
+#include "Pbk2Config.hrh"
+
+/**
+ * Phonebook 2 profiling implementation.
+ *
+ */
+#ifdef PBK2_ENABLE_PROFILE
+
+    /* profiling implementation */
+    #define PBK2_PROFILE_START(aBin) \
+        Pbk2Profile::TPbk2Profiling::GlobalL()->StartProfile(aBin);
+
+    #define PBK2_PROFILE_END(aBin) \
+        Pbk2Profile::TPbk2Profiling::GlobalL()->EndProfile(aBin);
+
+    /// Needs PBK2_ENABLE_DEBUG_LOGGER
+    #define PBK2_PROFILE_DISPLAY(aBin)
+    #define PBK2_PROFILE_RESET(aBin)
+    #define PBK2_PROFILE_DELETE() \
+        delete Pbk2Profile::TPbk2Profiling::GlobalL()
+
+#else // PBK2_ENABLE_PROFILE
+
+    /* Profiling not enabled - empty implementation */
+    #define PBK2_PROFILE_START(aBin)
+    #define PBK2_PROFILE_END(aBin)
+    #define PBK2_PROFILE_DISPLAY(aBin)
+    #define PBK2_PROFILE_RESET(aBin)
+    #define PBK2_PROFILE_DELETE()
+
+#endif // PBK2_ENABLE_PROFILE
+
+
+namespace Pbk2Profile {
+
+    // CONSTANTS
+    enum TPbk2ProfileBin
+        {
+        /////////////////////////////////////////////////////////////////////
+        // Measures full startup.
+        /////////////////////////////////////////////////////////////////////
+        /**
+         * NewApplication() (CPbk2Application.cpp)
+         *    -->
+         * CPbk2NamesListAppView::HandleNamesListControlEventL
+         *   (TPbk2NamesListControlEvent::EReady)
+         */
+        EFullStartup                        =  1,
+
+        /////////////////////////////////////////////////////////////////////
+        // Following bins are in sequential order and there is no overlapping
+        /////////////////////////////////////////////////////////////////////
+        EAppUiConstruction = 2, // CPbk2AppUi::ConstructL
+        EAppUiBaseConstruct = 3, // call to AppUI::BaseContructL
+        EAppUiResouceFileLoading = 4, // call to load needed resource files
+        EAppUiCreateGlobals = 5, // Call to create application globals
+        EAppUiCreateViews = 6, // call to view explorer to create view
+
+        /////////////////////////////////////////////////////////////////////
+        // EAppUiConstruction split in several parts
+        /////////////////////////////////////////////////////////////////////
+        EAppUiCreateViewExplorer = 7,   // 45000
+        EAppUiCreateStoreManager = 8,
+        EAppUiCreateAppUiExtension = 9,
+        EAppUiCreateStartupMonitor = 10,
+        EAppUiOpenStores = 11,
+        EViewExplorerCreateAppViewFactory = 12,
+        EViewExplorerCreateAppView = 13,
+        EViewExplorerAddView = 14,
+
+        /////////////////////////////////////////////////////////////////////
+        // Names list view split in several parts
+        /////////////////////////////////////////////////////////////////////
+        /**
+         * CPbk2NamesListAppView::ConstructL's BaseConstructL call.
+         */
+        ENamesListViewBaseConstruct         = 15,
+
+        /**
+         * CPbk2NamesListAppView::CreateControlsL.
+         */
+        ENamesListViewCreateControls        = 16,
+
+        /**
+         * CPbk2NamesListAppView::DoActivateL.
+         */
+        ENamesListViewDoActivateL           = 17,
+
+        /////////////////////////////////////////////////////////////////////
+        // Contact info view split in several parts
+        /////////////////////////////////////////////////////////////////////
+        /**
+         * CPbk2ContactInfoAppView::ConstructL's BaseConstructL call.
+         */
+        EContactInfoViewBaseConstruct       = 18,
+
+        /////////////////////////////////////////////////////////////////////
+        // AIW
+        /////////////////////////////////////////////////////////////////////
+        /**
+         * CPbk2AiwInterestItemBase::AttachL's menu attach.
+         */
+        EAiwMenuAttach                      = 19,
+
+        /**
+         * CPbk2AiwInterestItemBase::AttachL's base service attach.
+         */
+        EAiwBaseServiceAttach               = 20,
+
+        /////////////////////////////////////////////////////////////////////
+        // App view factory create view split in several parts
+        /////////////////////////////////////////////////////////////////////
+
+        EAppViewFactoryCreateAppViewL       = 21,
+        EAppViewFactoryNamesListAppViewNewL = 23,   // costly
+        EAppViewFactoryContactInfoAppViewNewL = 24,
+        EAppViewFactorySettingsAppViewNewL  = 25,
+
+        /////////////////////////////////////////////////////////////////////
+        // Names list app view construction split in several parts
+        /////////////////////////////////////////////////////////////////////
+        ENamesListAppViewConstruction       = 26,
+        ENamesListGetCommandHandler         = 27, // 5000
+        ENamesListAIWRegisterInterestCall   = 28, // 53125
+        ENamesListAIWRegisterInterestPOC    = 29, // 100000
+        ENamesListAIWRegisterInterestSyncML = 30, // 55000
+        ENamesListRegisterStoreConfiguration = 31,
+        ENamesListPenSupportConstruction    = 32,
+
+        /////////////////////////////////////////////////////////////////////
+        // Names list create control split in several parts
+        /////////////////////////////////////////////////////////////////////
+        ENamesListViewCreateContainer = 33,     // 5000
+        ENamesListViewSetHelpContext = 34,      // 0
+        ENamesListViewGetContactManager = 35,   // 0
+        ENamesListViewCreateNamesListControl = 36, // 87500
+        ENamesListViewSetControl = 37,              // 0
+        ENamesListViewAddToStack = 38,              // 0
+
+        /////////////////////////////////////////////////////////////////////
+        // Names list DoActivateL split in several parts
+        /////////////////////////////////////////////////////////////////////
+        ENamesListViewDoActivateAddMenuCommandObserver = 39,    // 0
+        ENamesListViewDoActivateLoadTitle = 40,                 // 0
+        ENamesListViewDoActivateHandleViewActivation = 41,      // 5000
+        ENamesListViewDoActivateParamHandling = 42,             // 0
+        ENamesListViewDoActivateActivateControl = 43,           // 15000
+        ENamesListViewDoActivateNotifyViewActivatation = 44,    // 44000
+        ENamesListViewDoActivateToolbar = 45,                   // 0
+
+        /////////////////////////////////////////////////////////////////////
+        // Document Create globals
+        /////////////////////////////////////////////////////////////////////
+        EDocumentCreateExtensionManager = 47,
+
+        /////////////////////////////////////////////////////////////////////
+        // Shared objects construction split in several parts
+        /////////////////////////////////////////////////////////////////////
+        EAppServicesCreateStoreManager = 48,     // 15000
+        EAppServicesCreateStorePropertyArray = 49,   // 5000
+        EAppServicesCreateFieldPropertyArray = 50,   // 5000
+        EAppServicesCreateStoreConfiguration = 51,   // 0
+        EAppServicesCreateSortOrderManager = 52,     // 5000
+
+        /////////////////////////////////////////////////////////////////////
+        // UI Extension manager creation split in several parts
+        /////////////////////////////////////////////////////////////////////
+        EUiExtensionManagerCreateExtensionLoader = 53,  // 55000
+        EUiExtensionManagerCreateConfigurationObserver = 55, // 0
+        EUiExtensionManagerCreateThinExtensionLoader = 56,  // 45000
+        EUiExtensionManagerCreateMenuManager = 57,          // 0
+
+        /////////////////////////////////////////////////////////////////////
+        // UI Extension loader creation split in several parts
+        /////////////////////////////////////////////////////////////////////
+        EUiExtensionloaderLoadResourceFile = 58,    // 5000
+        EUiExtensionloaderListImplementations = 59, // 0
+        EUiExtensionloaderLoopExtensionPlugins = 60,    // 10000
+        EUiExtensionloaderLoadStartupExtensions = 61,   // 45000
+
+        /////////////////////////////////////////////////////////////////////
+        // Thin UI Extension loader creation split in several parts
+        /////////////////////////////////////////////////////////////////////
+        EThinUiExtensionLoaderListImplementations = 62, // 0
+        EThinUiExtensionLoaderLoopImplementations = 63, // 45000
+
+        /////////////////////////////////////////////////////////////////////
+        // View explorer construction split in several parts
+        /////////////////////////////////////////////////////////////////////
+        EViewExplorerConstructionReadViewGraph = 64, // 0
+        EViewExplorerConstructionGetNaviPane = 65,  // 0
+        EViewExplorerConstructionCreateTabGroup = 66, // 45000
+
+        /////////////////////////////////////////////////////////////////////
+        // Tab group construction split in several parts
+        /////////////////////////////////////////////////////////////////////
+        ETabGroupCreateTabGroups = 67, // 26000
+        ETabGroupSkinTabGroups = 68,    // 15000
+        
+        /////////////////////////////////////////////////////////////////////
+        // Sort policy's compare
+        /////////////////////////////////////////////////////////////////////
+        ESortPolicyCompareContacts = 69,
+        ESortPolicySortUtil = 70,
+
+        /////////////////////////////////////////////////////////////////////
+        // Contact info start up analysis split to several parts
+        /////////////////////////////////////////////////////////////////////
+        EContactInfoConstructL = 71,        // 2000
+        EContactInfoStartTime = 72,         // 106520, 95875 (view loading, doactivate to view ready)
+        EContactInfoDoActivateContactChanged = 73,  // 112500, 108875 (from doactivate to contact changed call, spanning start time)
+        EContactInfoDoActivateL = 74,           // 71000, 61750 (doactivate)
+        EContactInfoContactChangedL = 75,       // 685500, 4784000
+        EContactInfoCreateControlsL = 76,       // 52000, 43750 
+        EContactInfoAttachAIWProvidersL = 77,   // 0, 0
+        EContactInfoContactChangedLUpdateControls = 78,     // 4732375
+        EContactInfoContactChangedLSetFocusedField = 79,    // 0
+        EContactInfoContactChangedLRestoreControlState = 80,    // 2000
+        EContactInfoContactChangedLCommitViewTransaction = 81, // 0
+        EContactInfoContactChangedLNotifyStartupMonitor = 82, // 0
+
+        /////////////////////////////////////////////////////////////////////
+        // Contact info control update split
+        /////////////////////////////////////////////////////////////////////
+        EContactInfoControlUpdateL = 83,                                //
+        EContactInfoControlUpdateLCreateStoreSpecificFieldProps = 84,   // 0
+        EContactInfoControlUpdateLCreatePresentationContact = 85,       // 1000
+        EContactInfoControlUpdateLCreateTitlePanePicture = 86,          // 10000
+        EContactInfoControlUpdateLCreateSwapper = 87,                   // 0
+        EContactInfoControlUpdateLStorePanes = 88,                      // 1000
+        EContactInfoControlUpdateLCreateDynamicFieldProperties = 89,    // 1000
+        EContactInfoControlUpdateLPrepareForUpdate = 90,                // 4651250
+        EContactInfoControlUpdateLSetTitlePane = 91,                    // 4000
+        EContactInfoControlUpdateLUpdateListbox = 92,                   // 2000
+        EContactInfoControlUpdateLCleanupState = 93,                    // 0
+        EContactInfoControlUpdateLSetIndex = 94,                        // 0
+        EContactInfoControlUpdateLUpdateNavigators = 95,                // 14000
+        EContactInfoControlUpdateLSendEvents = 96,                      // 11000
+
+        /////////////////////////////////////////////////////////////////////
+        // CPbk2ContactInfoListBox
+        /////////////////////////////////////////////////////////////////////
+        EContactInfoListBoxPrepareForUpdateLCreateListBoxModel = 97,    // 4634625
+        EContactInfoListBoxPrepareForUpdateLStoreListBoxState = 98,     // 0
+        EContactInfoListBoxCreateListBoxModelLTimeFormat = 99,          // 1000
+        EContactInfoListBoxCreateListBoxModelLCreateListBoxModel = 100, // 1000
+        EContactInfoListBoxCreateListBoxModelLFormatFields = 101,       // 4622625
+        EContactInfoListBoxCreateListBoxModelLSetClipper = 102,         // 0
+
+        ////////////////////////////////////////////////////////////////////
+        // CPbk2FieldListBoxModel
+        ////////////////////////////////////////////////////////////////////
+        EContactInfoListBoxModelFormatFieldsLFieldAt = 103,             // 0
+        EContactInfoListBoxModelFormatFieldsLFormatField = 104,         // 587000
+        EContactInfoListBoxModelFormatFieldLShowField = 105,            // 0
+        EContactInfoListBoxModelFormatFieldLCreateFieldListBoxRow = 106,    // 0
+        EContactInfoListBoxModelFormatFieldLGetMasterFieldTypeList = 107, // 0
+        EContactInfoListBoxModelFormatFieldLMatchFieldType = 108,   // 0
+        EContactInfoListBoxModelFormatFieldLAppendIcons = 109,      // 0
+        EContactInfoListBoxModelFormatFieldLAppendFieldLabel = 110, // 0
+        EContactInfoListBoxModelFormatFieldLAppendFieldContent = 111,   // 1000
+        EContactInfoListBoxModelFormatFieldLAppendEndIcons = 112,   // 587000
+        EContactInfoListBoxModelFormatFieldLExpandBuffer = 113,     // 0
+        EContactInfoListBoxModelFormatFieldLAppendRow = 114,        // 0
+
+        /////////////////////////////////////////////////////////////////////
+        // End icons
+        /////////////////////////////////////////////////////////////////////
+        EContactInfoListBoxModelAppendEndIconSpeedDial = 115,       // 13000
+        EContactInfoListBoxModelAppendEndIconSpeedDialIcon = 116,   // 0
+        EContactInfoListBoxModelAppendEndIconVoiceTag = 117,        // 421250
+        EContactInfoListBoxModelAppendEndIconVoiceTagIcon = 118,    // 0
+
+        KEndProfileBins = 119
+        };
+
+
+/**
+ * Utility class for Phonebook 2 profiling.
+ */
+class TPbk2Profiling
+    {
+    public: // Interface
+
+        /**
+         * Returns the global shared object of this class.
+         * Creates the object if it does not exist.
+         *
+         * @return  Instance of this class.
+         */
+        IMPORT_C static TPbk2Profiling* GlobalL();
+
+        /**
+         * Destructor.
+         */
+        IMPORT_C ~TPbk2Profiling();
+
+        /**
+         * Starts profiling.
+         *
+         * @param aBin  Integer identifying the profile.
+         */
+        IMPORT_C void StartProfile(
+                TInt aBin );
+
+        /**
+         * Ends profiling.
+         *
+         * @param aBin  Integer identifying the profile.
+         */
+        IMPORT_C void EndProfile(
+                TInt aBin ) const;
+
+    private: // Implementation
+        TPbk2Profiling();
+
+    private:
+        /// Own: Flat C array
+        TTime iProfileArray[KEndProfileBins];
+    };
+
+}  // namespace Pbk2Profile
+
+#endif // PBK2PROFILE_H
+
+// End of File