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