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