changeset 34 | 7259cf1302ad |
parent 0 | a03f92240627 |
child 44 | 52e343bb8f80 |
33:0d72cc2a29a3 | 34:7259cf1302ad |
---|---|
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 |