435 const TUint32 KExpectedObjectConVTable = *((TUint32*) con); |
435 const TUint32 KExpectedObjectConVTable = *((TUint32*) con); |
436 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - KExpectedObjectConVTable: 0x%08x", KExpectedObjectConVTable )); |
436 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - KExpectedObjectConVTable: 0x%08x", KExpectedObjectConVTable )); |
437 delete con; |
437 delete con; |
438 |
438 |
439 // We should have the valid CObjectCon data now. |
439 // We should have the valid CObjectCon data now. |
440 RDesReadStream stream( *cellData ); |
440 if( cellData ) |
441 CleanupClosePushL( stream ); |
441 { |
442 |
442 RDesReadStream stream( *cellData ); |
443 // Read vtable |
443 CleanupClosePushL( stream ); |
444 const TUint32 vTable = stream.ReadUint32L(); |
444 |
445 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - actual vTable: 0x%08x", vTable )); |
445 // Read vtable |
446 if ( vTable != KExpectedObjectConVTable ) |
446 const TUint32 vTable = stream.ReadUint32L(); |
447 { |
447 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - actual vTable: 0x%08x", vTable )); |
448 User::Leave( KErrNotFound ); |
448 if ( vTable != KExpectedObjectConVTable ) |
449 } |
449 { |
450 |
450 User::Leave( KErrNotFound ); |
451 const TInt uniqueId = stream.ReadInt32L(); |
451 } |
452 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - uniqueId: %d", uniqueId )); |
452 |
453 |
453 const TInt uniqueId = stream.ReadInt32L(); |
454 aCount = stream.ReadInt32L(); |
454 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - uniqueId: %d", uniqueId )); |
455 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - aCount: %d", aCount )); |
455 |
456 |
456 aCount = stream.ReadInt32L(); |
457 aAllocated = stream.ReadInt32L(); |
457 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - aCount: %d", aCount )); |
458 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - aAllocated: %d", aAllocated )); |
458 |
459 |
459 aAllocated = stream.ReadInt32L(); |
460 // This is actually CObject's iObject, i.e. CObject** iObjects. |
460 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - aAllocated: %d", aAllocated )); |
461 TAny* pObjects = reinterpret_cast< TAny*>( stream.ReadUint32L() ); |
461 |
462 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - pObjects: 0x%08x", pObjects )); |
462 // This is actually CObject's iObject, i.e. CObject** iObjects. |
463 |
463 TAny* pObjects = reinterpret_cast< TAny*>( stream.ReadUint32L() ); |
464 CleanupStack::PopAndDestroy( 2, cellData ); // cellData & stream |
464 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - pObjects: 0x%08x", pObjects )); |
465 |
465 |
466 // Now fetch the cell containing the CObject pointers... |
466 CleanupStack::PopAndDestroy( 2, cellData ); // cellData & stream |
467 err = iEngine.Driver().WalkHeapGetCellInfo( pObjects, cellType, cellLength, cellNestingLevel, cellAllocationNumber, cellHeaderSize, cellPayloadAddress ); |
467 |
468 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - array of CObject* cell fetch err: %d, cellAddress: 0x%08x, cellLength: %d, cellAllocationNumber: %d, cellType: %d", err, aCellAddress, cellLength, cellAllocationNumber, cellType)); |
468 // Now fetch the cell containing the CObject pointers... |
469 User::LeaveIfError( err ); |
469 err = iEngine.Driver().WalkHeapGetCellInfo( pObjects, cellType, cellLength, cellNestingLevel, cellAllocationNumber, cellHeaderSize, cellPayloadAddress ); |
470 |
470 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - array of CObject* cell fetch err: %d, cellAddress: 0x%08x, cellLength: %d, cellAllocationNumber: %d, cellType: %d", err, aCellAddress, cellLength, cellAllocationNumber, cellType)); |
471 const TInt expectedSize = ( aAllocated * sizeof(CObject*) ) + cellHeaderSize; |
471 User::LeaveIfError( err ); |
472 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - expectedSize: %d, actual size: %d", expectedSize, cellLength )); |
472 |
473 if ( cellLength < expectedSize ) |
473 const TInt expectedSize = ( aAllocated * sizeof(CObject*) ) + cellHeaderSize; |
474 { |
474 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - expectedSize: %d, actual size: %d", expectedSize, cellLength )); |
475 User::Leave( KErrUnderflow ); |
475 if ( cellLength < expectedSize ) |
476 } |
476 { |
477 |
477 User::Leave( KErrUnderflow ); |
478 // Get the data |
478 } |
479 cellData = HBufC8::NewLC( cellLength ); |
479 |
480 TPtr8 pData( cellData->Des() ); |
480 // Get the data |
481 err = iEngine.Driver().WalkHeapReadCellData( pObjects, pData, cellLength ); |
481 cellData = HBufC8::NewLC( cellLength ); |
482 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - reading cell data returned error: %d", err)); |
482 TPtr8 pData( cellData->Des() ); |
483 User::LeaveIfError( err ); |
483 err = iEngine.Driver().WalkHeapReadCellData( pObjects, pData, cellLength ); |
484 |
484 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - reading cell data returned error: %d", err)); |
485 // Open stream |
485 User::LeaveIfError( err ); |
486 stream.Open( *cellData ); |
486 |
487 CleanupClosePushL( stream ); |
487 // Open stream |
488 |
488 stream.Open( *cellData ); |
489 // Extract array of pointers |
489 CleanupClosePushL( stream ); |
490 for( TInt i=0; i<aCount; i++ ) |
490 |
491 { |
491 // Extract array of pointers |
492 TAny* objectAddress = reinterpret_cast< TAny*>( stream.ReadUint32L() ); |
492 for( TInt i=0; i<aCount; i++ ) |
493 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - object[%04d]: 0x%08x", i, objectAddress )); |
493 { |
494 aContainerObjects.AppendL( objectAddress ); |
494 TAny* objectAddress = reinterpret_cast< TAny*>( stream.ReadUint32L() ); |
495 } |
495 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - object[%04d]: 0x%08x", i, objectAddress )); |
496 CleanupStack::PopAndDestroy( 2, cellData ); // cellData & stream |
496 aContainerObjects.AppendL( objectAddress ); |
497 |
497 } |
498 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - END" )); |
498 CleanupStack::PopAndDestroy( 2, cellData ); // cellData & stream |
|
499 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::ReadCObjectConInfoL() - END" )); |
|
500 } |
499 } |
501 } |
500 |
502 |
501 |
503 |
502 HBufC8* CMemSpyEngineHelperFbServ::LocateBitmapArrayHeapCellDataLC( TAny*& aArrayCellAddress, TInt aArrayAllocCount ) |
504 HBufC8* CMemSpyEngineHelperFbServ::LocateBitmapArrayHeapCellDataLC( TAny*& aArrayCellAddress, TInt aArrayAllocCount ) |
503 { |
505 { |
771 else |
773 else |
772 { |
774 { |
773 User::Leave( KErrNotFound ); |
775 User::Leave( KErrNotFound ); |
774 } |
776 } |
775 |
777 |
776 RDesReadStream stream( *cellData ); |
778 if( cellData ) |
777 CleanupClosePushL( stream ); |
779 { |
778 |
780 RDesReadStream stream( *cellData ); |
779 // Read vtable |
781 CleanupClosePushL( stream ); |
780 const TUint32 vTable = stream.ReadUint32L(); |
782 |
781 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - actual vTable: 0x%08x", vTable )); |
783 // Read vtable |
782 TBool isROMAddress = EFalse; |
784 const TUint32 vTable = stream.ReadUint32L(); |
783 err = User::IsRomAddress( isROMAddress, (TAny*) vTable ); |
785 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - actual vTable: 0x%08x", vTable )); |
784 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - vtable (0x%08x) is in ROM: %d (error: %d)", vTable, isROMAddress, err)); |
786 TBool isROMAddress = EFalse; |
785 User::LeaveIfError( err ); |
787 err = User::IsRomAddress( isROMAddress, (TAny*) vTable ); |
786 |
788 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - vtable (0x%08x) is in ROM: %d (error: %d)", vTable, isROMAddress, err)); |
787 // Skip CObject members |
789 User::LeaveIfError( err ); |
788 (void) stream.ReadL( sizeof( CObject ) ); // skip this much |
790 |
789 object->iThisPointer = reinterpret_cast< CBitmapObject* >( cellPayloadAddress );; |
791 // Skip CObject members |
790 object->iTop = reinterpret_cast< CBase* >( stream.ReadUint32L() ); |
792 (void) stream.ReadL( sizeof( CObject ) ); // skip this much |
791 object->iAddressPointer = reinterpret_cast< CBitwiseBitmap* >( stream.ReadUint32L() ); |
793 object->iThisPointer = reinterpret_cast< CBitmapObject* >( cellPayloadAddress );; |
792 object->iHandle = stream.ReadInt32L(); |
794 object->iTop = reinterpret_cast< CBase* >( stream.ReadUint32L() ); |
793 object->iCleanBitmap = reinterpret_cast< CBitmapObject* >( stream.ReadUint32L() ); |
795 object->iAddressPointer = reinterpret_cast< CBitwiseBitmap* >( stream.ReadUint32L() ); |
794 |
796 object->iHandle = stream.ReadInt32L(); |
795 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iThisPointer: 0x%08x", object->iThisPointer )); |
797 object->iCleanBitmap = reinterpret_cast< CBitmapObject* >( stream.ReadUint32L() ); |
796 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iTop: 0x%08x", object->iTop )); |
798 |
797 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iAddressPointer: 0x%08x", object->iAddressPointer )); |
799 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iThisPointer: 0x%08x", object->iThisPointer )); |
798 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iHandle: 0x%08x", object->iHandle )); |
800 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iTop: 0x%08x", object->iTop )); |
799 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iCleanBitmap: 0x%08x", object->iCleanBitmap )); |
801 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iAddressPointer: 0x%08x", object->iAddressPointer )); |
800 |
802 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iHandle: 0x%08x", object->iHandle )); |
801 // Clean up - don't need this data anymore. Real data is in another cell |
803 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - object->iCleanBitmap: 0x%08x", object->iCleanBitmap )); |
802 CleanupStack::PopAndDestroy( 2, cellData ); // stream & cellData |
804 |
|
805 // Clean up - don't need this data anymore. Real data is in another cell |
|
806 CleanupStack::PopAndDestroy( 2, cellData ); // stream & cellData |
|
807 } |
803 |
808 |
804 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - END - aCellAddress: 0x%08x", aCellAddress )); |
809 TRACE( RDebug::Printf("CMemSpyEngineHelperFbServ::GetBitmapObjectLC() - END - aCellAddress: 0x%08x", aCellAddress )); |
805 return object; |
810 return object; |
806 } |
811 } |
807 |
812 |