--- a/fbs/fontandbitmapserver/sfbs/FBSBMP.CPP Thu Jul 15 20:08:02 2010 +0300
+++ b/fbs/fontandbitmapserver/sfbs/FBSBMP.CPP Thu Aug 19 11:11:18 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1995-2010 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "Eclipse Public License v1.0"
@@ -25,6 +25,11 @@
#include "BitwiseBitmap.inl"
#include "fbsmessage.h"
#include "bitmapconst.h"
+#include "OstTraceDefinitions.h"
+#include "fbstrace.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "FBSBMPTraces.h"
+#endif
const TInt KMaxPixelSize = KMaxTInt / 4; // Maximum pixel size to avoid some overflow problems
const TInt KMaxBitmapHandleBufferSize = KNumBytesPerBitmapHandle * 2000; // Maximum size of buffer to store all bitmap handles.
@@ -95,6 +100,8 @@
*/
EXPORT_C void CFbsBitmap::Reset()
{
+ FBS_OST(TInt ssh = (iFbs ? iFbs->ServerSessionHandle() : 0);)
+ FBS_OST(OstTraceExt4( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_RESET_ENTRY, "> this=0x%08x; iH=0x%08x; iSH=0x%08x; iSSH=0x%08x", (TUint)this, iHandle, iServerHandle, ssh );)
if (iHandle && !(iFlags & EIsRomBitmap))
{
iFbs->SendCommand(EFbsMessClose, iHandle, Handle());
@@ -114,6 +121,7 @@
iUseCount = 0;
iHandle = 0;
iServerHandle = 0;
+ FBS_OST(OstTrace1( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_RESET_EXIT, "< this=0x%08x", (TUint)this );)
}
/** Tests whether or not the bitmap is read-only.
@@ -254,7 +262,11 @@
*/
EXPORT_C TInt CFbsBitmap::Create(const TSize& aSizeInPixels,TDisplayMode aDispMode)
{
- return DoCreate(aSizeInPixels,aDispMode,KUidCFbsBitmapCreation);
+ FBS_OST(OstTraceExt4(GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_CREATE_ENTRY, "> this=0x%08x; w=%d; h=%d; dm=%d", (TUint)this, aSizeInPixels.iWidth, aSizeInPixels.iHeight, aDispMode); )
+ TInt err = DoCreate(aSizeInPixels,aDispMode,KUidCFbsBitmapCreation);
+ FBS_OST(TInt ssh = (iFbs ? iFbs->ServerSessionHandle() : 0);)
+ FBS_OST(OstTraceExt5(GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_CREATE_EXIT, "< this=0x%08x; err=%d; iH=0x%08x; iSH=0x%08x; iSSH=0x%08x", (TUint)this, err, iHandle, iServerHandle, ssh); )
+ return err;
}
TInt CFbsBitmap::DoCreate(const TSize& aSizeInPixels, TDisplayMode aDispMode, TUid aUid, TInt aDataSize)
@@ -305,7 +317,11 @@
*/
EXPORT_C TInt CFbsBitmap::CreateHardwareBitmap(const TSize& aSizeInPixels,TDisplayMode aDispMode,TUid aCreatorUid)
{
- return DoCreate(aSizeInPixels,aDispMode,aCreatorUid);
+ FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_CREATEHARDWAREBITMAP_ENTRY, "> this=0x%08x; w=%d; h=%d; dm=%d; uid=0x%08x", (TUint)this, aSizeInPixels.iWidth, aSizeInPixels.iHeight, aDispMode, aCreatorUid.iUid);)
+ TInt err = DoCreate(aSizeInPixels,aDispMode,aCreatorUid);
+ FBS_OST(TInt ssh = (iFbs ? iFbs->ServerSessionHandle() : 0);)
+ FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_CREATEHARDWAREBITMAP_EXIT, "< this=0x%08x; err=%d; iH=0x%08x; iSH=0x%08x; iSSH=0x%08x", (TUint)this, err, iHandle, iServerHandle, ssh);)
+ return err;
}
/** Resets the pixel-size of the bitmap.
@@ -406,53 +422,105 @@
@released
@see CFbsBitmap::Handle()
*/
-EXPORT_C TInt CFbsBitmap::Duplicate(TInt aBitmapHandle)
- {
+EXPORT_C TInt CFbsBitmap::Duplicate(TInt aBitmapHandle)
+ {
+ TInt ret = KErrNone;
+ FBS_OST(OstTraceExt2( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_DUPLICATE_ENTRY, "> this=0x%08x; iH=0x%08x;", (TUint)this, aBitmapHandle);)
if(!iFbs)
{
- return(KErrCouldNotConnect);
+ ret = KErrCouldNotConnect;
+ FBS_OST(OstTrace1( TRACE_ERROR, CFBSBITMAP_DUPLICATE_ERROR, "! this=0x%08x; !iFbs", (TUint)this);)
}
- if(!aBitmapHandle)
- {
- return(KErrUnknown);
- }
- Reset();
- TBool isinrom=EFalse;
- TInt ret=User::IsRomAddress(isinrom,(TAny*)aBitmapHandle);
- if(ret!=KErrNone)
+ else if(!aBitmapHandle)
{
- return(KErrUnknown);
- }
- if(isinrom)
- {
- if (((CBitwiseBitmap*)aBitmapHandle)->Uid() != KCBitwiseBitmapUid)
- return(KErrUnknown);
- iAddressPointer = (CBitwiseBitmap*)aBitmapHandle;
- iFlags = EIsRomBitmap;
- iHandle=1;
- return iFbs->AllocScanLineBuffer(iAddressPointer->iByteWidth + 4);
+ ret = KErrUnknown;
+ FBS_OST(OstTrace1( TRACE_ERROR, CFBSBITMAP_DUPLICATE_ERROR2, "! this=0x%08x; !aBitmapHandle", (TUint)this);)
}
- TPckgBuf<TBmpHandles> b;
- TIpcArgs args(aBitmapHandle,&b);
- ret=iFbs->SendCommand(EFbsMessBitmapDuplicate,args);
- if(ret!=KErrNone)
- {
- return(ret);
- }
- iHandle=b().iHandle;
- iServerHandle=b().iServerHandle;
- iAddressPointer=(CBitwiseBitmap*)(iFbs->HeapBase()+b().iAddressOffset);
- if (iAddressPointer->iUid.iUid != KCBitwiseBitmapUid.iUid && iAddressPointer->iUid.iUid != KCBitwiseBitmapHardwareUid.iUid)
- {
- iFlags = EIsExtendedBitmap;
- }
- ret = iFbs->iHelper->AddBitmap(*this);
- if (ret != KErrNone)
- {
- return ret;
- }
- return iFbs->AllocScanLineBuffer(iAddressPointer->iByteWidth+4);
- }
+ else
+ {
+ TBool isinrom = EFalse;
+ ret = User::IsRomAddress(isinrom, (TAny*)aBitmapHandle);
+ if (ret == KErrNone)
+ {
+ if (isinrom)
+ {
+ ret = DuplicateInRom(aBitmapHandle);
+ FBS_OST_IF(ret != KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_DUPLICATE_ERROR4, "! this=0x%08x; DuplicateInRom() returned %d;", (TUint)this, ret);)
+ }
+ else
+ {
+ ret = DuplicateInRam(aBitmapHandle);
+ FBS_OST_IF(ret != KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_DUPLICATE_ERROR5, "! this=0x%08x; DuplicateInRam() returned %d;", (TUint)this, ret);)
+ }
+ }
+ else
+ {
+ FBS_OST(OstTraceExt2( TRACE_ERROR, CFBSBITMAP_DUPLICATE_ERROR3, "! this=0x%08x; IsRomAddress() returned %d", (TUint)this, ret);)
+ ret = KErrUnknown;
+ }
+ }
+ FBS_OST(TInt ssh = (iFbs ? iFbs->ServerSessionHandle() : 0);)
+ FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_DUPLICATE_EXIT, "< this=0x%08x; iH=0x%08x; iSH=0x%08x; ret=%d; iSSH=0x%08x", (TUint)this, iHandle, iServerHandle, ret, ssh);)
+ return ret;
+ }
+
+/** Duplicates a bitmap where the bitmap handle refers to a rom bitmap.
+@param aBitmapHandle A valid Rom bitmap handle.
+@return KErrNone on success.
+ */
+TInt CFbsBitmap::DuplicateInRom(TInt aBitmapHandle)
+ {
+ TInt ret = KErrNone;
+ Reset();
+ TUid uid = ((CBitwiseBitmap*)aBitmapHandle)->Uid();
+ if (uid != KCBitwiseBitmapUid)
+ {
+ FBS_OST(OstTraceExt2( TRACE_ERROR, CFBSBITMAP_DUPLICATEINROM_ERROR, "! this=0x%08x; 0x%08x != KCBitwiseBitmapUid", (TUint)this, (TUint)uid.iUid);)
+ ret = KErrUnknown;
+ }
+ else
+ {
+ iAddressPointer = (CBitwiseBitmap*)aBitmapHandle;
+ iFlags = EIsRomBitmap;
+ iHandle=1;
+ ret = iFbs->AllocScanLineBuffer(iAddressPointer->iByteWidth + 4);
+ FBS_OST_IF(ret!=KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_DUPLICATEINROM_ERROR2, "! this=0x%08x; AllocScanLineBuffer() returned %d", (TUint)this, ret);)
+ }
+ return ret;
+ }
+
+/** Duplicates a bitmap where the bitmap handle refers to a ram bitmap
+@param aBitmapHandle A valid Ram bitmap handle.
+@return KErrNone on success.
+ */
+TInt CFbsBitmap::DuplicateInRam(TInt aBitmapHandle)
+ {
+ TInt ret = KErrNone;
+ Reset();
+
+ TPckgBuf<TBmpHandles> b;
+ TIpcArgs args(aBitmapHandle,&b);
+ ret=iFbs->SendCommand(EFbsMessBitmapDuplicate,args);
+ FBS_OST_IF(ret!=KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_DUPLICATEINRAM_ERROR, "! this=0x%08x; SendCommand(EFbsMessBitmapDuplicate) returned %d", (TUint)this, ret);)
+ if(ret==KErrNone)
+ {
+ iHandle=b().iHandle;
+ iServerHandle=b().iServerHandle;
+ iAddressPointer=(CBitwiseBitmap*)(iFbs->HeapBase()+b().iAddressOffset);
+ if (iAddressPointer->iUid.iUid != KCBitwiseBitmapUid.iUid && iAddressPointer->iUid.iUid != KCBitwiseBitmapHardwareUid.iUid)
+ {
+ iFlags = EIsExtendedBitmap;
+ }
+ ret = iFbs->iHelper->AddBitmap(*this);
+ FBS_OST_IF(ret!=KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_DUPLICATEINRAM_ERROR2, "! this=0x%08x; AddBitmap() returned %d", (TUint)this, ret);)
+ if (ret == KErrNone)
+ {
+ ret = iFbs->AllocScanLineBuffer(iAddressPointer->iByteWidth+4);
+ FBS_OST_IF(ret!=KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_DUPLICATEINRAM_ERROR3, "! this=0x%08x; AllocScanLineBuffer() returned %d", (TUint)this, ret);)
+ }
+ }
+ return ret;
+ }
/** Loads a specific bitmap from a multi-bitmap file.
The bitmap may be shared by other font and bitmap server clients.
@@ -467,7 +535,10 @@
*/
EXPORT_C TInt CFbsBitmap::Load(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded)
{
- return Load(aFileName,aId,aShareIfLoaded,0);
+ FBS_OST(OstTraceExt4( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOAD_ENTRY, "> this=0x%08x; file=%S, id=0x%08x; share=%d", (TUint)this, aFileName, aId, aShareIfLoaded);)
+ TInt err = Load(aFileName,aId,aShareIfLoaded,0);
+ FBS_OST(OstTraceExt2( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOAD_EXIT, "< this=0x%08x; err=%d", (TUint)this, err);)
+ return err;
}
/** Loads a specific bitmap from a multi-bitmap file.
@@ -483,38 +554,50 @@
*/
EXPORT_C TInt CFbsBitmap::Load(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset)
{
+ TInt err = KErrNone;
+ FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOAD2_ENTRY, "> this=0x%08x; file=%S, id=0x%08x; share=%d; off=%d", (TUint)this, aFileName, aId, aShareIfLoaded, aFileOffset);)
if(!iFbs)
{
- return(KErrCouldNotConnect);
- }
- Reset();
- TUint32* rompointer = NULL;
- //access using filename has the advantage of using rom address lookup cache
- IsFileInRom(aFileName, rompointer);
- TBool romPointerValid;
- TInt err = DoLoadFromRom(rompointer, aId, aFileOffset, romPointerValid);
- if(romPointerValid)
- {
- return err;
- }
- _LIT(KResourcePath, "?:\\Resource\\*");
- TInt match = aFileName.MatchF(KResourcePath);
- //if the file is in the resource directory we don't need to check capabilities and the file can just be opened on the server side.
- if (match == 0)
- {
- err = DoLoad(aFileName,aId,aShareIfLoaded,aFileOffset);
+ FBS_OST(OstTrace1( TRACE_ERROR, CFBSBITMAP_LOAD2_ERROR, "! this=0x%08x; !iFbs", (TUint)this);)
+ err = KErrCouldNotConnect;
}
else
- {
- RFile file;
- err = file.Open(iFbs->FileServer(),aFileName,EFileShareReadersOnly);
- if (err!=KErrNone)
- {
- return err;
- }
- err = DoLoad(file,aId,aShareIfLoaded,aFileOffset);
- file.Close();
- }
+ {
+ Reset();
+ TUint32* rompointer = NULL;
+ //access using filename has the advantage of using rom address lookup cache
+ IsFileInRom(aFileName, rompointer);
+ TBool romPointerValid;
+ err = DoLoadFromRom(rompointer, aId, aFileOffset, romPointerValid);
+ if(romPointerValid)
+ {
+ FBS_OST(OstTrace1( TRACE_ERROR, CFBSBITMAP_LOAD2_ERROR2, "! this=0x%08x; romPointerValid", (TUint)this);)
+ err = KErrCouldNotConnect;
+ }
+ else
+ {
+ _LIT(KResourcePath, "?:\\Resource\\*");
+ TInt match = aFileName.MatchF(KResourcePath);
+ //if the file is in the resource directory we don't need to check capabilities and the file can just be opened on the server side.
+ if (match == 0)
+ {
+ err = DoLoad(aFileName,aId,aShareIfLoaded,aFileOffset);
+ FBS_OST_IF(err!=KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_LOAD2_ERROR3, "! this=0x%08x; DoLoad returned %d", (TUint)this, err);)
+ }
+ else
+ {
+ RFile file;
+ err = file.Open(iFbs->FileServer(),aFileName,EFileShareReadersOnly);
+ if (err==KErrNone)
+ {
+ err = DoLoad(file,aId,aShareIfLoaded,aFileOffset);
+ FBS_OST_IF(err!=KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_LOAD2_ERROR4, "! this=0x%08x; DoLoad returned %d", (TUint)this, err);)
+ }
+ file.Close();
+ }
+ }
+ }
+ FBS_OST(OstTraceExt2( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOAD2_EXIT, "< this=0x%08x; err=%d", (TUint)this, err);)
return err;
}
@@ -532,7 +615,10 @@
*/
EXPORT_C TInt CFbsBitmap::LoadAndCompress(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded)
{
- return LoadAndCompress(aFileName, aId, aShareIfLoaded, 0);
+ FBS_OST(OstTraceExt4( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOADANDCOMPRESS_ENTRY, "> this=0x%08x; file=%S; id=0x%08x; share=%d", (TUint)this, aFileName, aId, aShareIfLoaded);)
+ TInt ret = LoadAndCompress(aFileName, aId, aShareIfLoaded, 0);
+ FBS_OST(OstTraceExt2( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOADANDCOMPRESS_EXIT, "< this=0x%08x; err=%d", (TUint)this, ret);)
+ return ret;
}
/** Loads and compresses a specific bitmap from a multi-bitmap file.
@@ -549,12 +635,15 @@
@released
*/
EXPORT_C TInt CFbsBitmap::LoadAndCompress(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset)
- {
+ {
+ FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOADANDCOMPRESS2_ENTRY, "> this=0x%08x; file=%S, id=0x%08x; share=%d; off=%d", (TUint)this, aFileName, aId, aShareIfLoaded, aFileOffset);)
TInt err = Load(aFileName,aId,aShareIfLoaded,aFileOffset);
if (err == KErrNone)
{
err = !(iFlags & EIsRomBitmap) ? Compress() : KErrAccessDenied;
+ FBS_OST_IF(err!=KErrNone, OstTraceExt3( TRACE_ERROR, CFBSBITMAP_LOADANDCOMPRESS2_ERROR, "! this=0x%08x; iFlags=0x%08x; err=%d", (TUint)this, (TUint)iFlags, err);)
}
+ FBS_OST(OstTraceExt2( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOADANDCOMPRESS2_EXIT, "< this=0x%08x; err=%d", (TUint)this, err);)
return err;
}
@@ -1151,7 +1240,7 @@
CBitwiseBitmap* bitmap = CleanAddress();
if (bitmap==NULL)
{
- return EFalse;
+ return EFalse;
}
return bitmap->IsCompressedInRAM();
}
@@ -1250,10 +1339,16 @@
*/
EXPORT_C void CFbsBitmap::BeginDataAccess() const
{
- if (!iHandle)
- return;
- (void)CleanAddress(); //called for side-effect to make sure bitmap reference is current. Should be low overhead.
- const_cast<CFbsBitmap*>(this)->iUseCount++;
+ FBS_OST_VERBOSE(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_BEGINDATAACCESS_ENTRY, "> this=0x%08x;", (TUint)this););
+ FBS_OST_IF(!iHandle, OstTrace1(TRACE_ERROR, CFBSBITMAP_BEGINDATAACCESS_ERROR, "! this=0x%08x; !iHandle", (TUint)this););
+
+ if (iHandle)
+ {
+ (void)CleanAddress(); //called for side-effect to make sure bitmap reference is current. Should be low overhead.
+ const_cast<CFbsBitmap*>(this)->iUseCount++;
+ }
+
+ FBS_OST_VERBOSE(OstTraceExt2(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_BEGINDATAACCESS_EXIT, "< this=0x%08x; iUseCount=%d;", (TUint)this, const_cast<CFbsBitmap*>(this)->iUseCount);)
}
/** Marks the end of direct access to the bitmap data.
@@ -1271,11 +1366,17 @@
*/
EXPORT_C void CFbsBitmap::EndDataAccess(TBool aReadOnly) const
{
- if (!iHandle)
- return;
- const_cast<CFbsBitmap*>(this)->iUseCount--;
- if (!aReadOnly && !(iFlags & EIsReadOnlyBitmapMask))
- User::LockedInc(iAddressPointer->Extra()->iTouchCount);
+ FBS_OST_VERBOSE(OstTraceExt2(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_ENDDATAACCESS_ENTRY, "> this=0x%08x; aReadOnly=%d;", (TUint)this, (TUint)aReadOnly);)
+ FBS_OST_IF(!iHandle, OstTrace1(TRACE_ERROR, CFBSBITMAP_ENDDATAACCESS_ERROR, "! this=0x%08x; !iHandle", (TUint)this););
+ if (iHandle)
+ {
+ const_cast<CFbsBitmap*>(this)->iUseCount--;
+ if (!aReadOnly && !(iFlags & EIsReadOnlyBitmapMask))
+ {
+ User::LockedInc(iAddressPointer->Extra()->iTouchCount);
+ }
+ }
+ FBS_OST_VERBOSE(OstTraceExt2(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_ENDDATAACCESS_EXIT, "< this=0x%08x; iUseCount=%d;", (TUint)this, const_cast<CFbsBitmap*>(this)->iUseCount);)
}
/** Locks the global bitmap heap.
@@ -1299,12 +1400,12 @@
*/
EXPORT_C void CFbsBitmap::LockHeap(TBool /*aAlways*/) const
{
+ FBS_OST(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_LOCKHEAP_ENTRY, "> this=0x%08x;", (TUint)this);)
BeginDataAccess();
#ifdef SYMBIAN_DEBUG_FBS_LOCKHEAP
//These debug checks now refer to the cleaned data address
- if (!iHandle)
- return;
- if (!(iFlags & EIsRomBitmap)) // can't do anything with ROM bitmaps
+ FBS_OST_IF(!iHandle, OstTrace1(TRACE_ERROR, CFBSBITMAP_LOCKHEAP_ERROR, "! this=0x%08x; !iHandle", (TUint)this););
+ if (iHandle && !(iFlags & EIsRomBitmap)) // can't do anything with ROM bitmaps
{
TThreadId threadId = RThread().Id();
iFbs->iHelper->iDebugMutex.Wait();
@@ -1318,6 +1419,7 @@
iFbs->iHelper->iDebugMutex.Signal();
}
#endif
+ FBS_OST(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_LOCKHEAP_EXIT, "< this=0x%08x;", (TUint)this);)
}
/** Unlocks the global heap.
@@ -1332,21 +1434,25 @@
*/
EXPORT_C void CFbsBitmap::UnlockHeap(TBool /*aAlways*/) const
{
+ FBS_OST(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_UNLOCKHEAP_ENTRY, "> this=0x%08x;", (TUint)this);)
+ FBS_OST_IF(!iHandle, OstTrace1(TRACE_ERROR, CFBSBITMAP_UNLOCKHEAP_ERROR, "! this=0x%08x; !iHandle", (TUint)this););
+ if (iHandle)
+ {
#ifdef SYMBIAN_DEBUG_FBS_LOCKHEAP
- if (!iHandle)
- return;
- if (!(iFlags & EIsRomBitmap)) // can't do anything with ROM bitmaps
- {
- TThreadId threadId = RThread().Id();
- iFbs->iHelper->iDebugMutex.Wait();
- __ASSERT_ALWAYS(iAddressPointer->Extra()->iLockCount > 0, Panic(EFbsPanicBadHeapLock));
- __ASSERT_ALWAYS(iAddressPointer->Extra()->iThreadId == threadId, Panic(EFbsPanicBadHeapLock));
- if (--iAddressPointer->Extra()->iLockCount == 0)
- iAddressPointer->Extra()->iThreadId = TThreadId(KNullThreadId);
- iFbs->iHelper->iDebugMutex.Signal();
- }
+ if (!(iFlags & EIsRomBitmap)) // can't do anything with ROM bitmaps
+ {
+ TThreadId threadId = RThread().Id();
+ iFbs->iHelper->iDebugMutex.Wait();
+ __ASSERT_ALWAYS(iAddressPointer->Extra()->iLockCount > 0, Panic(EFbsPanicBadHeapLock));
+ __ASSERT_ALWAYS(iAddressPointer->Extra()->iThreadId == threadId, Panic(EFbsPanicBadHeapLock));
+ if (--iAddressPointer->Extra()->iLockCount == 0)
+ iAddressPointer->Extra()->iThreadId = TThreadId(KNullThreadId);
+ iFbs->iHelper->iDebugMutex.Signal();
+ }
#endif
- EndDataAccess();
+ EndDataAccess();
+ }
+ FBS_OST(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_UNLOCKHEAP_EXIT, "< this=0x%08x;", (TUint)this);)
}
/** Locks the global bitmap heap, leaving on the clean-up stack a pointer
@@ -1362,14 +1468,18 @@
*/
EXPORT_C void CFbsBitmap::LockHeapLC(TBool /*aAlways*/) const
{
- LockHeap();
+ FBS_OST(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_LOCKHEAPLC_ENTRY, "> this=0x%08x;", (TUint)this);)
+ LockHeap();
TCleanupItem cleanitem(CFbsBitmap::UnlockHeap, (TAny*)this);
CleanupStack::PushL(cleanitem);
+ FBS_OST(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_LOCKHEAPLC_EXIT, "< this=0x%08x;", (TUint)this);)
}
EXPORT_C void CFbsBitmap::UnlockHeap(TAny* aFbsBitmap)
{
- ((CFbsBitmap*)aFbsBitmap)->UnlockHeap();
+ FBS_OST(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_UNLOCKHEAP2_ENTRY, "> bitmap=0x%08x;", (TUint)aFbsBitmap);)
+ ((CFbsBitmap*)aFbsBitmap)->UnlockHeap();
+ FBS_OST(OstTrace0(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_UNLOCKHEAP2_EXIT, "<");)
}
/** Tests whether the bitmap is volatile.
@@ -1398,7 +1508,7 @@
EXPORT_C TInt CFbsBitmap::TouchCount() const
{
if (!iHandle || (iFlags & EIsReadOnlyBitmapMask))
- return 0; // A read-only bitmap can never be touched.
+ return 0; // A read-only bitmap can never be touched.
return CleanAddress()->Extra()->iTouchCount;
}
@@ -1723,7 +1833,12 @@
*/
EXPORT_C TInt CFbsBitmap::Load(RFile& aFile,TInt32 aId/*=0*/,TBool aShareIfLoaded/*=ETrue*/)
{
- return Load(aFile,aId,aShareIfLoaded,0);
+ FBS_OST(TFullName fileName;)
+ FBS_OST(aFile.FullName(fileName);)
+ FBS_OST(OstTraceExt4( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOAD3_ENTRY, "> this=0x%08x; file=%S; id=0x%08x; share=%d", (TUint)this, fileName, aId, aShareIfLoaded);)
+ TInt ret = Load(aFile,aId,aShareIfLoaded,0);
+ FBS_OST(OstTraceExt2( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOAD3_EXIT, "< this=0x%08x, ret=%d", (TUint)this, ret);)
+ return ret;
}
/** Loads a specific bitmap from an opened multi-bitmap file handle.
@@ -1739,19 +1854,29 @@
*/
EXPORT_C TInt CFbsBitmap::Load(RFile& aFile,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset)
{
+ TInt err = KErrNone;
+ FBS_OST(TFullName fileName;)
+ FBS_OST(aFile.FullName(fileName);)
+ FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOAD4_ENTRY, "> this=0x%08x; file=%S; id=0x%08x; share=%d; off=%d", (TUint)this, fileName, aId, aShareIfLoaded, aFileOffset);)
if (!iFbs)
{
- return(KErrCouldNotConnect);
+ FBS_OST(OstTrace1( TRACE_ERROR, CFBSBITMAP_LOAD4_ERROR, "! this=0x%08x; !iFbs", (TUint)this);)
+ err = KErrCouldNotConnect;
}
- Reset();
- TUint32* rompointer;
- IsFileInRom(aFile,rompointer);
- TBool romPointerValid;
- TInt err = DoLoadFromRom(rompointer, aId, aFileOffset, romPointerValid);
- if (!romPointerValid)
- {
- err = DoLoad(aFile,aId,aShareIfLoaded,aFileOffset);
- }
+ else
+ {
+ Reset();
+ TUint32* rompointer;
+ IsFileInRom(aFile,rompointer);
+ TBool romPointerValid;
+ err = DoLoadFromRom(rompointer, aId, aFileOffset, romPointerValid);
+ if (!romPointerValid)
+ {
+ err = DoLoad(aFile,aId,aShareIfLoaded,aFileOffset);
+ FBS_OST_IF(err!=KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_LOAD4_ERROR2, "! this=0x%08x; DoLoad() returned %d", (TUint)this, err);)
+ }
+ }
+ FBS_OST(OstTraceExt2( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOAD4_EXIT, "< this=0x%08x; err=%d", (TUint)this, err);)
return err;
}
@@ -1769,7 +1894,12 @@
*/
EXPORT_C TInt CFbsBitmap::LoadAndCompress(RFile& aFile,TInt32 aId/*=0*/,TBool aShareIfLoaded/*=ETrue*/)
{
- return LoadAndCompress(aFile,aId,aShareIfLoaded,0);
+ FBS_OST(TFullName fileName;)
+ FBS_OST(aFile.FullName(fileName);)
+ FBS_OST(OstTraceExt4( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOADANDCOMPRESS3_ENTRY, "> this=0x%08x; file=%S; id=0x%08x; share=%d", (TUint)this, fileName, aId, aShareIfLoaded);)
+ TInt ret = LoadAndCompress(aFile,aId,aShareIfLoaded,0);
+ FBS_OST(OstTraceExt2( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOADANDCOMPRESS3_EXIT, "< this=0x%08x; ret=%d", (TUint)this, ret);)
+ return ret;
}
/** Loads and compresses a specific bitmap from an opened multi-bitmap file handle.
@@ -1787,11 +1917,24 @@
*/
EXPORT_C TInt CFbsBitmap::LoadAndCompress(RFile& aFile,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset)
{
+ FBS_OST(TFullName fileName;)
+ FBS_OST(aFile.FullName(fileName);)
+ FBS_OST(OstTraceExt4( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOADANDCOMPRESS4_ENTRY, "> this=0x%08x; file=%S; id=0x%08x; share=%d", (TUint)this, fileName, aId, aShareIfLoaded);)
TInt err = Load(aFile,aId,aShareIfLoaded,aFileOffset);
if (err == KErrNone)
{
- err = !(iFlags & EIsRomBitmap) ? Compress() : KErrAccessDenied;
+ if (!(iFlags & EIsRomBitmap))
+ {
+ err = Compress();
+ FBS_OST_IF(err!=KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_LOADANDCOMPRESS4_ERROR, "! this=0x%08x; Compress() returned %d", (TUint)this, err);)
+ }
+ else
+ {
+ err = KErrAccessDenied;
+ FBS_OST(OstTraceExt2( TRACE_ERROR, CFBSBITMAP_LOADANDCOMPRESS4_ERROR2, "! this=0x%08x; Cannot compress bitmap in ROM; iFlags=0x%08x", (TUint)this, (TUint)iFlags);)
+ }
}
+ FBS_OST(OstTraceExt2( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOADANDCOMPRESS4_EXIT, "< this=0x%08x; err=%d", (TUint)this, err);)
return err;
}
@@ -1908,15 +2051,22 @@
*/
EXPORT_C TInt CFbsBitmap::CreateExtendedBitmap(const TSize& aSizeInPixels, TDisplayMode aDispMode, TUid aType, const TAny* aData, TInt aDataSize)
{
+ TInt err;
+ FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_CREATEEXTENDEDBITMAP_ENTRY, "> this=0x%08x; w=%d; h=%d; dm=%d; type=0x%08x", (TUint)this, aSizeInPixels.iWidth, aSizeInPixels.iHeight, aDispMode, aType.iUid);)
if (!aData || aDataSize == 0)
{
- return KErrArgument;
+ FBS_OST(OstTrace1( TRACE_ERROR, CFBSBITMAP_CREATEEXTENDEDBITMAP_ERROR, "! this=0x%08x; (!aData || aDataSize == 0)", (TUint)this);)
+ err = KErrArgument;
}
- TInt err = DoCreate(aSizeInPixels, aDispMode, aType, aDataSize);
- if (err == KErrNone)
- {
- Mem::Copy(iFbs->iLargeBitmapChunk.Base() + iAddressPointer->iDataOffset, aData, aDataSize);
- }
+ else
+ {
+ err = DoCreate(aSizeInPixels, aDispMode, aType, aDataSize);
+ if (err == KErrNone)
+ {
+ Mem::Copy(iFbs->iLargeBitmapChunk.Base() + iAddressPointer->iDataOffset, aData, aDataSize);
+ }
+ }
+ FBS_OST(OstTraceExt4( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_CREATEEXTENDEDBITMAP_EXIT, "< this=0x%08x; err=%d; iH=0x%08x; iSH=0x%08x", (TUint)this, err, iHandle, iServerHandle);)
return err;
}
@@ -1960,19 +2110,26 @@
*/
EXPORT_C TInt CFbsBitmap::CreateExtendedBitmap(const TSize& aSizeInPixels, TDisplayMode aDispMode, TUid aType, TInt aDataSize, MFbsExtendedBitmapInitializer& aInitializer)
{
+ TInt err;
+ FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_CREATEEXTENDEDBITMAP2_ENTRY, "> this=0x%08x; w=%d; h=%d; dm=%d; type=0x%08x;", (TUint)this, aSizeInPixels.iWidth, aSizeInPixels.iHeight, aDispMode, aType.iUid);)
if (aDataSize == 0)
{
- return KErrArgument;
+ FBS_OST(OstTrace1( TRACE_ERROR, CFBSBITMAP_CREATEEXTENDEDBITMAP2_ERROR, "! this=0x%08x; aDataSize == 0", (TUint)this);)
+ err = KErrArgument;
}
- TInt err = DoCreate(aSizeInPixels, aDispMode, aType, aDataSize);
- if (err == KErrNone)
- {
- err = aInitializer.InitExtendedBitmap(iFbs->iLargeBitmapChunk.Base() + iAddressPointer->iDataOffset, aDataSize);
- if (err != KErrNone)
- {
- Reset();
- }
- }
+ else
+ {
+ err = DoCreate(aSizeInPixels, aDispMode, aType, aDataSize);
+ if (err == KErrNone)
+ {
+ err = aInitializer.InitExtendedBitmap(iFbs->iLargeBitmapChunk.Base() + iAddressPointer->iDataOffset, aDataSize);
+ if (err != KErrNone)
+ {
+ Reset();
+ }
+ }
+ }
+ FBS_OST(OstTraceExt4( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_CREATEEXTENDEDBITMAP2_EXIT, "< this=0x%08x; err=%d; iH=0x%08x; iSH=0x%08x", (TUint)this, err, iHandle, iServerHandle);)
return err;
}