perfapps/perfmon/engine/inc/perfmon_engine.h
author hgs
Fri, 03 Sep 2010 17:11:21 +0300
changeset 51 b048e15729d6
permissions -rw-r--r--
201035
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#ifndef PERFMON_ENGINE_H
hgs
parents:
diff changeset
    20
#define PERFMON_ENGINE_H
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
// INCLUDES
hgs
parents:
diff changeset
    23
#include <e32std.h>
hgs
parents:
diff changeset
    24
#include <e32base.h>
hgs
parents:
diff changeset
    25
#include <apgcli.h>
hgs
parents:
diff changeset
    26
#include <gdi.h>
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
#include "perfmon.hrh"
hgs
parents:
diff changeset
    29
#include "perfmon_powerlistener.h"
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
const TUint KMaxCPUs = 4;
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
// setting keys (do not change uids of existing keys to maintain compatibility to older versions!)
hgs
parents:
diff changeset
    35
const TUid KPMSettingHeartBeat                              = { 0x00 };
hgs
parents:
diff changeset
    36
const TUid KPMSettingMaxSamples                             = { 0x01 };
hgs
parents:
diff changeset
    37
const TUid KPMSettingPriority                               = { 0x02 };
hgs
parents:
diff changeset
    38
const TUid KPMSettingCPUMode                                = { 0x03 };
hgs
parents:
diff changeset
    39
const TUid KPMSettingKeepBackLightOn                        = { 0x04 };
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
const TUid KPMSettingDataPopupVisbility                     = { 0x05 };
hgs
parents:
diff changeset
    42
const TUid KPMSettingDataPopupLocation                      = { 0x06 };
hgs
parents:
diff changeset
    43
const TUid KPMSettingDataPopupSources                       = { 0x07 };
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
const TUid KPMSettingGraphsVerticalBarPeriod                = { 0x08 };
hgs
parents:
diff changeset
    46
const TUid KPMSettingGraphsSources                          = { 0x09 };
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
const TUid KPMSettingLoggingMode                            = { 0x0A };
hgs
parents:
diff changeset
    49
const TUid KPMSettingLoggingFilePath                        = { 0x0B };
hgs
parents:
diff changeset
    50
const TUid KPMSettingLoggingSources                         = { 0x0C };
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
const TUid KPMSettingPowerMonitoringEnabled                 = { 0x0D };
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
// FORWARD DECLARATIONS
hgs
parents:
diff changeset
    55
class CPerfMonValuesContainer;
hgs
parents:
diff changeset
    56
class CPerfMonGraphsContainer;
hgs
parents:
diff changeset
    57
class CPerfMonDataPopupContainer;
hgs
parents:
diff changeset
    58
class CEikonEnv;
hgs
parents:
diff changeset
    59
class CCoeControl;
hgs
parents:
diff changeset
    60
class CDictionaryFileStore;
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
// CLASS DECLARATIONS
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
class TPerfMonNOPCounter
hgs
parents:
diff changeset
    66
    {
hgs
parents:
diff changeset
    67
public:
hgs
parents:
diff changeset
    68
    TInt64      iCounterValue;
hgs
parents:
diff changeset
    69
    TInt        iCPUNumber;
hgs
parents:
diff changeset
    70
    TInt        iAmountOfCPUs;
hgs
parents:
diff changeset
    71
    };
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
class TPerfMonSources
hgs
parents:
diff changeset
    74
    {
hgs
parents:
diff changeset
    75
public:
hgs
parents:
diff changeset
    76
    TBool iSrcEnabled[ESourcesLength];
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
public:
hgs
parents:
diff changeset
    79
    inline void SetDefaults1()
hgs
parents:
diff changeset
    80
        {
hgs
parents:
diff changeset
    81
        iSrcEnabled[ESourceCPU] = ETrue;
hgs
parents:
diff changeset
    82
        iSrcEnabled[ESourceRAM] = ETrue;
hgs
parents:
diff changeset
    83
        iSrcEnabled[ESourceC]   = ETrue;
hgs
parents:
diff changeset
    84
        iSrcEnabled[ESourceD]   = EFalse;
hgs
parents:
diff changeset
    85
        iSrcEnabled[ESourceE]   = EFalse;
hgs
parents:
diff changeset
    86
        iSrcEnabled[ESourceF]   = EFalse;
hgs
parents:
diff changeset
    87
        iSrcEnabled[ESourceG]   = EFalse;
hgs
parents:
diff changeset
    88
        iSrcEnabled[ESourceH]   = EFalse;
hgs
parents:
diff changeset
    89
        iSrcEnabled[ESourceI]   = EFalse;
hgs
parents:
diff changeset
    90
        iSrcEnabled[ESourcePwr] = EFalse;
hgs
parents:
diff changeset
    91
        }
hgs
parents:
diff changeset
    92
    inline void SetDefaults2()
hgs
parents:
diff changeset
    93
        {
hgs
parents:
diff changeset
    94
        iSrcEnabled[ESourceCPU] = ETrue;
hgs
parents:
diff changeset
    95
        iSrcEnabled[ESourceRAM] = ETrue;
hgs
parents:
diff changeset
    96
        iSrcEnabled[ESourceC]   = EFalse;
hgs
parents:
diff changeset
    97
        iSrcEnabled[ESourceD]   = EFalse;
hgs
parents:
diff changeset
    98
        iSrcEnabled[ESourceE]   = EFalse;
hgs
parents:
diff changeset
    99
        iSrcEnabled[ESourceF]   = EFalse;
hgs
parents:
diff changeset
   100
        iSrcEnabled[ESourceG]   = EFalse;
hgs
parents:
diff changeset
   101
        iSrcEnabled[ESourceH]   = EFalse;
hgs
parents:
diff changeset
   102
        iSrcEnabled[ESourceI]   = EFalse;
hgs
parents:
diff changeset
   103
        iSrcEnabled[ESourcePwr] = EFalse;
hgs
parents:
diff changeset
   104
        }
hgs
parents:
diff changeset
   105
    TInt EnabledSourcesCount()
hgs
parents:
diff changeset
   106
        {
hgs
parents:
diff changeset
   107
        TInt srcCount(0);
hgs
parents:
diff changeset
   108
        
hgs
parents:
diff changeset
   109
        for (TInt i=0; i<ESourcesLength; i++)
hgs
parents:
diff changeset
   110
            {
hgs
parents:
diff changeset
   111
            if (iSrcEnabled[i])
hgs
parents:
diff changeset
   112
                srcCount++;
hgs
parents:
diff changeset
   113
            }
hgs
parents:
diff changeset
   114
        
hgs
parents:
diff changeset
   115
        return srcCount;
hgs
parents:
diff changeset
   116
        }
hgs
parents:
diff changeset
   117
    };
hgs
parents:
diff changeset
   118
    
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
class TPerfMonSettings
hgs
parents:
diff changeset
   121
    {
hgs
parents:
diff changeset
   122
public:
hgs
parents:
diff changeset
   123
    TInt                iHeartBeat;
hgs
parents:
diff changeset
   124
    TInt                iMaxSamples;
hgs
parents:
diff changeset
   125
    TInt                iPriority;
hgs
parents:
diff changeset
   126
    TInt                iCPUMode;
hgs
parents:
diff changeset
   127
    TBool               iKeepBacklightOn;
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
    TInt                iDataPopupVisibility;
hgs
parents:
diff changeset
   130
    TInt                iDataPopupLocation;
hgs
parents:
diff changeset
   131
    TPerfMonSources     iDataPopupSources;
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
    TInt                iGraphsVerticalBarPeriod;
hgs
parents:
diff changeset
   134
    TPerfMonSources     iGraphsSources;
hgs
parents:
diff changeset
   135
hgs
parents:
diff changeset
   136
    TInt                iLoggingMode;
hgs
parents:
diff changeset
   137
    TFileName           iLoggingFilePath;
hgs
parents:
diff changeset
   138
    TPerfMonSources     iLoggingSources;
hgs
parents:
diff changeset
   139
    
hgs
parents:
diff changeset
   140
    TBool               iLoggingEnabled;
hgs
parents:
diff changeset
   141
hgs
parents:
diff changeset
   142
    TBool               iPowerMonitoringEnabled;
hgs
parents:
diff changeset
   143
    };
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
class TSampleData
hgs
parents:
diff changeset
   147
    {
hgs
parents:
diff changeset
   148
public:
hgs
parents:
diff changeset
   149
    TInt64                          iFree;
hgs
parents:
diff changeset
   150
    TInt64                          iSize;
hgs
parents:
diff changeset
   151
    TTimeIntervalMicroSeconds       iTimeFromStart;
hgs
parents:
diff changeset
   152
    };
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
typedef CArrayFixSeg<TSampleData> CSampleDataArray;
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
hgs
parents:
diff changeset
   157
class TSampleEntry
hgs
parents:
diff changeset
   158
    {
hgs
parents:
diff changeset
   159
public:
hgs
parents:
diff changeset
   160
    TBuf<16>            iDescription;
hgs
parents:
diff changeset
   161
    TBuf<16>            iUnitTypeShort; //eg. b
hgs
parents:
diff changeset
   162
    TBuf<16>            iUnitTypeLong;  //eg. bytes
hgs
parents:
diff changeset
   163
    TInt                iDriveNumber;   //used only for disk drives
hgs
parents:
diff changeset
   164
    TRgb                iGraphColor;
hgs
parents:
diff changeset
   165
    CSampleDataArray*   iSampleDataArray;
hgs
parents:
diff changeset
   166
    };
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
typedef CArrayFixSeg<TSampleEntry> CSampleEntryArray;
hgs
parents:
diff changeset
   169
hgs
parents:
diff changeset
   170
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
class CPerfMonEngine : public CActive
hgs
parents:
diff changeset
   173
    {
hgs
parents:
diff changeset
   174
public:
hgs
parents:
diff changeset
   175
    ~CPerfMonEngine();
hgs
parents:
diff changeset
   176
    void ActivateEngineL();
hgs
parents:
diff changeset
   177
    void DeActivateEngineL();
hgs
parents:
diff changeset
   178
    void EnableLogging(TBool aEnable);
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
private:
hgs
parents:
diff changeset
   181
    void RunL();
hgs
parents:
diff changeset
   182
    void DoCancel();
hgs
parents:
diff changeset
   183
hgs
parents:
diff changeset
   184
    void LoadSettingsL();
hgs
parents:
diff changeset
   185
    void OpenLogFile(TBool aOpen);
hgs
parents:
diff changeset
   186
    void CreateSamplesDataArrayL();
hgs
parents:
diff changeset
   187
    void UpdateSamplesDataL();
hgs
parents:
diff changeset
   188
    void AppendLatestSamplesToLogsL();
hgs
parents:
diff changeset
   189
    void ActivateCPUMonitoringL();
hgs
parents:
diff changeset
   190
    TBool OpenHandleToNullThread();
hgs
parents:
diff changeset
   191
    void DeActivateCPUMonitoring();
hgs
parents:
diff changeset
   192
    TBool CPUTimeSupported();
hgs
parents:
diff changeset
   193
    TInt GetAmountOfCPUs();
hgs
parents:
diff changeset
   194
    TThreadPriority SettingItemToThreadPriority(TInt aIndex);
hgs
parents:
diff changeset
   195
    void LoadDFSValueL(CDictionaryFileStore* aDicFS, const TUid& aUid, TInt& aValue);
hgs
parents:
diff changeset
   196
    void LoadDFSValueL(CDictionaryFileStore* aDicFS, const TUid& aUid, TDes& aValue);
hgs
parents:
diff changeset
   197
    void LoadDFSValueL(CDictionaryFileStore* aDicFS, const TUid& aUid, TPerfMonSources& aValue);
hgs
parents:
diff changeset
   198
    void SaveDFSValueL(CDictionaryFileStore* aDicFS, const TUid& aUid, const TInt& aValue);
hgs
parents:
diff changeset
   199
    void SaveDFSValueL(CDictionaryFileStore* aDicFS, const TUid& aUid, const TDes& aValue);
hgs
parents:
diff changeset
   200
    void SaveDFSValueL(CDictionaryFileStore* aDicFS, const TUid& aUid, const TPerfMonSources& aValue);
hgs
parents:
diff changeset
   201
    void ActivatePowerMonitoringL();
hgs
parents:
diff changeset
   202
    void DeActivatePowerMonitoring();
hgs
parents:
diff changeset
   203
hgs
parents:
diff changeset
   204
    TInt SampleEntryPosToSettingPos(TInt aSampleEntryPos);
hgs
parents:
diff changeset
   205
hgs
parents:
diff changeset
   206
protected:
hgs
parents:
diff changeset
   207
    CPerfMonEngine();
hgs
parents:
diff changeset
   208
    void ConstructL();
hgs
parents:
diff changeset
   209
    void SaveSettingsL();
hgs
parents:
diff changeset
   210
    virtual void SendDrawEventToContainersL() = 0;
hgs
parents:
diff changeset
   211
    virtual void HandleSettingsChangeL();
hgs
parents:
diff changeset
   212
    
hgs
parents:
diff changeset
   213
public:
hgs
parents:
diff changeset
   214
    inline TPerfMonSettings& Settings() { return iSettings; }
hgs
parents:
diff changeset
   215
    inline CEikonEnv* EikonEnv() { return iEnv; }
hgs
parents:
diff changeset
   216
    inline RApaLsSession& LsSession() { return iLs; }
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
    inline CSampleEntryArray* SampleEntryArray() { return iSampleEntryArray; }
hgs
parents:
diff changeset
   219
    inline TInt CPU0PositionInSamples()          { return iCPU0PositionInSamples; }
hgs
parents:
diff changeset
   220
    inline TInt RAMPositionInSamples()           { return iRAMPositionInSamples; }
hgs
parents:
diff changeset
   221
    inline TInt CDrivePositionInSamples()        { return iCDrivePositionInSamples; }
hgs
parents:
diff changeset
   222
    inline TInt PowerPositionInSamples()         { return iPowerPositionInSamples; }
hgs
parents:
diff changeset
   223
    inline TInt AmountOfCPUs()                   { return iAmountOfCPUs; }
hgs
parents:
diff changeset
   224
    inline TBool PowerMonitoringSupported()      { return iPowerClient->IsSupported(); }
hgs
parents:
diff changeset
   225
hgs
parents:
diff changeset
   226
protected:
hgs
parents:
diff changeset
   227
    RTimer                          iTimer;
hgs
parents:
diff changeset
   228
    CEikonEnv*                      iEnv;
hgs
parents:
diff changeset
   229
    TPerfMonSettings                iSettings;
hgs
parents:
diff changeset
   230
    RApaLsSession                   iLs;
hgs
parents:
diff changeset
   231
    CSampleEntryArray*              iSampleEntryArray;
hgs
parents:
diff changeset
   232
    TTime                           iStartTime;
hgs
parents:
diff changeset
   233
hgs
parents:
diff changeset
   234
    TInt                            iCurrentCPUMode;
hgs
parents:
diff changeset
   235
hgs
parents:
diff changeset
   236
    RThread                         iCPULoadNOPThread[KMaxCPUs];
hgs
parents:
diff changeset
   237
    TPerfMonNOPCounter              iCPULoadNOPCounter[KMaxCPUs];
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
    RThread                         iNullThreads[KMaxCPUs];
hgs
parents:
diff changeset
   240
    TBool                           iCPULoadCalibrating;
hgs
parents:
diff changeset
   241
    TInt                            iCPULoadCalibrationCounter;
hgs
parents:
diff changeset
   242
    TInt64                          iCPULoadMaxValue;
hgs
parents:
diff changeset
   243
    TInt64                          iCPULoadPreviousValue[KMaxCPUs];
hgs
parents:
diff changeset
   244
    TInt                            iAmountOfCPUs;
hgs
parents:
diff changeset
   245
    TTime                           iPreviousTime;
hgs
parents:
diff changeset
   246
hgs
parents:
diff changeset
   247
    TInt                            iCPU0PositionInSamples;
hgs
parents:
diff changeset
   248
    TInt                            iRAMPositionInSamples;
hgs
parents:
diff changeset
   249
    TInt                            iCDrivePositionInSamples;
hgs
parents:
diff changeset
   250
    TInt                            iPowerPositionInSamples;
hgs
parents:
diff changeset
   251
hgs
parents:
diff changeset
   252
    TBool                           iLogFileInitialized;
hgs
parents:
diff changeset
   253
    RFile                           iLogFile;
hgs
parents:
diff changeset
   254
hgs
parents:
diff changeset
   255
    CPerfMonPowerListener*          iPowerClient;
hgs
parents:
diff changeset
   256
    };
hgs
parents:
diff changeset
   257
hgs
parents:
diff changeset
   258
hgs
parents:
diff changeset
   259
#endif