memspy/Driver/User/Source/MemSpyDriverClient.cpp
branchRCL_3
changeset 49 7fdc9a71d314
parent 44 52e343bb8f80
child 59 8ad140f3dd41
equal deleted inserted replaced
46:e26895079d7c 49:7fdc9a71d314
    20 // System includes
    20 // System includes
    21 #include <e32svr.h>
    21 #include <e32svr.h>
    22 
    22 
    23 // User includes
    23 // User includes
    24 #include "MemSpyDriverOpCodes.h"
    24 #include "MemSpyDriverOpCodes.h"
    25 #include "RBuildQueryableHeap.h"
       
    26 #include <memspy/driver/memspydriverconstants.h>
    25 #include <memspy/driver/memspydriverconstants.h>
    27 #include <memspy/driver/memspydriverobjectsshared.h>
    26 #include <memspy/driver/memspydriverobjectsshared.h>
    28 #include "MemSpyDriverStreamReaderImp.h"
    27 #include "MemSpyDriverStreamReaderImp.h"
    29 #include "MemSpyDriverObjectsInternal.h"
    28 #include "MemSpyDriverObjectsInternal.h"
       
    29 #include "heaputils.h"
    30 
    30 
    31 // Constants
    31 // Constants
    32 const TInt KMemSpyClientBufferGrowSize = 0x1000 * 8; // 32kb
    32 const TInt KMemSpyClientBufferGrowSize = 0x1000 * 8; // 32kb
    33 
    33 
    34 // Forward declarations
    34 // Forward declarations
   509         if  ( aInfo.Type() == TMemSpyHeapInfo::ETypeRHeap )
   509         if  ( aInfo.Type() == TMemSpyHeapInfo::ETypeRHeap )
   510             {
   510             {
   511             TMemSpyHeapInfoRHeap& rHeapInfo = aInfo.AsRHeap();
   511             TMemSpyHeapInfoRHeap& rHeapInfo = aInfo.AsRHeap();
   512             TMemSpyHeapMetaDataRHeap& metaData = rHeapInfo.MetaData();
   512             TMemSpyHeapMetaDataRHeap& metaData = rHeapInfo.MetaData();
   513             metaData.SetVTable( RHeapVTable() );
   513             metaData.SetVTable( RHeapVTable() );
   514             metaData.SetClassSize( sizeof( RHeap ) );
   514             //metaData.SetClassSize( sizeof( RHeap ) );
   515             }
   515             }
   516         }
   516         }
   517     else if ( r == KErrNotSupported )
   517     else if ( r == KErrNotSupported )
   518         {
   518         {
   519         aInfo.SetType( TMemSpyHeapInfo::ETypeUnknown );
   519         aInfo.SetType( TMemSpyHeapInfo::ETypeUnknown );
   521         }
   521         }
   522 	//
   522 	//
   523 	return r;
   523 	return r;
   524     }
   524     }
   525 
   525 
   526 
       
   527 EXPORT_C TInt RMemSpyDriverClient::GetHeapInfoUser( TMemSpyHeapInfo& aInfo, TUint aTid, RArray< TMemSpyDriverFreeCell >& aFreeCells )
   526 EXPORT_C TInt RMemSpyDriverClient::GetHeapInfoUser( TMemSpyHeapInfo& aInfo, TUint aTid, RArray< TMemSpyDriverFreeCell >& aFreeCells )
   528     {
   527 	{
       
   528 	return GetHeapInfoUser(aInfo, aTid, aFreeCells, EFalse);
       
   529 	}
       
   530 
       
   531 // For the record I don't think this function should be exported, but since the one above was I'm going with the flow. -TomS
       
   532 EXPORT_C TInt RMemSpyDriverClient::GetHeapInfoUser(TMemSpyHeapInfo& aInfo, TUint aTid, RArray<TMemSpyDriverCell>& aCells, TBool aCollectAllocatedCellsAsWellAsFree)
       
   533 	{
   529     TMemSpyDriverInternalHeapRequestParameters params;
   534     TMemSpyDriverInternalHeapRequestParameters params;
   530     //
   535     //
   531     params.iTid = aTid;
   536     params.iTid = aTid;
   532     params.iRHeapVTable = RHeapVTable();
   537     params.iRHeapVTable = RHeapVTable();
   533     params.iDebugAllocator = DebugEUser();
   538     params.iDebugAllocator = DebugEUser();
   534     params.iMasterInfo = &aInfo;
   539     params.iMasterInfo = &aInfo;
   535     params.iBuildFreeCellList = ETrue;
   540     params.iBuildFreeCellList = ETrue;
   536     //
   541 	params.iBuildAllocCellList = aCollectAllocatedCellsAsWellAsFree;
   537     aFreeCells.Reset();
   542 
       
   543     //
       
   544     aCells.Reset();
   538     ResetStreamBuffer();
   545     ResetStreamBuffer();
   539 	TInt r = DoControl( EMemSpyDriverOpCodeHeapInfoGetUser, &params );
   546 	TInt r = DoControl( EMemSpyDriverOpCodeHeapInfoGetUser, &params );
   540 	//
   547 	//
   541 	if  ( r >= KErrNone )
   548 	if  ( r >= KErrNone )
   542     	{
   549     	{
   546         if  ( aInfo.Type() == TMemSpyHeapInfo::ETypeRHeap )
   553         if  ( aInfo.Type() == TMemSpyHeapInfo::ETypeRHeap )
   547             {
   554             {
   548             TMemSpyHeapInfoRHeap& rHeapInfo = aInfo.AsRHeap();
   555             TMemSpyHeapInfoRHeap& rHeapInfo = aInfo.AsRHeap();
   549             TMemSpyHeapMetaDataRHeap& metaData = rHeapInfo.MetaData();
   556             TMemSpyHeapMetaDataRHeap& metaData = rHeapInfo.MetaData();
   550             metaData.SetVTable( RHeapVTable() );
   557             metaData.SetVTable( RHeapVTable() );
   551             metaData.SetClassSize( sizeof( RHeap ) );
   558             //metaData.SetClassSize( sizeof( RHeap ) );
   552             }
   559             }
   553 
   560 
   554         // Resize transfer buffer to make room for free cells. We only make the buffer
   561         // Resize transfer buffer to make room for free cells. We only make the buffer
   555         // bigger, not smaller.
   562         // bigger, not smaller.
   556         if  ( iBuffer.Size() < r )
   563         if  ( iBuffer.Size() < r )
   559             }
   566             }
   560     
   567     
   561         // Now fetch the heap data
   568         // Now fetch the heap data
   562         if  ( r == KErrNone )
   569         if  ( r == KErrNone )
   563             {
   570             {
   564             r = DoControl( EMemSpyDriverOpCodeHeapInfoFetchFreeCells, &iBuffer );
   571             r = DoControl( EMemSpyDriverOpCodeHeapInfoFetchCellList, &iBuffer );
   565             if  ( r == KErrNone )
   572             if  ( r == KErrNone )
   566                 {
   573                 {
   567                 TRAP( r, ReadHeapInfoFreeCellsFromXferBufferL( aFreeCells ) );
   574                 TRAP( r, ReadHeapInfoFreeCellsFromXferBufferL( aCells ) );
   568                 }
   575                 }
   569             }
   576             }
   570         }
   577         }
   571     else if ( r == KErrNotSupported )
   578     else if ( r == KErrNotSupported )
   572         {
   579         {
   661     params.iRHeapVTable = RHeapVTable();
   668     params.iRHeapVTable = RHeapVTable();
   662     params.iDebugAllocator = DebugEUser();
   669     params.iDebugAllocator = DebugEUser();
   663     params.iDes = &aDest;
   670     params.iDes = &aDest;
   664     params.iChecksum = aFreeCellChecksum;
   671     params.iChecksum = aFreeCellChecksum;
   665     params.iRemaining = -1;
   672     params.iRemaining = -1;
       
   673 	params.iReadAddress = 0;
   666     aDest.Zero();
   674     aDest.Zero();
   667     //
   675     //
   668 	TInt r = DoControl( EMemSpyDriverOpCodeHeapDataGetUser, &params, NULL );
   676 	TInt r = DoControl( EMemSpyDriverOpCodeHeapDataGetUser, &params, NULL );
   669 	//
   677 	//
   670 	if  ( r >= KErrNone )
   678 	if  ( r >= KErrNone )
   686     params.iRHeapVTable = RHeapVTable();
   694     params.iRHeapVTable = RHeapVTable();
   687     params.iDebugAllocator = DebugEUser();
   695     params.iDebugAllocator = DebugEUser();
   688     params.iDes = &aDest;
   696     params.iDes = &aDest;
   689     params.iChecksum = 0;
   697     params.iChecksum = 0;
   690     params.iRemaining = aAmountRemaining;
   698     params.iRemaining = aAmountRemaining;
       
   699 	params.iReadAddress = aReadAddress;
   691     aDest.Zero();
   700     aDest.Zero();
   692     //
   701     //
   693 	TInt r = DoControl( EMemSpyDriverOpCodeHeapDataGetUser, &params, NULL );
   702 	TInt r = DoControl( EMemSpyDriverOpCodeHeapDataGetUser, &params, NULL );
   694 	//
   703 	//
   695 	if  ( r >= KErrNone )
   704 	if  ( r >= KErrNone )
   788     }
   797     }
   789 
   798 
   790 
   799 
   791 EXPORT_C TInt RMemSpyDriverClient::WalkHeapNextCell( TUint aTid, TMemSpyDriverCellType& aCellType, TAny*& aCellAddress, TInt& aLength, TInt& aNestingLevel, TInt& aAllocNumber, TInt& aCellHeaderSize, TAny*& aCellPayloadAddress )
   800 EXPORT_C TInt RMemSpyDriverClient::WalkHeapNextCell( TUint aTid, TMemSpyDriverCellType& aCellType, TAny*& aCellAddress, TInt& aLength, TInt& aNestingLevel, TInt& aAllocNumber, TInt& aCellHeaderSize, TAny*& aCellPayloadAddress )
   792     {
   801     {
   793     aCellType = EMemSpyDriverGoodAllocatedCell;
   802     aCellType = EMemSpyDriverBadCellMask;
   794     aCellAddress = NULL;
   803     aCellAddress = NULL;
   795     aLength = 0;
   804     aLength = 0;
   796     aNestingLevel = 0;
   805     aNestingLevel = 0;
   797     aAllocNumber = 0;
   806     aAllocNumber = 0;
   798     aCellHeaderSize = 0;
   807     aCellHeaderSize = 0;
   801     TMemSpyDriverInternalWalkHeapParamsCell params;
   810     TMemSpyDriverInternalWalkHeapParamsCell params;
   802 	const TInt r = DoControl( EMemSpyDriverOpCodeWalkHeapNextCell, (TAny*) aTid, &params );
   811 	const TInt r = DoControl( EMemSpyDriverOpCodeWalkHeapNextCell, (TAny*) aTid, &params );
   803     //
   812     //
   804 	if  ( r == KErrNone )
   813 	if  ( r == KErrNone )
   805 	    {
   814 	    {
   806         RBuildQueryableHeap* heap = static_cast< RBuildQueryableHeap* >( &User::Allocator() );
       
   807         //
       
   808         aCellType = (TMemSpyDriverCellType) params.iCellType;
   815         aCellType = (TMemSpyDriverCellType) params.iCellType;
   809         aCellAddress = params.iCellAddress;
   816         aCellAddress = params.iCellAddress;
   810         aLength = params.iLength;
   817         aLength = params.iLength;
   811         aNestingLevel = params.iNestingLevel;
   818         aNestingLevel = params.iNestingLevel;
   812         aAllocNumber = params.iAllocNumber;
   819         aAllocNumber = params.iAllocNumber;
   813         aCellHeaderSize = heap->CellHeaderSize( aCellType );
       
   814         aCellPayloadAddress = ((TUint8*) aCellAddress) + aCellHeaderSize;
   820         aCellPayloadAddress = ((TUint8*) aCellAddress) + aCellHeaderSize;
   815         }
   821         }
   816     //
   822     //
   817    	return r;
   823    	return r;
   818     }
   824     }
   837     }
   843     }
   838 
   844 
   839 
   845 
   840 EXPORT_C TInt RMemSpyDriverClient::WalkHeapGetCellInfo( TAny*& aCellAddress, TMemSpyDriverCellType& aCellType, TInt& aLength, TInt& aNestingLevel, TInt& aAllocNumber, TInt& aCellHeaderSize, TAny*& aCellPayloadAddress )
   846 EXPORT_C TInt RMemSpyDriverClient::WalkHeapGetCellInfo( TAny*& aCellAddress, TMemSpyDriverCellType& aCellType, TInt& aLength, TInt& aNestingLevel, TInt& aAllocNumber, TInt& aCellHeaderSize, TAny*& aCellPayloadAddress )
   841     {
   847     {
   842     aCellType = EMemSpyDriverGoodAllocatedCell;
   848     aCellType = EMemSpyDriverBadCellMask;
   843     aLength = 0;
   849     aLength = 0;
   844     aNestingLevel = 0;
   850     aNestingLevel = 0;
   845     aAllocNumber = 0;
   851     aAllocNumber = 0;
   846     aCellHeaderSize = 0;
   852     aCellHeaderSize = 0;
   847     aCellPayloadAddress = NULL;
   853     aCellPayloadAddress = NULL;
   849     TMemSpyDriverInternalWalkHeapParamsCell params;
   855     TMemSpyDriverInternalWalkHeapParamsCell params;
   850 	const TInt r = DoControl( EMemSpyDriverOpCodeWalkHeapGetCellInfo, aCellAddress, &params );
   856 	const TInt r = DoControl( EMemSpyDriverOpCodeWalkHeapGetCellInfo, aCellAddress, &params );
   851     //
   857     //
   852 	if  ( r == KErrNone )
   858 	if  ( r == KErrNone )
   853 	    {
   859 	    {
   854         RBuildQueryableHeap* heap = static_cast< RBuildQueryableHeap* >( &User::Allocator() );
       
   855         //
       
   856         aCellAddress = params.iCellAddress;
   860         aCellAddress = params.iCellAddress;
   857         aCellType = (TMemSpyDriverCellType) params.iCellType;
   861         aCellType = (TMemSpyDriverCellType) params.iCellType;
   858         aLength = params.iLength;
   862         aLength = params.iLength;
   859         aNestingLevel = params.iNestingLevel;
   863         aNestingLevel = params.iNestingLevel;
   860         aAllocNumber = params.iAllocNumber;
   864         aAllocNumber = params.iAllocNumber;
   861         aCellHeaderSize = heap->CellHeaderSize( aCellType );
       
   862         aCellPayloadAddress = ((TUint8*) aCellAddress) + aCellHeaderSize;
   865         aCellPayloadAddress = ((TUint8*) aCellAddress) + aCellHeaderSize;
   863         }
   866         }
   864     //
   867     //
   865    	return r;
   868    	return r;
   866     }
   869     }
  1399     }
  1402     }
  1400 
  1403 
  1401 
  1404 
  1402 TBool RMemSpyDriverClient::DebugEUser()
  1405 TBool RMemSpyDriverClient::DebugEUser()
  1403     {
  1406     {
  1404     RHeap* heap = static_cast< RHeap* >( &User::Allocator() );
  1407 	LtkUtils::RAllocatorHelper allocHelper;
  1405     RBuildQueryableHeap* queryHeap = static_cast< RBuildQueryableHeap* >( heap );
  1408 	TBool result = EFalse;
  1406     const TBool isDebugEUser = queryHeap->IsDebugEUser();
  1409 	TInt err = allocHelper.Open(&User::Allocator());
  1407     return isDebugEUser;
  1410 	if (!err)
       
  1411 		{
       
  1412 		result = allocHelper.AllocatorIsUdeb();
       
  1413 		allocHelper.Close();
       
  1414 		}
       
  1415 	return result;
  1408     }
  1416     }
  1409 
  1417 
  1410 
  1418 
  1411 void RMemSpyDriverClient::ResetStreamBuffer()
  1419 void RMemSpyDriverClient::ResetStreamBuffer()
  1412     {
  1420     {
  1433 #endif
  1441 #endif
  1434 
  1442 
  1435         for( TInt i=0; i<count; i++ )
  1443         for( TInt i=0; i<count; i++ )
  1436             {
  1444             {
  1437             TMemSpyDriverFreeCell entry;
  1445             TMemSpyDriverFreeCell entry;
  1438             entry.iType = stream.ReadInt32L();
  1446             entry.iType = (TMemSpyDriverCellType)stream.ReadInt32L();
  1439             entry.iAddress = reinterpret_cast< TAny* >( stream.ReadUint32L() );
  1447             entry.iAddress = reinterpret_cast< TAny* >( stream.ReadUint32L() );
  1440             entry.iLength = stream.ReadInt32L();
  1448             entry.iLength = stream.ReadInt32L();
  1441             aFreeCells.AppendL( entry );
  1449             aFreeCells.AppendL( entry );
  1442             }
  1450             }
  1443 
  1451 
  1460 
  1468 
  1461 static void PrintHeapInfo( const TMemSpyHeapInfo& aInfo )
  1469 static void PrintHeapInfo( const TMemSpyHeapInfo& aInfo )
  1462     {
  1470     {
  1463 #if defined( _DEBUG ) && !defined( __WINS__ )
  1471 #if defined( _DEBUG ) && !defined( __WINS__ )
  1464     const TMemSpyHeapInfoRHeap& rHeapInfo = aInfo.AsRHeap();
  1472     const TMemSpyHeapInfoRHeap& rHeapInfo = aInfo.AsRHeap();
  1465     const TMemSpyHeapObjectDataRHeap& rHeapObjectData = rHeapInfo.ObjectData();
  1473     //const TMemSpyHeapObjectDataRHeap& rHeapObjectData = rHeapInfo.ObjectData();
  1466     const TMemSpyHeapStatisticsRHeap& rHeapStats = rHeapInfo.Statistics();
  1474     const TMemSpyHeapStatisticsRHeap& rHeapStats = rHeapInfo.Statistics();
  1467     const TMemSpyHeapMetaDataRHeap& rHeapMetaData = rHeapInfo.MetaData();
  1475     const TMemSpyHeapMetaDataRHeap& rHeapMetaData = rHeapInfo.MetaData();
  1468 
  1476 
       
  1477 	/*
       
  1478 	 * TODO update to reflect new memory allocator structs etc
       
  1479 	 * 
  1469     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------");
  1480     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------");
  1470     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - RAllocator                                      -");
  1481     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - RAllocator                                      -");
  1471     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------");
  1482     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------");
  1472     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - RAllocator::iAccessCount:       %d", rHeapObjectData.iAccessCount);
  1483     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - RAllocator::iAccessCount:       %d", rHeapObjectData.iAccessCount);
  1473     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - RAllocator::iHandleCount:       %d", rHeapObjectData.iHandleCount);
  1484     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - RAllocator::iHandleCount:       %d", rHeapObjectData.iHandleCount);
  1499     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - RHeap::iFailed:                 %d", rHeapObjectData.iFailed);
  1510     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - RHeap::iFailed:                 %d", rHeapObjectData.iFailed);
  1500     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - RHeap::iFailAllocCount:         %d", rHeapObjectData.iFailAllocCount);
  1511     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - RHeap::iFailAllocCount:         %d", rHeapObjectData.iFailAllocCount);
  1501     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - RHeap::iRand:                   %d", rHeapObjectData.iRand);
  1512     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - RHeap::iRand:                   %d", rHeapObjectData.iRand);
  1502     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - RHeap::iTestData:               0x%08x", rHeapObjectData.iTestData);
  1513     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - RHeap::iTestData:               0x%08x", rHeapObjectData.iTestData);
  1503     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - ");
  1514     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - ");
       
  1515 	*/
  1504 
  1516 
  1505     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------");
  1517     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------");
  1506     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - Stats (Free)                                    -");
  1518     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - Stats (Free)                                    -");
  1507     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------");
  1519     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------");
  1508     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - cell count:                     %d", rHeapStats.StatsFree().TypeCount());
  1520     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - cell count:                     %d", rHeapStats.StatsFree().TypeCount());
  1519     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------");
  1531     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------");
  1520     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - cell count:                     %d", rHeapStats.StatsAllocated().TypeCount());
  1532     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - cell count:                     %d", rHeapStats.StatsAllocated().TypeCount());
  1521     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - cell size:                      %d", rHeapStats.StatsAllocated().TypeSize());
  1533     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - cell size:                      %d", rHeapStats.StatsAllocated().TypeSize());
  1522     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - cell largest:                   0x%08x", rHeapStats.StatsAllocated().LargestCellAddress());
  1534     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - cell largest:                   0x%08x", rHeapStats.StatsAllocated().LargestCellAddress());
  1523     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - cell largest size:              %d", rHeapStats.StatsAllocated().LargestCellSize());
  1535     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - cell largest size:              %d", rHeapStats.StatsAllocated().LargestCellSize());
  1524     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - ");
       
  1525 
       
  1526     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------");
       
  1527     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - Stats (Common)                                  -");
       
  1528     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------");
       
  1529     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - total cell count:               %d", rHeapStats.StatsCommon().TotalCellCount());
       
  1530     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - ");
  1536     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - ");
  1531 
  1537 
  1532     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------");
  1538     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------");
  1533     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - Misc. Info                                      -");
  1539     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - Misc. Info                                      -");
  1534     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------");
  1540     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------");
  1540     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - debug allocator:                %d", rHeapMetaData.IsDebugAllocator());
  1546     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - debug allocator:                %d", rHeapMetaData.IsDebugAllocator());
  1541     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - shared heap:                    %d", rHeapMetaData.IsSharedHeap() );
  1547     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - shared heap:                    %d", rHeapMetaData.IsSharedHeap() );
  1542     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - user thread:                    %d", rHeapMetaData.IsUserThread() );
  1548     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - user thread:                    %d", rHeapMetaData.IsUserThread() );
  1543     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - thread id:                      %d", aInfo.Tid() );
  1549     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - thread id:                      %d", aInfo.Tid() );
  1544     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - process id:                     %d", aInfo.Pid() );
  1550     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - process id:                     %d", aInfo.Pid() );
  1545     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - cell header size (free):        %d", rHeapMetaData.HeaderSizeFree());
  1551     //RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - cell header size (free):        %d", rHeapMetaData.HeaderSizeFree());
  1546     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - cell header size (alloc):       %d", rHeapMetaData.HeaderSizeAllocated());
  1552     //RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - cell header size (alloc):       %d", rHeapMetaData.HeaderSizeAllocated());
  1547 #else
  1553 #else
  1548     (void) aInfo;
  1554     (void) aInfo;
  1549 #endif
  1555 #endif
  1550     }
  1556     }
  1551 
  1557