perfapps/memspyui/ui/avkon/src/MemSpyViewHeapTracking.cpp
author hgs
Fri, 17 Sep 2010 14:22:55 +0300
changeset 52 36d60d12b4af
parent 51 b048e15729d6
child 53 819e59dfc032
permissions -rw-r--r--
201037
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
#include "MemSpyViewHeapTracking.h"
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
// System includes
hgs
parents:
diff changeset
    21
#include <hal.h>
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
// Engine includes
hgs
parents:
diff changeset
    24
#include <memspy/engine/memspyengine.h>
hgs
parents:
diff changeset
    25
#include <memspy/engine/memspyengineobjectprocess.h>
hgs
parents:
diff changeset
    26
#include <memspy/engine/memspyengineobjectthread.h>
hgs
parents:
diff changeset
    27
#include <memspy/engine/memspyengineobjectcontainer.h>
hgs
parents:
diff changeset
    28
#include <memspy/engine/memspyengineobjectthreadinfoobjects.h>
hgs
parents:
diff changeset
    29
#include <memspy/engine/memspyengineobjectthreadinfocontainer.h>
hgs
parents:
diff changeset
    30
#include <memspy/engine/memspyenginehelpersysmemtracker.h>
hgs
parents:
diff changeset
    31
#include <memspysession.h>
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
// User includes
hgs
parents:
diff changeset
    34
#include "MemSpyUiUtils.h"
hgs
parents:
diff changeset
    35
#include "MemSpyViewMainMenu.h"
hgs
parents:
diff changeset
    36
#include "MemSpyContainerObserver.h"
hgs
parents:
diff changeset
    37
#include "MemSpyViewHeapTrackingSettings.h"
hgs
parents:
diff changeset
    38
#include "MemSpyViewHeapTrackingResults.h"
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
CMemSpyViewHeapTracking::CMemSpyViewHeapTracking( RMemSpySession& aSession, MMemSpyViewObserver& aObserver )
hgs
parents:
diff changeset
    43
:   CMemSpyViewBase( aSession, aObserver ),    
hgs
parents:
diff changeset
    44
    iState( EMemSpyViewHeapTrackingStateIdle )
hgs
parents:
diff changeset
    45
    {
52
hgs
parents: 51
diff changeset
    46
	if( iMemSpySession.IsSwmtRunningL() )
hgs
parents: 51
diff changeset
    47
		{
hgs
parents: 51
diff changeset
    48
		iState = EMemSpyViewHeapTrackingStateTimerOn;
hgs
parents: 51
diff changeset
    49
		}	   
51
hgs
parents:
diff changeset
    50
    }
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
CMemSpyViewHeapTracking::~CMemSpyViewHeapTracking()
hgs
parents:
diff changeset
    54
    {
hgs
parents:
diff changeset
    55
    delete iStopTimerCallBack;
hgs
parents:
diff changeset
    56
    //iEngine.HelperSysMemTracker().RemoveObserver( this );
hgs
parents:
diff changeset
    57
    }
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
void CMemSpyViewHeapTracking::ConstructL( const TRect& aRect, CCoeControl& aContainer, TAny* aSelectionRune )
hgs
parents:
diff changeset
    61
    {
hgs
parents:
diff changeset
    62
    _LIT( KTitle, "System-Wide Memory Tracking" );
hgs
parents:
diff changeset
    63
    SetTitleL( KTitle );
hgs
parents:
diff changeset
    64
    //
hgs
parents:
diff changeset
    65
    CMemSpyViewBase::ConstructL( aRect, aContainer, aSelectionRune );
hgs
parents:
diff changeset
    66
            
hgs
parents:
diff changeset
    67
    // Backup current config because it may be overwritten with Basic/Full mode settings.       
hgs
parents:
diff changeset
    68
    TMemSpyEngineHelperSysMemTrackerConfig config;
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
    GetSwmtConfig( config );
hgs
parents:
diff changeset
    71
    
hgs
parents:
diff changeset
    72
    iOriginalConfig = config;     
hgs
parents:
diff changeset
    73
        
hgs
parents:
diff changeset
    74
    if ( config.iMode != TMemSpyEngineHelperSysMemTrackerConfig::MemSpyEngineSysMemTrackerModeCustom )
hgs
parents:
diff changeset
    75
        {
hgs
parents:
diff changeset
    76
        // Set config. Needed for updating config for Basic or Full mode.               
hgs
parents:
diff changeset
    77
		SetConfigByModeL( config.iMode, config );
hgs
parents:
diff changeset
    78
        }
hgs
parents:
diff changeset
    79
    
hgs
parents:
diff changeset
    80
    // Make sure the correct item is selected
hgs
parents:
diff changeset
    81
    TInt index = 0;
hgs
parents:
diff changeset
    82
    if  ( aSelectionRune != NULL )
hgs
parents:
diff changeset
    83
        {
hgs
parents:
diff changeset
    84
        const TMemSpyViewType viewType = (TMemSpyViewType) ((TInt) aSelectionRune);
hgs
parents:
diff changeset
    85
        index = IndexByViewType( viewType );
hgs
parents:
diff changeset
    86
        }
hgs
parents:
diff changeset
    87
    iListBox->SetCurrentItemIndex( index );
hgs
parents:
diff changeset
    88
    HandleListBoxItemSelectedL( index );       
hgs
parents:
diff changeset
    89
    }
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
void CMemSpyViewHeapTracking::RefreshL()
hgs
parents:
diff changeset
    93
    {
hgs
parents:
diff changeset
    94
    SetListBoxModelL();
hgs
parents:
diff changeset
    95
    CMemSpyViewBase::SizeChanged();
hgs
parents:
diff changeset
    96
    CMemSpyViewBase::RefreshL();
hgs
parents:
diff changeset
    97
    }
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
TMemSpyViewType CMemSpyViewHeapTracking::ViewType() const
hgs
parents:
diff changeset
   101
    {
hgs
parents:
diff changeset
   102
    return EMemSpyViewTypeHeapTracking;
hgs
parents:
diff changeset
   103
    }
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
CMemSpyViewBase* CMemSpyViewHeapTracking::PrepareParentViewL()
hgs
parents:
diff changeset
   107
    {
hgs
parents:
diff changeset
   108
    
hgs
parents:
diff changeset
   109
    // Save custom settings even if mode is Basic or Full	
hgs
parents:
diff changeset
   110
	TRAP_IGNORE(	        
hgs
parents:
diff changeset
   111
	        iMemSpySession.SetSwmtCategoriesL( iOriginalConfig.iEnabledCategories );	        
hgs
parents:
diff changeset
   112
	        iMemSpySession.SetSwmtFilter( iOriginalConfig.iThreadNameFilter );
hgs
parents:
diff changeset
   113
	        iMemSpySession.SetSwmtHeapDumpsEnabledL( iOriginalConfig.iDumpData );	        
hgs
parents:
diff changeset
   114
	        Settings().StoreSettingsL();
hgs
parents:
diff changeset
   115
	        );
hgs
parents:
diff changeset
   116
    
hgs
parents:
diff changeset
   117
    CMemSpyViewMainMenu* parent = new(ELeave) CMemSpyViewMainMenu( iMemSpySession, iObserver );
hgs
parents:
diff changeset
   118
    CleanupStack::PushL( parent );
hgs
parents:
diff changeset
   119
    parent->ConstructL( Rect(), *Parent(), (TAny*) ViewType() );
hgs
parents:
diff changeset
   120
    CleanupStack::Pop( parent );
hgs
parents:
diff changeset
   121
    return parent;
hgs
parents:
diff changeset
   122
    }
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
CMemSpyViewBase* CMemSpyViewHeapTracking::PrepareChildViewL()
hgs
parents:
diff changeset
   126
    {
hgs
parents:
diff changeset
   127
    CMemSpyViewBase* child = NULL;
hgs
parents:
diff changeset
   128
    const TInt index = iListBox->CurrentItemIndex();
hgs
parents:
diff changeset
   129
    
hgs
parents:
diff changeset
   130
    // Get current config    
hgs
parents:
diff changeset
   131
    TMemSpyEngineHelperSysMemTrackerConfig config;    
hgs
parents:
diff changeset
   132
    
hgs
parents:
diff changeset
   133
    GetSwmtConfig( config );
hgs
parents:
diff changeset
   134
    
hgs
parents:
diff changeset
   135
    //
hgs
parents:
diff changeset
   136
    if  ( index == 0 )
hgs
parents:
diff changeset
   137
        {
hgs
parents:
diff changeset
   138
        // This is the start/stop toggle so we don't make a child view
hgs
parents:
diff changeset
   139
        child = NULL; 
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
        // ... instead we either start or stop the tracker
hgs
parents:
diff changeset
   142
       // if  ( !iEngine.HelperSysMemTracker().IsActive() )
hgs
parents:
diff changeset
   143
        if  ( !iMemSpySession.IsSwmtRunningL() )
hgs
parents:
diff changeset
   144
            {
hgs
parents:
diff changeset
   145
            iState = EMemSpyViewHeapTrackingStateSingleOn;
hgs
parents:
diff changeset
   146
            // Setting observer to be able to stop SWMT after first cycle is completed            
hgs
parents:
diff changeset
   147
            //iEngine.HelperSysMemTracker().SetObserver( this );
hgs
parents:
diff changeset
   148
            iMemSpySession.ForceSwmtUpdateL();
hgs
parents:
diff changeset
   149
            }
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
        // Redraw listbox 
hgs
parents:
diff changeset
   152
        RefreshL();
hgs
parents:
diff changeset
   153
        }
hgs
parents:
diff changeset
   154
    else if  ( index == 1 )
hgs
parents:
diff changeset
   155
        {
hgs
parents:
diff changeset
   156
        // This is the start/stop toggle so we don't make a child view
hgs
parents:
diff changeset
   157
        child = NULL; 
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
        // ... instead we either start or stop the tracker        
hgs
parents:
diff changeset
   160
        if  ( iMemSpySession.IsSwmtRunningL() && iState == EMemSpyViewHeapTrackingStateTimerOn )
hgs
parents:
diff changeset
   161
            {
hgs
parents:
diff changeset
   162
            iState = EMemSpyViewHeapTrackingStateIdle;
hgs
parents:
diff changeset
   163
            iMemSpySession.StopSwmtTimerL();
hgs
parents:
diff changeset
   164
            
hgs
parents:
diff changeset
   165
            }
hgs
parents:
diff changeset
   166
        else if ( iState == EMemSpyViewHeapTrackingStateIdle )
hgs
parents:
diff changeset
   167
            {
hgs
parents:
diff changeset
   168
            iState = EMemSpyViewHeapTrackingStateTimerOn;            
hgs
parents:
diff changeset
   169
            iMemSpySession.StartSwmtTimerL();
hgs
parents:
diff changeset
   170
            }
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
        // Redraw listbox 
hgs
parents:
diff changeset
   173
        RefreshL();
hgs
parents:
diff changeset
   174
        }
hgs
parents:
diff changeset
   175
    else if ( index == 2 )
hgs
parents:
diff changeset
   176
        {
hgs
parents:
diff changeset
   177
        switch ( config.iMode )
hgs
parents:
diff changeset
   178
            {
hgs
parents:
diff changeset
   179
            case TMemSpyEngineHelperSysMemTrackerConfig::MemSpyEngineSysMemTrackerModeBasic:
hgs
parents:
diff changeset
   180
                {
hgs
parents:
diff changeset
   181
                // Set Full mode
hgs
parents:
diff changeset
   182
                SetConfigByModeL( TMemSpyEngineHelperSysMemTrackerConfig::MemSpyEngineSysMemTrackerModeFull, config );
hgs
parents:
diff changeset
   183
                break;
hgs
parents:
diff changeset
   184
                }
hgs
parents:
diff changeset
   185
            case TMemSpyEngineHelperSysMemTrackerConfig::MemSpyEngineSysMemTrackerModeFull:
hgs
parents:
diff changeset
   186
                {
hgs
parents:
diff changeset
   187
                // Set Custom mode
hgs
parents:
diff changeset
   188
                SetConfigByModeL( TMemSpyEngineHelperSysMemTrackerConfig::MemSpyEngineSysMemTrackerModeCustom, config );
hgs
parents:
diff changeset
   189
                break;
hgs
parents:
diff changeset
   190
                }
hgs
parents:
diff changeset
   191
            case TMemSpyEngineHelperSysMemTrackerConfig::MemSpyEngineSysMemTrackerModeCustom:
hgs
parents:
diff changeset
   192
                {
hgs
parents:
diff changeset
   193
                // Set Basic mode
hgs
parents:
diff changeset
   194
                SetConfigByModeL( TMemSpyEngineHelperSysMemTrackerConfig::MemSpyEngineSysMemTrackerModeBasic, config );
hgs
parents:
diff changeset
   195
                break;
hgs
parents:
diff changeset
   196
                }
hgs
parents:
diff changeset
   197
            default: break;
hgs
parents:
diff changeset
   198
            }
hgs
parents:
diff changeset
   199
                
hgs
parents:
diff changeset
   200
        // Redraw listbox 
hgs
parents:
diff changeset
   201
        RefreshL();
hgs
parents:
diff changeset
   202
        }
hgs
parents:
diff changeset
   203
    else if ( index == 3 )
hgs
parents:
diff changeset
   204
        {        
hgs
parents:
diff changeset
   205
        if ( config.iMode == TMemSpyEngineHelperSysMemTrackerConfig::MemSpyEngineSysMemTrackerModeCustom )
hgs
parents:
diff changeset
   206
            {
hgs
parents:
diff changeset
   207
            child = new(ELeave) CMemSpyViewHeapTrackingSettings( iMemSpySession, iObserver );
hgs
parents:
diff changeset
   208
            }
hgs
parents:
diff changeset
   209
        else
hgs
parents:
diff changeset
   210
            {
hgs
parents:
diff changeset
   211
            child = new(ELeave) CMemSpyViewHeapTrackingResults( iMemSpySession, iObserver );
hgs
parents:
diff changeset
   212
            }
hgs
parents:
diff changeset
   213
        }
hgs
parents:
diff changeset
   214
    else if ( index == 4 )
hgs
parents:
diff changeset
   215
        {
hgs
parents:
diff changeset
   216
        child = new(ELeave) CMemSpyViewHeapTrackingResults( iMemSpySession, iObserver );
hgs
parents:
diff changeset
   217
        }
hgs
parents:
diff changeset
   218
    if  ( child )
hgs
parents:
diff changeset
   219
        {
hgs
parents:
diff changeset
   220
        CleanupStack::PushL( child );
hgs
parents:
diff changeset
   221
        child->ConstructL( Rect(), *Parent() );
hgs
parents:
diff changeset
   222
        CleanupStack::Pop( child );
hgs
parents:
diff changeset
   223
        }
hgs
parents:
diff changeset
   224
    
hgs
parents:
diff changeset
   225
    //
hgs
parents:
diff changeset
   226
    return child;
hgs
parents:
diff changeset
   227
    }
hgs
parents:
diff changeset
   228
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
void CMemSpyViewHeapTracking::SetListBoxModelL()
hgs
parents:
diff changeset
   231
    {
hgs
parents:
diff changeset
   232
    CDesCArrayFlat* model = new(ELeave) CDesCArrayFlat(5);
hgs
parents:
diff changeset
   233
    CleanupStack::PushL( model );
hgs
parents:
diff changeset
   234
hgs
parents:
diff changeset
   235
    TBuf<KMaxFullName + 1> item;
hgs
parents:
diff changeset
   236
    
hgs
parents:
diff changeset
   237
    // Get current config    
hgs
parents:
diff changeset
   238
    TMemSpyEngineHelperSysMemTrackerConfig config;       
hgs
parents:
diff changeset
   239
    
hgs
parents:
diff changeset
   240
    GetSwmtConfig( config );
hgs
parents:
diff changeset
   241
hgs
parents:
diff changeset
   242
    // 1st item
hgs
parents:
diff changeset
   243
    _LIT( KItem1FormatEnable, "\tGet dump now" );
hgs
parents:
diff changeset
   244
    model->AppendL( KItem1FormatEnable );
hgs
parents:
diff changeset
   245
hgs
parents:
diff changeset
   246
    
hgs
parents:
diff changeset
   247
    // 1st item
hgs
parents:
diff changeset
   248
    //if  ( iEngine.HelperSysMemTracker().IsActive() && iState == EMemSpyViewHeapTrackingStateTimerOn )
hgs
parents:
diff changeset
   249
    if  ( iMemSpySession.IsSwmtRunningL() && iState == EMemSpyViewHeapTrackingStateTimerOn )
hgs
parents:
diff changeset
   250
        {
hgs
parents:
diff changeset
   251
        _LIT( KItem1FormatEnable, "\tStop timer\t\t%d (sec)" );
hgs
parents:
diff changeset
   252
        TName item;
hgs
parents:
diff changeset
   253
        item.Format( KItem1FormatEnable, config.iTimerPeriod.Int() / 1000000 );
hgs
parents:
diff changeset
   254
        model->AppendL( item );
hgs
parents:
diff changeset
   255
        }
hgs
parents:
diff changeset
   256
    else
hgs
parents:
diff changeset
   257
        {
hgs
parents:
diff changeset
   258
        _LIT( KItem1FormatEnable, "\tStart timer\t\t%d (sec)" );
hgs
parents:
diff changeset
   259
        TName item;
hgs
parents:
diff changeset
   260
        item.Format( KItem1FormatEnable, config.iTimerPeriod.Int() / 1000000 );
hgs
parents:
diff changeset
   261
        model->AppendL( item );
hgs
parents:
diff changeset
   262
        }
hgs
parents:
diff changeset
   263
    
hgs
parents:
diff changeset
   264
    // 2nd item
hgs
parents:
diff changeset
   265
    switch ( config.iMode )
hgs
parents:
diff changeset
   266
        {
hgs
parents:
diff changeset
   267
        case TMemSpyEngineHelperSysMemTrackerConfig::MemSpyEngineSysMemTrackerModeBasic:
hgs
parents:
diff changeset
   268
            {
hgs
parents:
diff changeset
   269
            _LIT( KItem2Format, "\tTracking mode\t\tBasic" );
hgs
parents:
diff changeset
   270
            model->AppendL( KItem2Format );        
hgs
parents:
diff changeset
   271
            break;
hgs
parents:
diff changeset
   272
            }
hgs
parents:
diff changeset
   273
        case TMemSpyEngineHelperSysMemTrackerConfig::MemSpyEngineSysMemTrackerModeFull:
hgs
parents:
diff changeset
   274
            {
hgs
parents:
diff changeset
   275
            _LIT( KItem2Format, "\tTracking mode\t\tFull" );
hgs
parents:
diff changeset
   276
            model->AppendL( KItem2Format );        
hgs
parents:
diff changeset
   277
            break;
hgs
parents:
diff changeset
   278
            }
hgs
parents:
diff changeset
   279
        case TMemSpyEngineHelperSysMemTrackerConfig::MemSpyEngineSysMemTrackerModeCustom:
hgs
parents:
diff changeset
   280
            {
hgs
parents:
diff changeset
   281
            _LIT( KItem2Format, "\tTracking mode\t\tCustom" );
hgs
parents:
diff changeset
   282
            model->AppendL( KItem2Format );
hgs
parents:
diff changeset
   283
            
hgs
parents:
diff changeset
   284
            // 3rd item
hgs
parents:
diff changeset
   285
            TFullName item;
hgs
parents:
diff changeset
   286
            if ( config.iDumpData && 
hgs
parents:
diff changeset
   287
                config.iEnabledCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserHeap )
hgs
parents:
diff changeset
   288
                {
hgs
parents:
diff changeset
   289
                _LIT( KItem3Format, "\tSettings\t\t%d categ., dump" );
hgs
parents:
diff changeset
   290
                
hgs
parents:
diff changeset
   291
                TInt count(0);
hgs
parents:
diff changeset
   292
                for( TInt bit = TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryWindowGroups; bit > 0; bit = bit >> 1 )
hgs
parents:
diff changeset
   293
                    {
hgs
parents:
diff changeset
   294
                    if ( bit & config.iEnabledCategories )
hgs
parents:
diff changeset
   295
                        {
hgs
parents:
diff changeset
   296
                        count++;
hgs
parents:
diff changeset
   297
                        }
hgs
parents:
diff changeset
   298
                    }
hgs
parents:
diff changeset
   299
                item.Format( KItem3Format, count );
hgs
parents:
diff changeset
   300
                }
hgs
parents:
diff changeset
   301
            else
hgs
parents:
diff changeset
   302
                {
hgs
parents:
diff changeset
   303
                _LIT( KItem3Format, "\tSettings\t\t%d categories" );
hgs
parents:
diff changeset
   304
                TInt count(0);
hgs
parents:
diff changeset
   305
                for( TInt bit = TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryWindowGroups; bit > 0; bit = bit >> 1 )
hgs
parents:
diff changeset
   306
                    {
hgs
parents:
diff changeset
   307
                    if ( bit & config.iEnabledCategories )
hgs
parents:
diff changeset
   308
                        {
hgs
parents:
diff changeset
   309
                        count++;
hgs
parents:
diff changeset
   310
                        }
hgs
parents:
diff changeset
   311
                    }
hgs
parents:
diff changeset
   312
                             
hgs
parents:
diff changeset
   313
                item.Format( KItem3Format, count );
hgs
parents:
diff changeset
   314
                }
hgs
parents:
diff changeset
   315
            model->AppendL( item );            
hgs
parents:
diff changeset
   316
            break;
hgs
parents:
diff changeset
   317
            }
hgs
parents:
diff changeset
   318
        default: break;
hgs
parents:
diff changeset
   319
        }
hgs
parents:
diff changeset
   320
    
hgs
parents:
diff changeset
   321
    // 4th item        
hgs
parents:
diff changeset
   322
    TInt cycleCount = iMemSpySession.GetSwmtCyclesCount();    
hgs
parents:
diff changeset
   323
    
hgs
parents:
diff changeset
   324
    if ( cycleCount > 0 )
hgs
parents:
diff changeset
   325
        {
hgs
parents:
diff changeset
   326
        _LIT( KItem2Format, "\tResults\t\t%d cycles" );
hgs
parents:
diff changeset
   327
        TFullName item;
hgs
parents:
diff changeset
   328
        item.Format( KItem2Format, cycleCount );
hgs
parents:
diff changeset
   329
        model->AppendL( item );
hgs
parents:
diff changeset
   330
        }
hgs
parents:
diff changeset
   331
    else
hgs
parents:
diff changeset
   332
        {
hgs
parents:
diff changeset
   333
        _LIT( KItem2Format, "\tResults\t\tNo results" );
hgs
parents:
diff changeset
   334
        model->AppendL( KItem2Format );
hgs
parents:
diff changeset
   335
        }      
hgs
parents:
diff changeset
   336
hgs
parents:
diff changeset
   337
    // Set up list box
hgs
parents:
diff changeset
   338
    CAknSettingStyleListBox* listbox = static_cast< CAknSettingStyleListBox* >( iListBox );
hgs
parents:
diff changeset
   339
    listbox->Model()->SetItemTextArray( model );
hgs
parents:
diff changeset
   340
    listbox->Model()->SetOwnershipType( ELbmOwnsItemArray );
hgs
parents:
diff changeset
   341
    CleanupStack::Pop( model );
hgs
parents:
diff changeset
   342
    }
hgs
parents:
diff changeset
   343
hgs
parents:
diff changeset
   344
void CMemSpyViewHeapTracking::HandleCyclesResetL()
hgs
parents:
diff changeset
   345
    {
hgs
parents:
diff changeset
   346
    }
hgs
parents:
diff changeset
   347
hgs
parents:
diff changeset
   348
hgs
parents:
diff changeset
   349
void CMemSpyViewHeapTracking::HandleCycleStartedL( const CMemSpyEngineHelperSysMemTrackerCycle& /*aCycle*/ )
hgs
parents:
diff changeset
   350
    {
hgs
parents:
diff changeset
   351
    }
hgs
parents:
diff changeset
   352
hgs
parents:
diff changeset
   353
hgs
parents:
diff changeset
   354
void CMemSpyViewHeapTracking::HandleCycleFinishedL( const CMemSpyEngineHelperSysMemTrackerCycle& /*aCycle*/ )
hgs
parents:
diff changeset
   355
    {
hgs
parents:
diff changeset
   356
    // Stopping SWMT does not work directly from this function.
hgs
parents:
diff changeset
   357
    // It has to be made asynchronously.
hgs
parents:
diff changeset
   358
   // iStopTimerCallBack = new (ELeave) CAsyncCallBack( TCallBack( CMemSpyViewHeapTracking::AsyncStopTimerCallback, this ), CActive::EPriorityStandard );
hgs
parents:
diff changeset
   359
   // iStopTimerCallBack->CallBack();
hgs
parents:
diff changeset
   360
    }
hgs
parents:
diff changeset
   361
hgs
parents:
diff changeset
   362
hgs
parents:
diff changeset
   363
TInt CMemSpyViewHeapTracking::IndexByViewType( TMemSpyViewType aType )
hgs
parents:
diff changeset
   364
    {
hgs
parents:
diff changeset
   365
    // Get current config	
hgs
parents:
diff changeset
   366
    TMemSpyEngineHelperSysMemTrackerConfig config;    
hgs
parents:
diff changeset
   367
    
hgs
parents:
diff changeset
   368
    GetSwmtConfig( config );
hgs
parents:
diff changeset
   369
    
hgs
parents:
diff changeset
   370
    TInt index = 0;
hgs
parents:
diff changeset
   371
    //
hgs
parents:
diff changeset
   372
    switch( aType )
hgs
parents:
diff changeset
   373
        {
hgs
parents:
diff changeset
   374
    default:
hgs
parents:
diff changeset
   375
    case EMemSpyViewTypeHeapTrackingResults:
hgs
parents:
diff changeset
   376
        {
hgs
parents:
diff changeset
   377
        if ( config.iMode == TMemSpyEngineHelperSysMemTrackerConfig::MemSpyEngineSysMemTrackerModeCustom )
hgs
parents:
diff changeset
   378
            {
hgs
parents:
diff changeset
   379
            index = 4;
hgs
parents:
diff changeset
   380
            }
hgs
parents:
diff changeset
   381
        else
hgs
parents:
diff changeset
   382
            {
hgs
parents:
diff changeset
   383
            index = 3;
hgs
parents:
diff changeset
   384
            }
hgs
parents:
diff changeset
   385
        break;
hgs
parents:
diff changeset
   386
        }
hgs
parents:
diff changeset
   387
    case EMemSpyViewTypeHeapTrackingSettings:
hgs
parents:
diff changeset
   388
        index = 3;
hgs
parents:
diff changeset
   389
        break;
hgs
parents:
diff changeset
   390
        }
hgs
parents:
diff changeset
   391
    //
hgs
parents:
diff changeset
   392
    return index;
hgs
parents:
diff changeset
   393
    }
hgs
parents:
diff changeset
   394
hgs
parents:
diff changeset
   395
hgs
parents:
diff changeset
   396
void CMemSpyViewHeapTracking::SetConfigByModeL( TMemSpyEngineHelperSysMemTrackerConfig::TMemSpyEngineSysMemTrackerMode aMode, TMemSpyEngineHelperSysMemTrackerConfig& aConfig )
hgs
parents:
diff changeset
   397
    {
hgs
parents:
diff changeset
   398
    switch ( aMode )
hgs
parents:
diff changeset
   399
        {
hgs
parents:
diff changeset
   400
        case TMemSpyEngineHelperSysMemTrackerConfig::MemSpyEngineSysMemTrackerModeBasic:
hgs
parents:
diff changeset
   401
            {
hgs
parents:
diff changeset
   402
            aConfig.iMode = aMode;
hgs
parents:
diff changeset
   403
            aConfig.iEnabledCategories = TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserHeap |
52
hgs
parents: 51
diff changeset
   404
                                         //TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserStacks |
hgs
parents: 51
diff changeset
   405
                                         //TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryGlobalData |
51
hgs
parents:
diff changeset
   406
                                         TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategorySystemMemory;
hgs
parents:
diff changeset
   407
            aConfig.iDumpData = EFalse;
hgs
parents:
diff changeset
   408
            break;
hgs
parents:
diff changeset
   409
            }
hgs
parents:
diff changeset
   410
        case TMemSpyEngineHelperSysMemTrackerConfig::MemSpyEngineSysMemTrackerModeFull:
hgs
parents:
diff changeset
   411
            {
hgs
parents:
diff changeset
   412
            aConfig.iMode = aMode;
hgs
parents:
diff changeset
   413
            aConfig.iEnabledCategories = TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryAll;
hgs
parents:
diff changeset
   414
            aConfig.iDumpData = ETrue;
hgs
parents:
diff changeset
   415
            aConfig.iThreadNameFilter = KNullDesC;
hgs
parents:
diff changeset
   416
            break;
hgs
parents:
diff changeset
   417
            }
hgs
parents:
diff changeset
   418
        case TMemSpyEngineHelperSysMemTrackerConfig::MemSpyEngineSysMemTrackerModeCustom:
hgs
parents:
diff changeset
   419
            {
hgs
parents:
diff changeset
   420
            aConfig.iMode = aMode;
hgs
parents:
diff changeset
   421
            aConfig.iEnabledCategories = iOriginalConfig.iEnabledCategories;
hgs
parents:
diff changeset
   422
            aConfig.iDumpData = iOriginalConfig.iDumpData;
hgs
parents:
diff changeset
   423
            aConfig.iThreadNameFilter = iOriginalConfig.iThreadNameFilter;
hgs
parents:
diff changeset
   424
            break;
hgs
parents:
diff changeset
   425
            }
hgs
parents:
diff changeset
   426
        default: User::Leave( KErrArgument );
hgs
parents:
diff changeset
   427
        }
hgs
parents:
diff changeset
   428
    // Push changes to SWMT
hgs
parents:
diff changeset
   429
    SetSwmtConfig( aConfig );
hgs
parents:
diff changeset
   430
    Settings().StoreSettingsL();
hgs
parents:
diff changeset
   431
    }
hgs
parents:
diff changeset
   432
hgs
parents:
diff changeset
   433
hgs
parents:
diff changeset
   434
TInt CMemSpyViewHeapTracking::AsyncStopTimerCallback( TAny* aParam )
hgs
parents:
diff changeset
   435
    {
hgs
parents:
diff changeset
   436
    CMemSpyViewHeapTracking* view = static_cast<CMemSpyViewHeapTracking*>( aParam );
hgs
parents:
diff changeset
   437
    return view->AsyncStopTimerCallback();
hgs
parents:
diff changeset
   438
    }
hgs
parents:
diff changeset
   439
hgs
parents:
diff changeset
   440
hgs
parents:
diff changeset
   441
TInt CMemSpyViewHeapTracking::AsyncStopTimerCallback()
hgs
parents:
diff changeset
   442
    {
hgs
parents:
diff changeset
   443
    iState = EMemSpyViewHeapTrackingStateIdle;
hgs
parents:
diff changeset
   444
   // iEngine.HelperSysMemTracker().RemoveObserver( this );
hgs
parents:
diff changeset
   445
    TRAP_IGNORE(
hgs
parents:
diff changeset
   446
    	iMemSpySession.StopSwmtTimerL();
hgs
parents:
diff changeset
   447
        RefreshL();
hgs
parents:
diff changeset
   448
        );
hgs
parents:
diff changeset
   449
    delete iStopTimerCallBack;
hgs
parents:
diff changeset
   450
    iStopTimerCallBack = NULL;
hgs
parents:
diff changeset
   451
    return KErrNone;
hgs
parents:
diff changeset
   452
    }
hgs
parents:
diff changeset
   453
hgs
parents:
diff changeset
   454
void CMemSpyViewHeapTracking::GetSwmtConfig( TMemSpyEngineHelperSysMemTrackerConfig& aConfig )
hgs
parents:
diff changeset
   455
	{
hgs
parents:
diff changeset
   456
	TInt categories = 0;
hgs
parents:
diff changeset
   457
	iMemSpySession.GetSwmtCategoriesL( categories );
hgs
parents:
diff changeset
   458
	aConfig.iEnabledCategories = categories;
hgs
parents:
diff changeset
   459
	
hgs
parents:
diff changeset
   460
	TInt timerPeriod = 0;
hgs
parents:
diff changeset
   461
	iMemSpySession.GetSwmtTimerIntervalL( timerPeriod );
hgs
parents:
diff changeset
   462
	aConfig.iTimerPeriod = timerPeriod;
hgs
parents:
diff changeset
   463
	
hgs
parents:
diff changeset
   464
	TBool dumpData = EFalse;
hgs
parents:
diff changeset
   465
	iMemSpySession.GetSwmtHeapDumpsEnabledL( dumpData );
hgs
parents:
diff changeset
   466
	aConfig.iDumpData = dumpData;
hgs
parents:
diff changeset
   467
		     
hgs
parents:
diff changeset
   468
	TName threadNameFilter;
hgs
parents:
diff changeset
   469
	iMemSpySession.GetSwmtFilter( threadNameFilter );
hgs
parents:
diff changeset
   470
	aConfig.iThreadNameFilter = threadNameFilter;
hgs
parents:
diff changeset
   471
		
hgs
parents:
diff changeset
   472
	TMemSpyEngineHelperSysMemTrackerConfig::TMemSpyEngineSysMemTrackerMode mode;
hgs
parents:
diff changeset
   473
	iMemSpySession.GetSwmtMode( mode );
hgs
parents:
diff changeset
   474
	aConfig.iMode = mode;	     	
hgs
parents:
diff changeset
   475
	}
hgs
parents:
diff changeset
   476
hgs
parents:
diff changeset
   477
void CMemSpyViewHeapTracking::SetSwmtConfig( TMemSpyEngineHelperSysMemTrackerConfig& aConfig )
hgs
parents:
diff changeset
   478
	{
hgs
parents:
diff changeset
   479
	iMemSpySession.SetSwmtMode( aConfig.iMode );
hgs
parents:
diff changeset
   480
	iMemSpySession.SetSwmtCategoriesL( aConfig.iEnabledCategories );
hgs
parents:
diff changeset
   481
	iMemSpySession.SetSwmtTimerIntervalL( aConfig.iTimerPeriod.Int() );
hgs
parents:
diff changeset
   482
	iMemSpySession.SetSwmtHeapDumpsEnabledL( aConfig.iDumpData );
hgs
parents:
diff changeset
   483
	iMemSpySession.SetSwmtFilter( aConfig.iThreadNameFilter );
hgs
parents:
diff changeset
   484
	}
hgs
parents:
diff changeset
   485
hgs
parents:
diff changeset
   486