memspy/Engine/Source/SysMemTracker/MemSpyEngineHelperSysMemTrackerEntryHeap.cpp
branchRCL_3
changeset 59 8ad140f3dd41
parent 49 7fdc9a71d314
equal deleted inserted replaced
49:7fdc9a71d314 59:8ad140f3dd41
   214     }
   214     }
   215 
   215 
   216 
   216 
   217 TBool CMemSpyEngineHelperSysMemTrackerEntryHeap::HaveFreeCellsChanged() const
   217 TBool CMemSpyEngineHelperSysMemTrackerEntryHeap::HaveFreeCellsChanged() const
   218     {
   218     {
   219     TBool changed = ( iCurrent.AsRHeap().Statistics().StatsFree().TypeCount() != iLast.AsRHeap().Statistics().StatsFree().TypeCount() ) ||
   219     TBool changed = 
   220 		( iCurrent.AsRHeap().Statistics().StatsFree().TypeSize() != iLast.AsRHeap().Statistics().StatsFree().TypeSize() );
   220         ( iCurrent.AsRHeap().ObjectData().iFree.next != iLast.AsRHeap().ObjectData().iFree.next ) ||
       
   221         ( iCurrent.AsRHeap().ObjectData().iFree.len != iLast.AsRHeap().ObjectData().iFree.len );
       
   222     //
       
   223     if ( !changed )
       
   224         {
       
   225         changed |= ( iCurrent.AsRHeap().Statistics().StatsFree().TypeCount() != iLast.AsRHeap().Statistics().StatsFree().TypeCount() );
       
   226         changed |= ( iCurrent.AsRHeap().Statistics().StatsFree().SlackSpaceCellSize() != iLast.AsRHeap().Statistics().StatsFree().SlackSpaceCellSize() );
       
   227         }
   221     //
   228     //
   222     return changed;
   229     return changed;
   223     }
   230     }
   224 
   231 
   225 
   232 
   287     }
   294     }
   288 
   295 
   289 
   296 
   290 void CMemSpyEngineHelperSysMemTrackerCycleChangeHeap::OutputHeaderL( CMemSpyEngineOutputSink& aSink, CMemSpyEngineHelperSysMemTrackerCycle& /*aCycle*/ )
   297 void CMemSpyEngineHelperSysMemTrackerCycleChangeHeap::OutputHeaderL( CMemSpyEngineOutputSink& aSink, CMemSpyEngineHelperSysMemTrackerCycle& /*aCycle*/ )
   291     {
   298     {
   292     _LIT( KHeaderHeap, "Type, Thread, Chunk, Handle, Heap Addr, Size, Min, Max, 1st Free Addr, 1st Free Len, Alloc Count, Alloc Space, Free Count, Free Space, Free Slack, F.Largest, A.Largest, Attribs");
   299     _LIT( KHeaderHeap, "Type, Thread, Chunk, Handle, Base Addr, Size, Min, Max, 1st Free Addr, 1st Free Len, Alloc Count, Alloc Space, Free Count, Free Space, Free Slack, F.Largest, A.Largest, Attribs");
   293     aSink.OutputLineL( KHeaderHeap );
   300     aSink.OutputLineL( KHeaderHeap );
   294     }
   301     }
   295 
   302 
   296 
   303 
   297 void CMemSpyEngineHelperSysMemTrackerCycleChangeHeap::OutputContentL( CMemSpyEngineOutputSink& aSink, CMemSpyEngineHelperSysMemTrackerCycle& /*aCycle*/ )
   304 void CMemSpyEngineHelperSysMemTrackerCycleChangeHeap::OutputContentL( CMemSpyEngineOutputSink& aSink, CMemSpyEngineHelperSysMemTrackerCycle& /*aCycle*/ )
   306     //
   313     //
   307     HBufC* buf = HBufC::NewLC( 1024 );
   314     HBufC* buf = HBufC::NewLC( 1024 );
   308     TPtr pBuf(buf->Des());
   315     TPtr pBuf(buf->Des());
   309 
   316 
   310     const TMemSpyHeapMetaDataRHeap& metaData = iCurrent.AsRHeap().MetaData();
   317     const TMemSpyHeapMetaDataRHeap& metaData = iCurrent.AsRHeap().MetaData();
       
   318     const TMemSpyHeapObjectDataRHeap& objectData = iCurrent.AsRHeap().ObjectData();
   311     const TMemSpyHeapStatisticsRHeap& stats = iCurrent.AsRHeap().Statistics();
   319     const TMemSpyHeapStatisticsRHeap& stats = iCurrent.AsRHeap().Statistics();
   312 
   320 
   313     // Strip any process & thread
   321     // Strip any process & thread
   314     const TPtrC pChunkName( MemSpyEngineUtils::TextAfterLastDoubleColon( metaData.ChunkName() ) );
   322     const TPtrC pChunkName( MemSpyEngineUtils::TextAfterLastDoubleColon( metaData.ChunkName() ) );
   315 
   323 
   316     pBuf.Format( KFormat, 
   324     pBuf.Format( KFormat, 
   317                  &type,
   325                  &type,
   318                  iThreadName, 
   326                  iThreadName, 
   319                  &pChunkName,
   327                  &pChunkName,
   320                  metaData.ChunkHandle(),
   328                  metaData.ChunkHandle(),
   321                  /*objectData.Base(),*/ metaData.iAllocatorAddress,
   329                  objectData.Base(),
   322                  metaData.ChunkSize(),
   330                  metaData.ChunkSize(),
   323                  /*objectData.iMinLength,*/ metaData.iMinHeapSize,
   331                  objectData.iMinLength,
   324                  /*objectData.iMaxLength,*/ metaData.iMaxHeapSize,
   332                  objectData.iMaxLength,
   325                  /*objectData.iFree.next,*/ NULL, //TODO
   333                  objectData.iFree.next,
   326                  /*objectData.iFree.len,*/ 0,
   334                  objectData.iFree.len,
   327                  stats.StatsAllocated().TypeCount(),
   335                  stats.StatsAllocated().TypeCount(),
   328                  stats.StatsAllocated().TypeSize(),
   336                  stats.StatsAllocated().TypeSize(),
   329                  stats.StatsFree().TypeCount(),
   337                  stats.StatsFree().TypeCount(),
   330                  stats.StatsFree().TypeSize(),
   338                  stats.StatsFree().TypeSize(),
   331                  stats.StatsFree().SlackSpaceCellSize(),
   339                  stats.StatsFree().SlackSpaceCellSize(),
   361 	// Now dump the heap data
   369 	// Now dump the heap data
   362     if  ( allowedToDump )
   370     if  ( allowedToDump )
   363         {
   371         {
   364         // Starts a data Stream
   372         // Starts a data Stream
   365         aCycle.DataStreamBeginL( aSink, *iThreadName );
   373         aCycle.DataStreamBeginL( aSink, *iThreadName );
   366         
       
   367         TInt err = KErrNone;
       
   368 
   374 
   369         if  ( IsKernel() )
   375         if  ( IsKernel() )
   370             {
   376             {
   371             TRAP(err, engine.HelperHeap().OutputHeapDataKernelL( KMemSpyEngineSinkDoNotCreateOwnDataStream ));
   377             engine.HelperHeap().OutputHeapDataKernelL( KMemSpyEngineSinkDoNotCreateOwnDataStream );
   372             }
   378             }
   373         else if ( thread )
   379         else if ( thread )
   374             {
   380             {
   375             TRAP(err, engine.HelperHeap().OutputHeapDataUserL( *thread, KMemSpyEngineSinkDoNotCreateOwnDataStream )); 
   381             engine.HelperHeap().OutputHeapDataUserL( *thread, KMemSpyEngineSinkDoNotCreateOwnDataStream ); 
   376             }
   382             }
   377 
   383 
   378         // End the stream (commit the file)
   384         // End the stream (commit the file)
   379         aCycle.DataStreamEndL( aSink );
   385         aCycle.DataStreamEndL( aSink );
   380         
       
   381         User::LeaveIfError(err);
       
   382         }
   386         }
   383     }
   387     }
   384 
   388 
   385 
   389 
   386 TBool CMemSpyEngineHelperSysMemTrackerCycleChangeHeap::IsKernel() const
   390 TBool CMemSpyEngineHelperSysMemTrackerCycleChangeHeap::IsKernel() const