perfsrv/memspy/Engine/Source/Helpers/MemSpyEngineHelperKernelContainers.cpp
author hgs
Mon, 06 Sep 2010 15:00:47 +0300
changeset 51 98307c651589
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
#include<memspy/engine/memspyenginehelperkernelcontainers.h>
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
// User includes
hgs
parents:
diff changeset
    21
#include <memspy/engine/memspyengine.h>
hgs
parents:
diff changeset
    22
#include <memspy/engine/memspyengineutils.h>
hgs
parents:
diff changeset
    23
#include <memspy/engine/memspyengineoutputsink.h>
hgs
parents:
diff changeset
    24
#include <memspy/engine/memspyengineobjectthread.h>
hgs
parents:
diff changeset
    25
#include <memspy/engine/memspyengineobjectprocess.h>
hgs
parents:
diff changeset
    26
#include <memspy/engine/memspyengineobjectcontainer.h>
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
// Driver includes
hgs
parents:
diff changeset
    29
#include <memspy/driver/memspydriverclient.h>
hgs
parents:
diff changeset
    30
#include <memspy/driver/memspydriverconstants.h>
hgs
parents:
diff changeset
    31
#include <memspy/driver/memspydriverenumerationsshared.h>
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
// Constants
hgs
parents:
diff changeset
    34
const TInt KMaxGenericHandleCount = 1024 * 2;
hgs
parents:
diff changeset
    35
_LIT( KMemSpyMarkerKernelContainer, "<%SMEMSPY_KERNEL_CONTAINER_%02d>" );
hgs
parents:
diff changeset
    36
_LIT( KMemSpyMarkerKernelContainersAll, "<%SMEMSPY_KERNEL_CONTAINERS>" );
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
CMemSpyEngineHelperKernelContainers::CMemSpyEngineHelperKernelContainers( CMemSpyEngine& aEngine )
hgs
parents:
diff changeset
    41
:   iEngine( aEngine )
hgs
parents:
diff changeset
    42
    {
hgs
parents:
diff changeset
    43
    }
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
    
hgs
parents:
diff changeset
    46
CMemSpyEngineHelperKernelContainers::~CMemSpyEngineHelperKernelContainers()
hgs
parents:
diff changeset
    47
    {
hgs
parents:
diff changeset
    48
    }
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
void CMemSpyEngineHelperKernelContainers::ConstructL()
hgs
parents:
diff changeset
    52
    {
hgs
parents:
diff changeset
    53
    }
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
CMemSpyEngineHelperKernelContainers* CMemSpyEngineHelperKernelContainers::NewL( CMemSpyEngine& aEngine )
hgs
parents:
diff changeset
    57
    {
hgs
parents:
diff changeset
    58
    CMemSpyEngineHelperKernelContainers* self = new(ELeave) CMemSpyEngineHelperKernelContainers( aEngine );
hgs
parents:
diff changeset
    59
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    60
    self->ConstructL();
hgs
parents:
diff changeset
    61
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    62
    return self;
hgs
parents:
diff changeset
    63
    }
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
EXPORT_C CMemSpyEngineGenericKernelObjectList* CMemSpyEngineHelperKernelContainers::ObjectsForSpecificContainerL( TMemSpyDriverContainerType aForContainer )
hgs
parents:
diff changeset
    67
    {
hgs
parents:
diff changeset
    68
    CMemSpyEngineGenericKernelObjectList* list = CMemSpyEngineGenericKernelObjectList::NewLC( aForContainer, iEngine );
hgs
parents:
diff changeset
    69
    AddObjectsFromContainerL( *list, aForContainer );
hgs
parents:
diff changeset
    70
    CleanupStack::Pop( list );
hgs
parents:
diff changeset
    71
    return list;
hgs
parents:
diff changeset
    72
    }
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
EXPORT_C CMemSpyEngineGenericKernelObjectContainer* CMemSpyEngineHelperKernelContainers::ObjectsAllL()
hgs
parents:
diff changeset
    76
    {
hgs
parents:
diff changeset
    77
    CMemSpyEngineGenericKernelObjectContainer* container = CMemSpyEngineGenericKernelObjectContainer::NewLC();
hgs
parents:
diff changeset
    78
    //
hgs
parents:
diff changeset
    79
    for( TInt i=EMemSpyDriverContainerTypeFirst; i<=EMemSpyDriverContainerTypeLast; i++ )
hgs
parents:
diff changeset
    80
        {
hgs
parents:
diff changeset
    81
        const TMemSpyDriverContainerType type = static_cast< TMemSpyDriverContainerType >( i );
hgs
parents:
diff changeset
    82
        //
hgs
parents:
diff changeset
    83
        CMemSpyEngineGenericKernelObjectList* list = CMemSpyEngineGenericKernelObjectList::NewLC( type, iEngine );
hgs
parents:
diff changeset
    84
        AddObjectsFromContainerL( *list, type );
hgs
parents:
diff changeset
    85
        container->AddListL( list );
hgs
parents:
diff changeset
    86
        CleanupStack::Pop( list );
hgs
parents:
diff changeset
    87
        }
hgs
parents:
diff changeset
    88
    //
hgs
parents:
diff changeset
    89
    CleanupStack::Pop( container );
hgs
parents:
diff changeset
    90
    return container;
hgs
parents:
diff changeset
    91
    }
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
CMemSpyEngineGenericKernelObjectContainer* CMemSpyEngineHelperKernelContainers::ObjectsAllLightweightL()
hgs
parents:
diff changeset
    95
    {
hgs
parents:
diff changeset
    96
    CMemSpyEngineGenericKernelObjectContainer* container = CMemSpyEngineGenericKernelObjectContainer::NewLC();
hgs
parents:
diff changeset
    97
    //
hgs
parents:
diff changeset
    98
    for( TInt i=EMemSpyDriverContainerTypeFirst; i<=EMemSpyDriverContainerTypeLast; i++ )
hgs
parents:
diff changeset
    99
        {
hgs
parents:
diff changeset
   100
        const TMemSpyDriverContainerType type = static_cast< TMemSpyDriverContainerType >( i );
hgs
parents:
diff changeset
   101
        //
hgs
parents:
diff changeset
   102
        CMemSpyEngineGenericKernelObjectList* list = CMemSpyEngineGenericKernelObjectList::NewLC( type, iEngine );
hgs
parents:
diff changeset
   103
        AddObjectsFromContainerL( *list, type, EFalse );
hgs
parents:
diff changeset
   104
        container->AddListL( list );
hgs
parents:
diff changeset
   105
        CleanupStack::Pop( list );
hgs
parents:
diff changeset
   106
        }
hgs
parents:
diff changeset
   107
    //
hgs
parents:
diff changeset
   108
    CleanupStack::Pop( container );
hgs
parents:
diff changeset
   109
    return container;
hgs
parents:
diff changeset
   110
    }
hgs
parents:
diff changeset
   111
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
TMemSpyDriverContainerType CMemSpyEngineHelperKernelContainers::MapToType( TObjectType aType )
hgs
parents:
diff changeset
   114
    {
hgs
parents:
diff changeset
   115
    TMemSpyDriverContainerType ret = EMemSpyDriverContainerTypeUnknown;
hgs
parents:
diff changeset
   116
    //
hgs
parents:
diff changeset
   117
    if ( aType >= EMemSpyDriverContainerTypeFirst && aType <= EMemSpyDriverContainerTypeLast )
hgs
parents:
diff changeset
   118
        {
hgs
parents:
diff changeset
   119
        ret = (TMemSpyDriverContainerType) aType;
hgs
parents:
diff changeset
   120
        }
hgs
parents:
diff changeset
   121
    //
hgs
parents:
diff changeset
   122
    return ret;
hgs
parents:
diff changeset
   123
    }
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
EXPORT_C void CMemSpyEngineHelperKernelContainers::OutputL( const CMemSpyEngineGenericKernelObjectContainer& aContainer ) const
hgs
parents:
diff changeset
   127
    {
hgs
parents:
diff changeset
   128
    aContainer.OutputL( iEngine.Sink() );
hgs
parents:
diff changeset
   129
    }
hgs
parents:
diff changeset
   130
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
CMemSpyEngine& CMemSpyEngineHelperKernelContainers::Engine() const
hgs
parents:
diff changeset
   133
    {
hgs
parents:
diff changeset
   134
    return iEngine;
hgs
parents:
diff changeset
   135
    }
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
void CMemSpyEngineHelperKernelContainers::AddObjectsFromContainerL( CMemSpyEngineGenericKernelObjectList& aList, TMemSpyDriverContainerType aContainer, TBool aGetInfo )
hgs
parents:
diff changeset
   139
    {
hgs
parents:
diff changeset
   140
	TAny* handles[KMaxGenericHandleCount];
hgs
parents:
diff changeset
   141
	TInt c = KMaxGenericHandleCount;
hgs
parents:
diff changeset
   142
hgs
parents:
diff changeset
   143
	TInt r = iEngine.Driver().GetContainerHandles( aContainer, handles, c );
hgs
parents:
diff changeset
   144
	if  ( r == KErrNone )
hgs
parents:
diff changeset
   145
    	{
hgs
parents:
diff changeset
   146
        if  ( c > 0 )
hgs
parents:
diff changeset
   147
            {
hgs
parents:
diff changeset
   148
        	if (c > KMaxGenericHandleCount)
hgs
parents:
diff changeset
   149
        		{
hgs
parents:
diff changeset
   150
        		c = KMaxGenericHandleCount;
hgs
parents:
diff changeset
   151
        		}
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
        	TMemSpyDriverHandleInfoGeneric info;
hgs
parents:
diff changeset
   154
        	for (TInt i=0; i<c && r == KErrNone; i++)
hgs
parents:
diff changeset
   155
        		{
hgs
parents:
diff changeset
   156
                if  ( aGetInfo )
hgs
parents:
diff changeset
   157
                    {
hgs
parents:
diff changeset
   158
        		    r = iEngine.Driver().GetGenericHandleInfo( KMemSpyDriverEnumerateContainerHandles, aContainer, handles[i], info );
hgs
parents:
diff changeset
   159
        		    if  ( r == KErrNone )
hgs
parents:
diff changeset
   160
        			    {
hgs
parents:
diff changeset
   161
        			    aList.AddItemL( info );
hgs
parents:
diff changeset
   162
        			    }
hgs
parents:
diff changeset
   163
                    }
hgs
parents:
diff changeset
   164
                else
hgs
parents:
diff changeset
   165
                    {
hgs
parents:
diff changeset
   166
                    aList.AddItemL( handles[ i ] );
hgs
parents:
diff changeset
   167
                    }
hgs
parents:
diff changeset
   168
        		}
hgs
parents:
diff changeset
   169
            }
hgs
parents:
diff changeset
   170
        }
hgs
parents:
diff changeset
   171
    }
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
hgs
parents:
diff changeset
   184
hgs
parents:
diff changeset
   185
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
hgs
parents:
diff changeset
   194
hgs
parents:
diff changeset
   195
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
hgs
parents:
diff changeset
   201
hgs
parents:
diff changeset
   202
hgs
parents:
diff changeset
   203
CMemSpyEngineGenericKernelObjectList::CMemSpyEngineGenericKernelObjectList( TMemSpyDriverContainerType aType )
hgs
parents:
diff changeset
   204
:   iType( aType ), iItems( 25 ), iHandles( 25 )
hgs
parents:
diff changeset
   205
    {
hgs
parents:
diff changeset
   206
    }
hgs
parents:
diff changeset
   207
hgs
parents:
diff changeset
   208
hgs
parents:
diff changeset
   209
EXPORT_C CMemSpyEngineGenericKernelObjectList::~CMemSpyEngineGenericKernelObjectList()
hgs
parents:
diff changeset
   210
    {
hgs
parents:
diff changeset
   211
    delete iName;
hgs
parents:
diff changeset
   212
    iHandles.Close();
hgs
parents:
diff changeset
   213
    iItems.Close();
hgs
parents:
diff changeset
   214
    }
hgs
parents:
diff changeset
   215
hgs
parents:
diff changeset
   216
hgs
parents:
diff changeset
   217
void CMemSpyEngineGenericKernelObjectList::ConstructL( CMemSpyEngine& aEngine )
hgs
parents:
diff changeset
   218
    {
hgs
parents:
diff changeset
   219
    iName = HBufC::NewL( KMaxFullName );
hgs
parents:
diff changeset
   220
    iSize = aEngine.Driver().GetApproximateKernelObjectSize( iType );
hgs
parents:
diff changeset
   221
    UpdateNameL();
hgs
parents:
diff changeset
   222
    }
hgs
parents:
diff changeset
   223
hgs
parents:
diff changeset
   224
hgs
parents:
diff changeset
   225
CMemSpyEngineGenericKernelObjectList* CMemSpyEngineGenericKernelObjectList::NewLC( TMemSpyDriverContainerType aType, CMemSpyEngine& aEngine )
hgs
parents:
diff changeset
   226
    {
hgs
parents:
diff changeset
   227
    CMemSpyEngineGenericKernelObjectList* self = new(ELeave) CMemSpyEngineGenericKernelObjectList( aType );
hgs
parents:
diff changeset
   228
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
   229
    self->ConstructL( aEngine );
hgs
parents:
diff changeset
   230
    return self;
hgs
parents:
diff changeset
   231
    }
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
hgs
parents:
diff changeset
   234
EXPORT_C TInt CMemSpyEngineGenericKernelObjectList::Count() const
hgs
parents:
diff changeset
   235
    {
hgs
parents:
diff changeset
   236
    return iHandles.Count();
hgs
parents:
diff changeset
   237
    }
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
hgs
parents:
diff changeset
   240
EXPORT_C const TMemSpyDriverHandleInfoGeneric& CMemSpyEngineGenericKernelObjectList::At( TInt aIndex ) const
hgs
parents:
diff changeset
   241
    {
hgs
parents:
diff changeset
   242
    return iItems[ aIndex ];
hgs
parents:
diff changeset
   243
    }
hgs
parents:
diff changeset
   244
hgs
parents:
diff changeset
   245
hgs
parents:
diff changeset
   246
EXPORT_C TMemSpyDriverContainerType CMemSpyEngineGenericKernelObjectList::Type() const
hgs
parents:
diff changeset
   247
    {
hgs
parents:
diff changeset
   248
    return iType;
hgs
parents:
diff changeset
   249
    }
hgs
parents:
diff changeset
   250
hgs
parents:
diff changeset
   251
EXPORT_C TInt CMemSpyEngineGenericKernelObjectList::Size() const
hgs
parents:
diff changeset
   252
    {
hgs
parents:
diff changeset
   253
    return iSize;
hgs
parents:
diff changeset
   254
    }
hgs
parents:
diff changeset
   255
hgs
parents:
diff changeset
   256
EXPORT_C TInt CMemSpyEngineGenericKernelObjectList::ItemsCount() const
hgs
parents:
diff changeset
   257
	{
hgs
parents:
diff changeset
   258
	return iItems.Count();
hgs
parents:
diff changeset
   259
	}
hgs
parents:
diff changeset
   260
    
hgs
parents:
diff changeset
   261
hgs
parents:
diff changeset
   262
EXPORT_C TPtrC CMemSpyEngineGenericKernelObjectList::TypeAsString( TMemSpyDriverContainerType aType )
hgs
parents:
diff changeset
   263
    {
hgs
parents:
diff changeset
   264
    _LIT( KTypeUnknown, "Unknown Type" );
hgs
parents:
diff changeset
   265
    _LIT( KTypeThread, "Thread" );
hgs
parents:
diff changeset
   266
    _LIT( KTypeProcess, "Process" );
hgs
parents:
diff changeset
   267
    _LIT( KTypeChunk, "Chunk" );
hgs
parents:
diff changeset
   268
    _LIT( KTypeLibrary, "Library" );
hgs
parents:
diff changeset
   269
    _LIT( KTypeSemaphore, "Semaphore" );
hgs
parents:
diff changeset
   270
    _LIT( KTypeMutex, "Mutex" );
hgs
parents:
diff changeset
   271
    _LIT( KTypeTimer, "Timer" );
hgs
parents:
diff changeset
   272
    _LIT( KTypeServer, "Server" );
hgs
parents:
diff changeset
   273
    _LIT( KTypeSession, "Session" );
hgs
parents:
diff changeset
   274
    _LIT( KTypeLogicalDevice, "Logical Device" );
hgs
parents:
diff changeset
   275
    _LIT( KTypePhysicalDevice, "Physical Device" );
hgs
parents:
diff changeset
   276
    _LIT( KTypeLogicalChannel, "Logical Channel" );
hgs
parents:
diff changeset
   277
    _LIT( KTypeChangeNotifier, "Change Notifier" );
hgs
parents:
diff changeset
   278
    _LIT( KTypeUndertaker, "Undertaker" );
hgs
parents:
diff changeset
   279
    _LIT( KTypeMsgQueue, "Msg. Queue" );
hgs
parents:
diff changeset
   280
    _LIT( KTypePropertyRef, "Property Ref." );
hgs
parents:
diff changeset
   281
    _LIT( KTypeCondVar, "Conditional Var." );
hgs
parents:
diff changeset
   282
     //
hgs
parents:
diff changeset
   283
    TPtrC pType( KTypeUnknown );
hgs
parents:
diff changeset
   284
    //
hgs
parents:
diff changeset
   285
    switch( aType )
hgs
parents:
diff changeset
   286
        {
hgs
parents:
diff changeset
   287
    case EMemSpyDriverContainerTypeThread:
hgs
parents:
diff changeset
   288
        pType.Set( KTypeThread );
hgs
parents:
diff changeset
   289
        break;
hgs
parents:
diff changeset
   290
    case EMemSpyDriverContainerTypeProcess:
hgs
parents:
diff changeset
   291
        pType.Set( KTypeProcess );
hgs
parents:
diff changeset
   292
        break;
hgs
parents:
diff changeset
   293
    case EMemSpyDriverContainerTypeChunk:
hgs
parents:
diff changeset
   294
        pType.Set( KTypeChunk );
hgs
parents:
diff changeset
   295
        break;
hgs
parents:
diff changeset
   296
    case EMemSpyDriverContainerTypeLibrary:
hgs
parents:
diff changeset
   297
        pType.Set( KTypeLibrary );
hgs
parents:
diff changeset
   298
        break;
hgs
parents:
diff changeset
   299
    case EMemSpyDriverContainerTypeSemaphore:
hgs
parents:
diff changeset
   300
        pType.Set( KTypeSemaphore );
hgs
parents:
diff changeset
   301
        break;
hgs
parents:
diff changeset
   302
    case EMemSpyDriverContainerTypeMutex:
hgs
parents:
diff changeset
   303
        pType.Set( KTypeMutex );
hgs
parents:
diff changeset
   304
        break;
hgs
parents:
diff changeset
   305
    case EMemSpyDriverContainerTypeTimer:
hgs
parents:
diff changeset
   306
        pType.Set( KTypeTimer );
hgs
parents:
diff changeset
   307
        break;
hgs
parents:
diff changeset
   308
    case EMemSpyDriverContainerTypeServer:
hgs
parents:
diff changeset
   309
        pType.Set( KTypeServer );
hgs
parents:
diff changeset
   310
        break;
hgs
parents:
diff changeset
   311
    case EMemSpyDriverContainerTypeSession:
hgs
parents:
diff changeset
   312
        pType.Set( KTypeSession );
hgs
parents:
diff changeset
   313
        break;
hgs
parents:
diff changeset
   314
    case EMemSpyDriverContainerTypeLogicalDevice:
hgs
parents:
diff changeset
   315
        pType.Set( KTypeLogicalDevice );
hgs
parents:
diff changeset
   316
        break;
hgs
parents:
diff changeset
   317
    case EMemSpyDriverContainerTypePhysicalDevice:
hgs
parents:
diff changeset
   318
        pType.Set( KTypePhysicalDevice );
hgs
parents:
diff changeset
   319
        break;
hgs
parents:
diff changeset
   320
    case EMemSpyDriverContainerTypeLogicalChannel:
hgs
parents:
diff changeset
   321
        pType.Set( KTypeLogicalChannel );
hgs
parents:
diff changeset
   322
        break;
hgs
parents:
diff changeset
   323
    case EMemSpyDriverContainerTypeChangeNotifier:
hgs
parents:
diff changeset
   324
        pType.Set( KTypeChangeNotifier );
hgs
parents:
diff changeset
   325
        break;
hgs
parents:
diff changeset
   326
    case EMemSpyDriverContainerTypeUndertaker:
hgs
parents:
diff changeset
   327
        pType.Set( KTypeUndertaker );
hgs
parents:
diff changeset
   328
        break;
hgs
parents:
diff changeset
   329
    case EMemSpyDriverContainerTypeMsgQueue:
hgs
parents:
diff changeset
   330
        pType.Set( KTypeMsgQueue );
hgs
parents:
diff changeset
   331
        break;
hgs
parents:
diff changeset
   332
    case EMemSpyDriverContainerTypePropertyRef:
hgs
parents:
diff changeset
   333
        pType.Set( KTypePropertyRef );
hgs
parents:
diff changeset
   334
        break;
hgs
parents:
diff changeset
   335
    case EMemSpyDriverContainerTypeCondVar:
hgs
parents:
diff changeset
   336
        pType.Set( KTypeCondVar );
hgs
parents:
diff changeset
   337
        break;
hgs
parents:
diff changeset
   338
        
hgs
parents:
diff changeset
   339
    default:
hgs
parents:
diff changeset
   340
        break;
hgs
parents:
diff changeset
   341
        }
hgs
parents:
diff changeset
   342
    //
hgs
parents:
diff changeset
   343
    return pType;
hgs
parents:
diff changeset
   344
    }
hgs
parents:
diff changeset
   345
hgs
parents:
diff changeset
   346
hgs
parents:
diff changeset
   347
EXPORT_C TPtrC CMemSpyEngineGenericKernelObjectList::Name() const
hgs
parents:
diff changeset
   348
    {
hgs
parents:
diff changeset
   349
    return TPtrC( *iName );
hgs
parents:
diff changeset
   350
    }
hgs
parents:
diff changeset
   351
hgs
parents:
diff changeset
   352
hgs
parents:
diff changeset
   353
EXPORT_C void CMemSpyEngineGenericKernelObjectList::OutputL( CMemSpyEngineOutputSink& aSink ) const
hgs
parents:
diff changeset
   354
    {
hgs
parents:
diff changeset
   355
    // Start marker
hgs
parents:
diff changeset
   356
    aSink.OutputLineFormattedL( KMemSpyMarkerKernelContainer, &KNullDesC, iType );
hgs
parents:
diff changeset
   357
hgs
parents:
diff changeset
   358
    TBuf<70> itemPrefix;
hgs
parents:
diff changeset
   359
    TBuf<KMaxFullName + 128> buf;
hgs
parents:
diff changeset
   360
    const TInt entryCount = Count();
hgs
parents:
diff changeset
   361
    const TInt64 size( iSize * entryCount );
hgs
parents:
diff changeset
   362
    const TMemSpySizeText sizeText( MemSpyEngineUtils::FormatSizeText( size, 0 ) );
hgs
parents:
diff changeset
   363
    //    
hgs
parents:
diff changeset
   364
    _LIT(KContainerTitle, "CONTAINER \'%S\' => %d item(s), %S");
hgs
parents:
diff changeset
   365
    const TPtrC pType( TypeAsString( iType ) );
hgs
parents:
diff changeset
   366
    buf.Format(KContainerTitle, &pType, entryCount, &sizeText);
hgs
parents:
diff changeset
   367
    aSink.OutputSectionHeadingL( buf, '=' );
hgs
parents:
diff changeset
   368
    //
hgs
parents:
diff changeset
   369
    for( TInt entryIndex=0; entryIndex<entryCount; entryIndex++ )
hgs
parents:
diff changeset
   370
        {
hgs
parents:
diff changeset
   371
        const TMemSpyDriverHandleInfoGeneric& entry = At( entryIndex );
hgs
parents:
diff changeset
   372
        //
hgs
parents:
diff changeset
   373
        _LIT( KItemPrefixFormat, "[KernCont] {%04d} 0x%08x" );
hgs
parents:
diff changeset
   374
        itemPrefix.Format( KItemPrefixFormat, entryIndex, entry.iHandle );
hgs
parents:
diff changeset
   375
hgs
parents:
diff changeset
   376
        buf.Copy( entry.iName );
hgs
parents:
diff changeset
   377
hgs
parents:
diff changeset
   378
        aSink.OutputItemAndValueL( itemPrefix, buf );
hgs
parents:
diff changeset
   379
        }
hgs
parents:
diff changeset
   380
hgs
parents:
diff changeset
   381
    // End marker
hgs
parents:
diff changeset
   382
    aSink.OutputBlankLineL();
hgs
parents:
diff changeset
   383
    aSink.OutputLineFormattedL( KMemSpyMarkerKernelContainer, &KMemSpySinkTagClose, iType );
hgs
parents:
diff changeset
   384
    aSink.OutputBlankLineL();
hgs
parents:
diff changeset
   385
    }
hgs
parents:
diff changeset
   386
hgs
parents:
diff changeset
   387
hgs
parents:
diff changeset
   388
TAny* CMemSpyEngineGenericKernelObjectList::HandleAt( TInt aIndex ) const
hgs
parents:
diff changeset
   389
    {
hgs
parents:
diff changeset
   390
    return iHandles[ aIndex ];
hgs
parents:
diff changeset
   391
    }
hgs
parents:
diff changeset
   392
hgs
parents:
diff changeset
   393
hgs
parents:
diff changeset
   394
void CMemSpyEngineGenericKernelObjectList::AddItemL( TAny* aHandle )
hgs
parents:
diff changeset
   395
    {
hgs
parents:
diff changeset
   396
    iHandles.InsertInAddressOrderL( aHandle );
hgs
parents:
diff changeset
   397
    }
hgs
parents:
diff changeset
   398
hgs
parents:
diff changeset
   399
hgs
parents:
diff changeset
   400
void CMemSpyEngineGenericKernelObjectList::AddItemL( const TMemSpyDriverHandleInfoGeneric& aItem )
hgs
parents:
diff changeset
   401
    {
hgs
parents:
diff changeset
   402
    AddItemL( aItem.iHandle );
hgs
parents:
diff changeset
   403
    iItems.AppendL( aItem );
hgs
parents:
diff changeset
   404
    //
hgs
parents:
diff changeset
   405
    //UpdateNameL();
hgs
parents:
diff changeset
   406
    }
hgs
parents:
diff changeset
   407
hgs
parents:
diff changeset
   408
hgs
parents:
diff changeset
   409
void CMemSpyEngineGenericKernelObjectList::UpdateNameL()
hgs
parents:
diff changeset
   410
    {
hgs
parents:
diff changeset
   411
    const TInt count = iItems.Count();
hgs
parents:
diff changeset
   412
    const TInt64 size( iSize * count );
hgs
parents:
diff changeset
   413
    const TMemSpySizeText sizeText( MemSpyEngineUtils::FormatSizeText( size, 0 ) );
hgs
parents:
diff changeset
   414
    //
hgs
parents:
diff changeset
   415
    _LIT(KNameFormat, "\t%S\t\t%d item");
hgs
parents:
diff changeset
   416
    TPtr pName( iName->Des() );
hgs
parents:
diff changeset
   417
    //
hgs
parents:
diff changeset
   418
    const TPtrC pType( TypeAsString( iType ) );
hgs
parents:
diff changeset
   419
    //
hgs
parents:
diff changeset
   420
    pName.Format( KNameFormat, &pType, count );
hgs
parents:
diff changeset
   421
    //
hgs
parents:
diff changeset
   422
    if  ( count == 0 || count > 1 )
hgs
parents:
diff changeset
   423
        {
hgs
parents:
diff changeset
   424
        pName.Append( _L("s") );
hgs
parents:
diff changeset
   425
        }
hgs
parents:
diff changeset
   426
hgs
parents:
diff changeset
   427
    pName.AppendFormat( _L(", %S"), &sizeText );
hgs
parents:
diff changeset
   428
    }
hgs
parents:
diff changeset
   429
hgs
parents:
diff changeset
   430
hgs
parents:
diff changeset
   431
hgs
parents:
diff changeset
   432
hgs
parents:
diff changeset
   433
hgs
parents:
diff changeset
   434
hgs
parents:
diff changeset
   435
hgs
parents:
diff changeset
   436
hgs
parents:
diff changeset
   437
hgs
parents:
diff changeset
   438
hgs
parents:
diff changeset
   439
hgs
parents:
diff changeset
   440
hgs
parents:
diff changeset
   441
hgs
parents:
diff changeset
   442
hgs
parents:
diff changeset
   443
hgs
parents:
diff changeset
   444
hgs
parents:
diff changeset
   445
hgs
parents:
diff changeset
   446
hgs
parents:
diff changeset
   447
hgs
parents:
diff changeset
   448
hgs
parents:
diff changeset
   449
hgs
parents:
diff changeset
   450
hgs
parents:
diff changeset
   451
hgs
parents:
diff changeset
   452
hgs
parents:
diff changeset
   453
hgs
parents:
diff changeset
   454
CMemSpyEngineGenericKernelObjectContainer::CMemSpyEngineGenericKernelObjectContainer()
hgs
parents:
diff changeset
   455
:   iItems( 25 )
hgs
parents:
diff changeset
   456
    {
hgs
parents:
diff changeset
   457
    }
hgs
parents:
diff changeset
   458
hgs
parents:
diff changeset
   459
hgs
parents:
diff changeset
   460
EXPORT_C CMemSpyEngineGenericKernelObjectContainer::~CMemSpyEngineGenericKernelObjectContainer()
hgs
parents:
diff changeset
   461
    {
hgs
parents:
diff changeset
   462
    iItems.ResetAndDestroy();
hgs
parents:
diff changeset
   463
    iItems.Close();
hgs
parents:
diff changeset
   464
    }
hgs
parents:
diff changeset
   465
hgs
parents:
diff changeset
   466
hgs
parents:
diff changeset
   467
void CMemSpyEngineGenericKernelObjectContainer::ConstructL()
hgs
parents:
diff changeset
   468
    {
hgs
parents:
diff changeset
   469
    }
hgs
parents:
diff changeset
   470
hgs
parents:
diff changeset
   471
hgs
parents:
diff changeset
   472
CMemSpyEngineGenericKernelObjectContainer* CMemSpyEngineGenericKernelObjectContainer::NewLC()
hgs
parents:
diff changeset
   473
    {
hgs
parents:
diff changeset
   474
    CMemSpyEngineGenericKernelObjectContainer* self = new(ELeave) CMemSpyEngineGenericKernelObjectContainer();
hgs
parents:
diff changeset
   475
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
   476
    self->ConstructL();
hgs
parents:
diff changeset
   477
    return self;
hgs
parents:
diff changeset
   478
    }
hgs
parents:
diff changeset
   479
hgs
parents:
diff changeset
   480
hgs
parents:
diff changeset
   481
EXPORT_C TInt CMemSpyEngineGenericKernelObjectContainer::Count() const
hgs
parents:
diff changeset
   482
    {
hgs
parents:
diff changeset
   483
    return iItems.Count();
hgs
parents:
diff changeset
   484
    }
hgs
parents:
diff changeset
   485
hgs
parents:
diff changeset
   486
hgs
parents:
diff changeset
   487
EXPORT_C const CMemSpyEngineGenericKernelObjectList& CMemSpyEngineGenericKernelObjectContainer::At( TInt aIndex ) const
hgs
parents:
diff changeset
   488
    {
hgs
parents:
diff changeset
   489
    return *iItems[ aIndex ];
hgs
parents:
diff changeset
   490
    }
hgs
parents:
diff changeset
   491
hgs
parents:
diff changeset
   492
hgs
parents:
diff changeset
   493
EXPORT_C void CMemSpyEngineGenericKernelObjectContainer::OutputL( CMemSpyEngineOutputSink& aSink ) const
hgs
parents:
diff changeset
   494
    {
hgs
parents:
diff changeset
   495
    // Start marker
hgs
parents:
diff changeset
   496
    aSink.OutputLineFormattedL( KMemSpyMarkerKernelContainersAll, &KNullDesC );
hgs
parents:
diff changeset
   497
hgs
parents:
diff changeset
   498
    const TInt listCount= Count();
hgs
parents:
diff changeset
   499
    for( TInt listIndex=0; listIndex<listCount; listIndex++ )
hgs
parents:
diff changeset
   500
        {
hgs
parents:
diff changeset
   501
        const CMemSpyEngineGenericKernelObjectList& list = At( listIndex );
hgs
parents:
diff changeset
   502
        list.OutputL( aSink );
hgs
parents:
diff changeset
   503
        }
hgs
parents:
diff changeset
   504
hgs
parents:
diff changeset
   505
    // End marker
hgs
parents:
diff changeset
   506
    aSink.OutputLineFormattedL( KMemSpyMarkerKernelContainersAll, &KMemSpySinkTagClose );
hgs
parents:
diff changeset
   507
    }
hgs
parents:
diff changeset
   508
hgs
parents:
diff changeset
   509
hgs
parents:
diff changeset
   510
void CMemSpyEngineGenericKernelObjectContainer::AddListL( CMemSpyEngineGenericKernelObjectList* aList )
hgs
parents:
diff changeset
   511
    {
hgs
parents:
diff changeset
   512
    iItems.AppendL( aList );
hgs
parents:
diff changeset
   513
    }
hgs
parents:
diff changeset
   514
hgs
parents:
diff changeset
   515
hgs
parents:
diff changeset
   516
EXPORT_C TInt CMemSpyEngineGenericKernelObjectContainer::MdcaCount() const
hgs
parents:
diff changeset
   517
    {
hgs
parents:
diff changeset
   518
    return Count();
hgs
parents:
diff changeset
   519
    }
hgs
parents:
diff changeset
   520
hgs
parents:
diff changeset
   521
hgs
parents:
diff changeset
   522
EXPORT_C TPtrC CMemSpyEngineGenericKernelObjectContainer::MdcaPoint( TInt aIndex ) const
hgs
parents:
diff changeset
   523
    {
hgs
parents:
diff changeset
   524
    const CMemSpyEngineGenericKernelObjectList& item = At( aIndex );
hgs
parents:
diff changeset
   525
    return item.Name();
hgs
parents:
diff changeset
   526
    }
hgs
parents:
diff changeset
   527
hgs
parents:
diff changeset
   528
hgs
parents:
diff changeset
   529
hgs
parents:
diff changeset
   530
hgs
parents:
diff changeset
   531
hgs
parents:
diff changeset
   532
hgs
parents:
diff changeset
   533
hgs
parents:
diff changeset
   534
hgs
parents:
diff changeset
   535
hgs
parents:
diff changeset
   536
hgs
parents:
diff changeset
   537
hgs
parents:
diff changeset
   538
hgs
parents:
diff changeset
   539
hgs
parents:
diff changeset
   540
hgs
parents:
diff changeset
   541
hgs
parents:
diff changeset
   542