memspyui/ui/avkon/src/MemSpyViewKernelContainers.cpp
changeset 17 4f2773374eff
child 19 4b22a598b890
equal deleted inserted replaced
15:e11368ed4880 17:4f2773374eff
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 
       
    18 #include "MemSpyViewKernelContainers.h"
       
    19 
       
    20 // Engine includes
       
    21 #include <memspy/engine/memspyengine.h>
       
    22 #include <memspy/engine/memspyengineobjectprocess.h>
       
    23 #include <memspy/engine/memspyengineobjectthread.h>
       
    24 #include <memspy/engine/memspyengineobjectcontainer.h>
       
    25 #include <memspy/engine/memspyengineobjectthreadinfoobjects.h>
       
    26 #include <memspy/engine/memspyengineobjectthreadinfocontainer.h>
       
    27 #include <memspy/engine/memspyenginehelperkernelcontainers.h>
       
    28 
       
    29 #include <memspysession.h>
       
    30 #include <memspy/api/memspyapiprocess.h>
       
    31 #include <memspy/engine/memspyengineutils.h>
       
    32 
       
    33 // User includes
       
    34 #include "MemSpyUiUtils.h"
       
    35 #include "MemSpyViewKernel.h"
       
    36 #include "MemSpyContainerObserver.h"
       
    37 #include "MemSpyViewKernelObjects.h"
       
    38 
       
    39 // Literal constants
       
    40 
       
    41 
       
    42 
       
    43 CMemSpyViewKernelContainers::CMemSpyViewKernelContainers( RMemSpySession& aSession, MMemSpyViewObserver& aObserver )
       
    44 :   CMemSpyViewBase( aSession, aObserver )
       
    45     {
       
    46     }
       
    47 
       
    48 
       
    49 CMemSpyViewKernelContainers::~CMemSpyViewKernelContainers()
       
    50     {
       
    51     //delete iModel;
       
    52     }
       
    53 
       
    54 
       
    55 void CMemSpyViewKernelContainers::ConstructL( const TRect& aRect, CCoeControl& aContainer, TAny* aSelectionRune )
       
    56     {
       
    57     _LIT( KTitle, "Kernel Objects" );
       
    58     SetTitleL( KTitle );
       
    59     //
       
    60     CMemSpyViewBase::ConstructL( aRect, aContainer, aSelectionRune );
       
    61     }
       
    62 
       
    63 
       
    64 void CMemSpyViewKernelContainers::RefreshL()
       
    65     {
       
    66     SetListBoxModelL();
       
    67     CMemSpyViewBase::RefreshL();
       
    68     }
       
    69 
       
    70 
       
    71 TMemSpyViewType CMemSpyViewKernelContainers::ViewType() const
       
    72     {
       
    73     return EMemSpyViewTypeKernelContainers;
       
    74     }
       
    75 
       
    76 
       
    77 CMemSpyViewBase* CMemSpyViewKernelContainers::PrepareParentViewL()
       
    78     {
       
    79     CMemSpyViewKernel* parent = new(ELeave) CMemSpyViewKernel( iMemSpySession, iObserver );
       
    80     CleanupStack::PushL( parent );
       
    81     parent->ConstructL( Rect(), *Parent(), (TAny*) ViewType() );
       
    82     CleanupStack::Pop( parent );
       
    83     return parent;
       
    84     }
       
    85 
       
    86 
       
    87 CMemSpyViewBase* CMemSpyViewKernelContainers::PrepareChildViewL()
       
    88     {	
       
    89     CMemSpyViewBase* child = NULL;
       
    90     const TInt index = iListBox->CurrentItemIndex();
       
    91     //child = new(ELeave) CMemSpyViewKernelObjects( iEngine, iObserver, iModel->At( index ).Type() );
       
    92     child = new(ELeave) CMemSpyViewKernelObjects( iMemSpySession, iObserver, iKernelObjects[index]->Type() );
       
    93     CleanupStack::PushL( child );
       
    94     child->ConstructL( Rect(), *Parent() );
       
    95     CleanupStack::Pop( child );
       
    96     return child;   
       
    97     }
       
    98 
       
    99 
       
   100 void CMemSpyViewKernelContainers::SetListBoxModelL()
       
   101     {	
       
   102 	iMemSpySession.GetKernelObjects( iKernelObjects );
       
   103 		
       
   104 	CDesCArrayFlat* model = new (ELeave) CDesC16ArrayFlat( iKernelObjects.Count() ); //array for formated items
       
   105 	
       
   106 	for( TInt i=0 ; i<iKernelObjects.Count() ; i++ )
       
   107 		{
       
   108 		TInt count = iKernelObjects[i]->Count();
       
   109 		TInt size = iKernelObjects[i]->Size();
       
   110 		const TMemSpySizeText sizeText( MemSpyEngineUtils::FormatSizeText( size, 0 ) ); //TODO: is this OK to call Engine Utils?
       
   111 								
       
   112 		HBufC* tempName = HBufC::NewL( iKernelObjects[i]->Name().Length() + 32 ); //TODO: to removed this bulharic constant
       
   113 		CleanupStack::PushL( tempName );
       
   114 		TPtr tempNamePtr( tempName->Des() );
       
   115 		tempNamePtr.Copy( iKernelObjects[i]->Name() );									
       
   116 		
       
   117 		_LIT(KNameFormat, "\t%S\t\t%d item");
       
   118 		TPtr pName( tempName->Des() );
       
   119 		//
       
   120 		const TPtrC pType( TypeAsString( iKernelObjects[i]->Type() ) );
       
   121 		//
       
   122 		pName.Format( KNameFormat, &pType, count );
       
   123 		//
       
   124 		if  ( count == 0 || count > 1 )
       
   125 			{
       
   126 			pName.Append( _L("s") );
       
   127 			}
       
   128 
       
   129 		pName.AppendFormat( _L(", %S"), &sizeText ); // TODO: to create some ServerUtils class with formating methods for size and type!
       
   130 		
       
   131 		model->AppendL( pName );
       
   132 		
       
   133 		CleanupStack::PopAndDestroy( tempName); //---
       
   134 		}
       
   135 	
       
   136 	CAknSettingStyleListBox* listbox = static_cast< CAknSettingStyleListBox* >( iListBox );	
       
   137 	listbox->Model()->SetItemTextArray( model );
       
   138 	listbox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
       
   139 
       
   140 	/*
       
   141     // Take ownership of new model
       
   142     CMemSpyEngineHelperKernelContainers& kernelContainerManager = iEngine.HelperKernelContainers();
       
   143     CMemSpyEngineGenericKernelObjectContainer* model = kernelContainerManager.ObjectsAllL();
       
   144     delete iModel;
       
   145     iModel = model;
       
   146     
       
   147     // Set up list box
       
   148     CAknSettingStyleListBox* listbox = static_cast< CAknSettingStyleListBox* >( iListBox );
       
   149     listbox->Model()->SetItemTextArray( model );
       
   150     listbox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
       
   151     */
       
   152     }
       
   153 
       
   154 
       
   155 TBool CMemSpyViewKernelContainers::HandleCommandL( TInt aCommand )
       
   156     {
       
   157     TBool handled = ETrue;
       
   158     //
       
   159     switch ( aCommand )
       
   160         {
       
   161     case EMemSpyCmdKernelContainersOutput:
       
   162         OnCmdOutputAllContainerContentsL();
       
   163         break;
       
   164 
       
   165     default:
       
   166         handled = CMemSpyViewBase::HandleCommandL( aCommand );
       
   167         break;
       
   168         }
       
   169     //
       
   170     return handled;
       
   171     }
       
   172 
       
   173 
       
   174 void CMemSpyViewKernelContainers::OnCmdOutputAllContainerContentsL()
       
   175     {
       
   176 	/* TODO
       
   177     CMemSpyEngineOutputSink& sink = iEngine.Sink();
       
   178     iModel->OutputL( sink );
       
   179     */
       
   180     }
       
   181 
       
   182 //formating methods
       
   183 TPtrC CMemSpyViewKernelContainers::TypeAsString( TMemSpyDriverContainerType aType )
       
   184     {
       
   185     _LIT( KTypeUnknown, "Unknown Type" );
       
   186     _LIT( KTypeThread, "Thread" );
       
   187     _LIT( KTypeProcess, "Process" );
       
   188     _LIT( KTypeChunk, "Chunk" );
       
   189     _LIT( KTypeLibrary, "Library" );
       
   190     _LIT( KTypeSemaphore, "Semaphore" );
       
   191     _LIT( KTypeMutex, "Mutex" );
       
   192     _LIT( KTypeTimer, "Timer" );
       
   193     _LIT( KTypeServer, "Server" );
       
   194     _LIT( KTypeSession, "Session" );
       
   195     _LIT( KTypeLogicalDevice, "Logical Device" );
       
   196     _LIT( KTypePhysicalDevice, "Physical Device" );
       
   197     _LIT( KTypeLogicalChannel, "Logical Channel" );
       
   198     _LIT( KTypeChangeNotifier, "Change Notifier" );
       
   199     _LIT( KTypeUndertaker, "Undertaker" );
       
   200     _LIT( KTypeMsgQueue, "Msg. Queue" );
       
   201     _LIT( KTypePropertyRef, "Property Ref." );
       
   202     _LIT( KTypeCondVar, "Conditional Var." );
       
   203      //
       
   204     TPtrC pType( KTypeUnknown );
       
   205     //
       
   206     switch( aType )
       
   207         {
       
   208     case EMemSpyDriverContainerTypeThread:
       
   209         pType.Set( KTypeThread );
       
   210         break;
       
   211     case EMemSpyDriverContainerTypeProcess:
       
   212         pType.Set( KTypeProcess );
       
   213         break;
       
   214     case EMemSpyDriverContainerTypeChunk:
       
   215         pType.Set( KTypeChunk );
       
   216         break;
       
   217     case EMemSpyDriverContainerTypeLibrary:
       
   218         pType.Set( KTypeLibrary );
       
   219         break;
       
   220     case EMemSpyDriverContainerTypeSemaphore:
       
   221         pType.Set( KTypeSemaphore );
       
   222         break;
       
   223     case EMemSpyDriverContainerTypeMutex:
       
   224         pType.Set( KTypeMutex );
       
   225         break;
       
   226     case EMemSpyDriverContainerTypeTimer:
       
   227         pType.Set( KTypeTimer );
       
   228         break;
       
   229     case EMemSpyDriverContainerTypeServer:
       
   230         pType.Set( KTypeServer );
       
   231         break;
       
   232     case EMemSpyDriverContainerTypeSession:
       
   233         pType.Set( KTypeSession );
       
   234         break;
       
   235     case EMemSpyDriverContainerTypeLogicalDevice:
       
   236         pType.Set( KTypeLogicalDevice );
       
   237         break;
       
   238     case EMemSpyDriverContainerTypePhysicalDevice:
       
   239         pType.Set( KTypePhysicalDevice );
       
   240         break;
       
   241     case EMemSpyDriverContainerTypeLogicalChannel:
       
   242         pType.Set( KTypeLogicalChannel );
       
   243         break;
       
   244     case EMemSpyDriverContainerTypeChangeNotifier:
       
   245         pType.Set( KTypeChangeNotifier );
       
   246         break;
       
   247     case EMemSpyDriverContainerTypeUndertaker:
       
   248         pType.Set( KTypeUndertaker );
       
   249         break;
       
   250     case EMemSpyDriverContainerTypeMsgQueue:
       
   251         pType.Set( KTypeMsgQueue );
       
   252         break;
       
   253     case EMemSpyDriverContainerTypePropertyRef:
       
   254         pType.Set( KTypePropertyRef );
       
   255         break;
       
   256     case EMemSpyDriverContainerTypeCondVar:
       
   257         pType.Set( KTypeCondVar );
       
   258         break;
       
   259         
       
   260     default:
       
   261         break;
       
   262         }
       
   263     //
       
   264     return pType;
       
   265     }
       
   266