diff -r ca8a1b6995f6 -r 52e343bb8f80 memspy/Driver/User/Source/MemSpyDriverClient.cpp --- a/memspy/Driver/User/Source/MemSpyDriverClient.cpp Tue Aug 31 16:45:49 2010 +0300 +++ b/memspy/Driver/User/Source/MemSpyDriverClient.cpp Wed Sep 01 12:37:10 2010 +0100 @@ -22,11 +22,11 @@ // User includes #include "MemSpyDriverOpCodes.h" +#include "RBuildQueryableHeap.h" #include #include #include "MemSpyDriverStreamReaderImp.h" #include "MemSpyDriverObjectsInternal.h" -#include "heaputils.h" // Constants const TInt KMemSpyClientBufferGrowSize = 0x1000 * 8; // 32kb @@ -511,7 +511,7 @@ TMemSpyHeapInfoRHeap& rHeapInfo = aInfo.AsRHeap(); TMemSpyHeapMetaDataRHeap& metaData = rHeapInfo.MetaData(); metaData.SetVTable( RHeapVTable() ); - //metaData.SetClassSize( sizeof( RHeap ) ); + metaData.SetClassSize( sizeof( RHeap ) ); } } else if ( r == KErrNotSupported ) @@ -523,14 +523,9 @@ return r; } + EXPORT_C TInt RMemSpyDriverClient::GetHeapInfoUser( TMemSpyHeapInfo& aInfo, TUint aTid, RArray< TMemSpyDriverFreeCell >& aFreeCells ) - { - return GetHeapInfoUser(aInfo, aTid, aFreeCells, EFalse); - } - -// 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 -EXPORT_C TInt RMemSpyDriverClient::GetHeapInfoUser(TMemSpyHeapInfo& aInfo, TUint aTid, RArray& aCells, TBool aCollectAllocatedCellsAsWellAsFree) - { + { TMemSpyDriverInternalHeapRequestParameters params; // params.iTid = aTid; @@ -538,10 +533,8 @@ params.iDebugAllocator = DebugEUser(); params.iMasterInfo = &aInfo; params.iBuildFreeCellList = ETrue; - params.iBuildAllocCellList = aCollectAllocatedCellsAsWellAsFree; - // - aCells.Reset(); + aFreeCells.Reset(); ResetStreamBuffer(); TInt r = DoControl( EMemSpyDriverOpCodeHeapInfoGetUser, ¶ms ); // @@ -555,7 +548,7 @@ TMemSpyHeapInfoRHeap& rHeapInfo = aInfo.AsRHeap(); TMemSpyHeapMetaDataRHeap& metaData = rHeapInfo.MetaData(); metaData.SetVTable( RHeapVTable() ); - //metaData.SetClassSize( sizeof( RHeap ) ); + metaData.SetClassSize( sizeof( RHeap ) ); } // Resize transfer buffer to make room for free cells. We only make the buffer @@ -568,10 +561,10 @@ // Now fetch the heap data if ( r == KErrNone ) { - r = DoControl( EMemSpyDriverOpCodeHeapInfoFetchCellList, &iBuffer ); + r = DoControl( EMemSpyDriverOpCodeHeapInfoFetchFreeCells, &iBuffer ); if ( r == KErrNone ) { - TRAP( r, ReadHeapInfoFreeCellsFromXferBufferL( aCells ) ); + TRAP( r, ReadHeapInfoFreeCellsFromXferBufferL( aFreeCells ) ); } } } @@ -670,7 +663,6 @@ params.iDes = &aDest; params.iChecksum = aFreeCellChecksum; params.iRemaining = -1; - params.iReadAddress = 0; aDest.Zero(); // TInt r = DoControl( EMemSpyDriverOpCodeHeapDataGetUser, ¶ms, NULL ); @@ -696,7 +688,6 @@ params.iDes = &aDest; params.iChecksum = 0; params.iRemaining = aAmountRemaining; - params.iReadAddress = aReadAddress; aDest.Zero(); // TInt r = DoControl( EMemSpyDriverOpCodeHeapDataGetUser, ¶ms, NULL ); @@ -799,7 +790,7 @@ EXPORT_C TInt RMemSpyDriverClient::WalkHeapNextCell( TUint aTid, TMemSpyDriverCellType& aCellType, TAny*& aCellAddress, TInt& aLength, TInt& aNestingLevel, TInt& aAllocNumber, TInt& aCellHeaderSize, TAny*& aCellPayloadAddress ) { - aCellType = EMemSpyDriverBadCellMask; + aCellType = EMemSpyDriverGoodAllocatedCell; aCellAddress = NULL; aLength = 0; aNestingLevel = 0; @@ -812,11 +803,14 @@ // if ( r == KErrNone ) { + RBuildQueryableHeap* heap = static_cast< RBuildQueryableHeap* >( &User::Allocator() ); + // aCellType = (TMemSpyDriverCellType) params.iCellType; aCellAddress = params.iCellAddress; aLength = params.iLength; aNestingLevel = params.iNestingLevel; aAllocNumber = params.iAllocNumber; + aCellHeaderSize = heap->CellHeaderSize( aCellType ); aCellPayloadAddress = ((TUint8*) aCellAddress) + aCellHeaderSize; } // @@ -845,7 +839,7 @@ EXPORT_C TInt RMemSpyDriverClient::WalkHeapGetCellInfo( TAny*& aCellAddress, TMemSpyDriverCellType& aCellType, TInt& aLength, TInt& aNestingLevel, TInt& aAllocNumber, TInt& aCellHeaderSize, TAny*& aCellPayloadAddress ) { - aCellType = EMemSpyDriverBadCellMask; + aCellType = EMemSpyDriverGoodAllocatedCell; aLength = 0; aNestingLevel = 0; aAllocNumber = 0; @@ -857,11 +851,14 @@ // if ( r == KErrNone ) { + RBuildQueryableHeap* heap = static_cast< RBuildQueryableHeap* >( &User::Allocator() ); + // aCellAddress = params.iCellAddress; aCellType = (TMemSpyDriverCellType) params.iCellType; aLength = params.iLength; aNestingLevel = params.iNestingLevel; aAllocNumber = params.iAllocNumber; + aCellHeaderSize = heap->CellHeaderSize( aCellType ); aCellPayloadAddress = ((TUint8*) aCellAddress) + aCellHeaderSize; } // @@ -1404,15 +1401,10 @@ TBool RMemSpyDriverClient::DebugEUser() { - LtkUtils::RAllocatorHelper allocHelper; - TBool result = EFalse; - TInt err = allocHelper.Open(&User::Allocator()); - if (!err) - { - result = allocHelper.AllocatorIsUdeb(); - allocHelper.Close(); - } - return result; + RHeap* heap = static_cast< RHeap* >( &User::Allocator() ); + RBuildQueryableHeap* queryHeap = static_cast< RBuildQueryableHeap* >( heap ); + const TBool isDebugEUser = queryHeap->IsDebugEUser(); + return isDebugEUser; } @@ -1443,7 +1435,7 @@ for( TInt i=0; i( stream.ReadUint32L() ); entry.iLength = stream.ReadInt32L(); aFreeCells.AppendL( entry ); @@ -1470,11 +1462,10 @@ { #if defined( _DEBUG ) && !defined( __WINS__ ) const TMemSpyHeapInfoRHeap& rHeapInfo = aInfo.AsRHeap(); - //const TMemSpyHeapObjectDataRHeap& rHeapObjectData = rHeapInfo.ObjectData(); + const TMemSpyHeapObjectDataRHeap& rHeapObjectData = rHeapInfo.ObjectData(); const TMemSpyHeapStatisticsRHeap& rHeapStats = rHeapInfo.Statistics(); const TMemSpyHeapMetaDataRHeap& rHeapMetaData = rHeapInfo.MetaData(); - /* RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------"); RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - RAllocator -"); RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------"); @@ -1510,7 +1501,6 @@ RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - RHeap::iRand: %d", rHeapObjectData.iRand); RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - RHeap::iTestData: 0x%08x", rHeapObjectData.iTestData); RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - "); - */ RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------"); RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - Stats (Free) -"); @@ -1534,6 +1524,12 @@ RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - "); RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------"); + RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - Stats (Common) -"); + RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------"); + RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - total cell count: %d", rHeapStats.StatsCommon().TotalCellCount()); + RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - "); + + RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------"); RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - Misc. Info -"); RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------"); const TPtrC chunkName( rHeapMetaData.ChunkName() ); @@ -1546,8 +1542,8 @@ RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - user thread: %d", rHeapMetaData.IsUserThread() ); RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - thread id: %d", aInfo.Tid() ); RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - process id: %d", aInfo.Pid() ); - //RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - cell header size (free): %d", rHeapMetaData.HeaderSizeFree()); - //RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - cell header size (alloc): %d", rHeapMetaData.HeaderSizeAllocated()); + RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - cell header size (free): %d", rHeapMetaData.HeaderSizeFree()); + RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - cell header size (alloc): %d", rHeapMetaData.HeaderSizeAllocated()); #else (void) aInfo; #endif