perfsrv/memspy/Engine/Source/Helpers/MemSpyEngineHelperFbServ.cpp
changeset 62 1c2bb2fc7c87
parent 51 98307c651589
equal deleted inserted replaced
56:aa2539c91954 62:1c2bb2fc7c87
   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