branch | RCL_3 |
changeset 59 | 8ad140f3dd41 |
parent 49 | 7fdc9a71d314 |
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 |