memspy/Driver/User/Source/MemSpyDriverClient.cpp
branchRCL_3
changeset 59 8ad140f3dd41
parent 49 7fdc9a71d314
--- a/memspy/Driver/User/Source/MemSpyDriverClient.cpp	Wed Sep 15 13:53:27 2010 +0300
+++ b/memspy/Driver/User/Source/MemSpyDriverClient.cpp	Wed Oct 13 16:17:58 2010 +0300
@@ -22,11 +22,11 @@
 
 // User includes
 #include "MemSpyDriverOpCodes.h"
+#include "RBuildQueryableHeap.h"
 #include <memspy/driver/memspydriverconstants.h>
 #include <memspy/driver/memspydriverobjectsshared.h>
 #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<TMemSpyDriverCell>& 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, &params );
 	//
@@ -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, &params, NULL );
@@ -696,7 +688,6 @@
     params.iDes = &aDest;
     params.iChecksum = 0;
     params.iRemaining = aAmountRemaining;
-	params.iReadAddress = aReadAddress;
     aDest.Zero();
     //
 	TInt r = DoControl( EMemSpyDriverOpCodeHeapDataGetUser, &params, 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<count; i++ )
             {
             TMemSpyDriverFreeCell entry;
-            entry.iType = (TMemSpyDriverCellType)stream.ReadInt32L();
+            entry.iType = stream.ReadInt32L();
             entry.iAddress = reinterpret_cast< TAny* >( stream.ReadUint32L() );
             entry.iLength = stream.ReadInt32L();
             aFreeCells.AppendL( entry );
@@ -1470,13 +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();
 
-	/*
-	 * TODO update to reflect new memory allocator structs etc
-	 * 
     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------");
     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() - RAllocator                                      -");
     RDebug::Printf("RMemSpyDriverClient::PrintHeapInfo() ---------------------------------------------------");
@@ -1512,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)                                    -");
@@ -1536,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() );
@@ -1548,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