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