# HG changeset patch # User srilekhas # Date 1282663075 -3600 # Node ID b042127c80f6965b36cb62e8b9332512b9c33932 # Parent 314cdf9664069bebd921c6a11b8805e55fec00fc# Parent 57c618273d5cb3b4376f70197b77a02ccc2aea11 Merge RCL_3 fixes with latest delivery. diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/bwins/FBSCLI2U.DEF --- a/fbs/fontandbitmapserver/bwins/FBSCLI2U.DEF Fri Aug 06 17:05:55 2010 +0100 +++ b/fbs/fontandbitmapserver/bwins/FBSCLI2U.DEF Tue Aug 24 16:17:55 2010 +0100 @@ -229,4 +229,19 @@ ?CreateExtendedBitmap@CFbsBitmap@@QAEHABVTSize@@W4TDisplayMode@@VTUid@@PBXH@Z @ 228 NONAME ; int CFbsBitmap::CreateExtendedBitmap(class TSize const &, enum TDisplayMode, class TUid, void const *, int) ?UpdateLinkedTypeface@CFbsTypefaceStore@@QAEHABVCLinkedTypefaceSpecification@@@Z @ 229 NONAME ; int CFbsTypefaceStore::UpdateLinkedTypeface(class CLinkedTypefaceSpecification const &) ?GetExtraBuffer@CFbsBitmap@@SAPAVHBufC8@@H@Z @ 230 NONAME ; class HBufC8 * CFbsBitmap::GetExtraBuffer(int) + ?Rect@RFbsGlyphDataIterator@@QBEABVTRect@@XZ @ 231 NONAME ABSENT ; class TRect const & RFbsGlyphDataIterator::Rect(void) const + ?Image@RFbsGlyphDataIterator@@QBEABVRSgImage@@XZ @ 232 NONAME ABSENT ; class RSgImage const & RFbsGlyphDataIterator::Image(void) const + ??0RFbsGlyphMetricsArray@@QAE@XZ @ 233 NONAME ABSENT ; RFbsGlyphMetricsArray::RFbsGlyphMetricsArray(void) + ?Count@RFbsGlyphMetricsArray@@QBEHXZ @ 234 NONAME ABSENT ; int RFbsGlyphMetricsArray::Count(void) const + ?Next@RFbsGlyphDataIterator@@QAEHXZ @ 235 NONAME ABSENT ; int RFbsGlyphDataIterator::Next(void) + ?Metrics@RFbsGlyphDataIterator@@QBEABVTOpenFontCharMetrics@@XZ @ 236 NONAME ABSENT ; class TOpenFontCharMetrics const & RFbsGlyphDataIterator::Metrics(void) const + ?Close@RFbsGlyphMetricsArray@@QAEXXZ @ 237 NONAME ABSENT ; void RFbsGlyphMetricsArray::Close(void) + ??0RFbsGlyphDataIterator@@QAE@XZ @ 238 NONAME ABSENT ; RFbsGlyphDataIterator::RFbsGlyphDataIterator(void) + ??ARFbsGlyphMetricsArray@@QBEABVTOpenFontCharMetrics@@H@Z @ 239 NONAME ABSENT ; class TOpenFontCharMetrics const & RFbsGlyphMetricsArray::operator[](int) const + ?GlyphCode@RFbsGlyphDataIterator@@QBEIXZ @ 240 NONAME ABSENT ; unsigned int RFbsGlyphDataIterator::GlyphCode(void) const + ?Close@RFbsGlyphDataIterator@@QAEXXZ @ 241 NONAME ABSENT ; void RFbsGlyphDataIterator::Close(void) + ?Get@RFbsGlyphMetricsArray@@QAEHAAVCFbsFont@@PBIH@Z @ 242 NONAME ABSENT ; int RFbsGlyphMetricsArray::Get(class CFbsFont &, unsigned int const *, int) + ?Open@RFbsGlyphDataIterator@@QAEHAAVCFbsFont@@PBIH@Z @ 243 NONAME ABSENT ; int RFbsGlyphDataIterator::Open(class CFbsFont &, unsigned int const *, int) + ?GetGlyphCacheMetrics@RFbsSession@@QAEHAAVTGlyphCacheMetrics@@@Z @ 244 NONAME ABSENT ; int RFbsSession::GetGlyphCacheMetrics(class TGlyphCacheMetrics &) + diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/bwins/fbservu.def --- a/fbs/fontandbitmapserver/bwins/fbservu.def Fri Aug 06 17:05:55 2010 +0100 +++ b/fbs/fontandbitmapserver/bwins/fbservu.def Tue Aug 24 16:17:55 2010 +0100 @@ -1,4 +1,5 @@ EXPORTS ?KFbServSharedHeapMaxSize@@3HB @ 1 NONAME ; int const KFbServSharedHeapMaxSize ?KFbServWritableDataPagingMode@@3HB @ 2 NONAME ; int const KFbServWritableDataPagingMode + ?KFbServGlyphAtlasCacheLimit@@3HB @ 3 NONAME ABSENT ; int const KFbServGlyphAtlasCacheLimit diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/eabi/FBSCLI2U.DEF --- a/fbs/fontandbitmapserver/eabi/FBSCLI2U.DEF Fri Aug 06 17:05:55 2010 +0100 +++ b/fbs/fontandbitmapserver/eabi/FBSCLI2U.DEF Tue Aug 24 16:17:55 2010 +0100 @@ -264,4 +264,20 @@ _ZNK10CFbsBitmap8DataSizeEv @ 263 NONAME _ZN17CFbsTypefaceStore20UpdateLinkedTypefaceERK28CLinkedTypefaceSpecification @ 264 NONAME _ZN10CFbsBitmap14GetExtraBufferEi @ 265 NONAME - + _ZN21RFbsGlyphDataIterator4NextEv @ 266 NONAME ABSENT + _ZN21RFbsGlyphDataIterator4OpenER8CFbsFontPKji @ 267 NONAME ABSENT + _ZN21RFbsGlyphDataIterator5CloseEv @ 268 NONAME ABSENT + _ZN21RFbsGlyphDataIteratorC1Ev @ 269 NONAME ABSENT + _ZN21RFbsGlyphDataIteratorC2Ev @ 270 NONAME ABSENT + _ZN21RFbsGlyphMetricsArray3GetER8CFbsFontPKji @ 271 NONAME ABSENT + _ZN21RFbsGlyphMetricsArray5CloseEv @ 272 NONAME ABSENT + _ZN21RFbsGlyphMetricsArrayC1Ev @ 273 NONAME ABSENT + _ZN21RFbsGlyphMetricsArrayC2Ev @ 274 NONAME ABSENT + _ZNK21RFbsGlyphDataIterator4RectEv @ 275 NONAME ABSENT + _ZNK21RFbsGlyphDataIterator5ImageEv @ 276 NONAME ABSENT + _ZNK21RFbsGlyphDataIterator7MetricsEv @ 277 NONAME ABSENT + _ZNK21RFbsGlyphDataIterator9GlyphCodeEv @ 278 NONAME ABSENT + _ZNK21RFbsGlyphMetricsArray5CountEv @ 279 NONAME ABSENT + _ZNK21RFbsGlyphMetricsArrayixEi @ 280 NONAME ABSENT + _ZN11RFbsSession20GetGlyphCacheMetricsER18TGlyphCacheMetrics @ 281 NONAME ABSENT + diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/eabi/fbservu.def --- a/fbs/fontandbitmapserver/eabi/fbservu.def Fri Aug 06 17:05:55 2010 +0100 +++ b/fbs/fontandbitmapserver/eabi/fbservu.def Tue Aug 24 16:17:55 2010 +0100 @@ -1,4 +1,5 @@ EXPORTS KFbServSharedHeapMaxSize @ 1 NONAME DATA 4 KFbServWritableDataPagingMode @ 2 NONAME DATA 4 - + KFbServGlyphAtlasCacheLimit @ 3 NONAME ABSENT + diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/group/FBSCLI.MMP --- a/fbs/fontandbitmapserver/group/FBSCLI.MMP Fri Aug 06 17:05:55 2010 +0100 +++ b/fbs/fontandbitmapserver/group/FBSCLI.MMP Tue Aug 24 16:17:55 2010 +0100 @@ -28,6 +28,7 @@ SOURCEPATH ../sfbs userinclude ../inc +userinclude ../traces_FBSCLI OS_LAYER_SYSTEMINCLUDE_SYMBIAN diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/group/FBSERV.MMP --- a/fbs/fontandbitmapserver/group/FBSERV.MMP Fri Aug 06 17:05:55 2010 +0100 +++ b/fbs/fontandbitmapserver/group/FBSERV.MMP Tue Aug 24 16:17:55 2010 +0100 @@ -1,4 +1,4 @@ -// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 1998-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" @@ -22,7 +22,7 @@ // Default stack size(8K) is too small and causes stack overflow // in the hardware test udeb EPOCSTACKSIZE 16384 -EPOCHEAPSIZE 0x10000 0x200000 +EPOCHEAPSIZE 0x10000 0x400000 target fbserv.exe @@ -35,6 +35,7 @@ userinclude ../inc userinclude ../sfbs +userinclude ../traces_FBSERV OS_LAYER_SYSTEMINCLUDE_SYMBIAN OS_LAYER_ESTLIB_SYSTEMINCLUDE diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/inc/FBS.H --- a/fbs/fontandbitmapserver/inc/FBS.H Fri Aug 06 17:05:55 2010 +0100 +++ b/fbs/fontandbitmapserver/inc/FBS.H Tue Aug 24 16:17:55 2010 +0100 @@ -338,6 +338,8 @@ TInt DoLoadFromRom(TUint32* aRomPointer, TInt32 aId, TUint aFileOffset, TBool& aRomPointerValid); TBool LoadShiftedRomBmpL(const TDesC& aFileName,TInt32 aId,TUint aFileOffset); static void DoStoreL(CDirectFileStore* aFileStore,CFbsBitmap* aBitmap,TInt aNumSources,const TDesC* aSources[],TInt32 aSourceIds[]); + TInt DuplicateInRom(TInt aBitmapHandle); + TInt DuplicateInRam(TInt aBitmapHandle); protected: /** WARNING: For internal use ONLY. Compatibility is not guaranteed in future releases. */ diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/sfbs/FBSBMP.CPP --- a/fbs/fontandbitmapserver/sfbs/FBSBMP.CPP Fri Aug 06 17:05:55 2010 +0100 +++ b/fbs/fontandbitmapserver/sfbs/FBSBMP.CPP Tue Aug 24 16:17:55 2010 +0100 @@ -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 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 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(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(this)->iUseCount++; + } + + FBS_OST_VERBOSE(OstTraceExt2(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_BEGINDATAACCESS_EXIT, "< this=0x%08x; iUseCount=%d;", (TUint)this, const_cast(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(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(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(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; } diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/sfbs/FBSCLI.CPP --- a/fbs/fontandbitmapserver/sfbs/FBSCLI.CPP Fri Aug 06 17:05:55 2010 +0100 +++ b/fbs/fontandbitmapserver/sfbs/FBSCLI.CPP Tue Aug 24 16:17:55 2010 +0100 @@ -21,6 +21,12 @@ #include "BackGroundCompression.h" #include #include +#include "OstTraceDefinitions.h" +#include "fbstrace.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "FBSCLITraces.h" +#endif + /** Helper function for converting a pointer to an offset from the passed heap base. Use OffsetToPointer() to convert the returned offset back to a @@ -210,6 +216,7 @@ iIx->Remove(localhandle); iResourceCount--; aMessage.Complete(KErrNone); + FBS_OST(OstTraceExt3( GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS, CFBCLIENT_SERVICEL_INFO, "# Server resource destroyed; iSSH=0x%08x; rc=%d; iH=0x%08x;", iSessionHandle, iResourceCount, localhandle);) #ifdef _DEBUG iRet=KErrNone; #endif @@ -399,6 +406,7 @@ // success iResourceCount++; + FBS_OST(OstTraceExt3( GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS, CFBCLIENT_HANDLEMESGFONTDUPLICATE_INFO, "# Server font duplicated; iSSH=0x%08x; rc=%d; iH=0x%08x;", iSessionHandle, iResourceCount, localhandle);) return KErrNone; } @@ -488,6 +496,7 @@ } // success iResourceCount++; + FBS_OST(OstTraceExt3( GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS, CFBCLIENT_COPYFONTINFOINTORETURNMESSAGE_INFO, "# Server font duplicated; iSSH=0x%08x; rc=%d; iH=0x%08x;", iSessionHandle, iResourceCount, localhandle);) return KErrNone; } @@ -971,6 +980,7 @@ bmpptr->Close(); break; } + bmpSpec.iHandle=localhandle; bmpSpec.iServerHandle = bmpptr->Handle(); bmpSpec.iAddressOffset=TInt(bmpptr->Address())-TopLevelStore()->HeapBase(); @@ -982,6 +992,7 @@ return; } iResourceCount++; + FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS, CFBCLIENT_PROCBITMAPMESSAGE_INFO, "# Server bitmap created; iSSH=0x%08x; rc=%d; iH=0x%08x; iSH=0x%08x; bytes=%d;", iSessionHandle, iResourceCount, bmpSpec.iHandle, bmpSpec.iServerHandle, bmpptr->Address()->DataStride() * bmpSpec.iSizeInPixels.iHeight);) break; } @@ -1089,6 +1100,7 @@ return; } iResourceCount++; + FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS, CFBCLIENT_PROCBITMAPMESSAGE_INFO2, "# Server bitmap loaded; iSSH=0x%08x; rc=%d; iH=0x%08x; iSH=0x%08x; bytes=%d;", iSessionHandle, iResourceCount, handlebuffer().iHandle, handlebuffer().iServerHandle, bmpptr->Address()->DataStride() * bmpptr->Address()->SizeInPixels().iHeight);) break; } case EFbsMessBitmapResize: @@ -1158,6 +1170,7 @@ aMessage.Panic(KFBSERVPanicCategory, ret); return; } + FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS, CFBCLIENT_PROCBITMAPMESSAGE_INFO4, "# Server bitmap resized; iSSH=0x%08x; iOldH=0x%08x; iNewH=0x%08x; iNewSH=0x%08x; newbytes=%d;", iSessionHandle, localhandle, newlocalhandle, newbmpptr->Handle(), newbmpptr->Address()->DataStride() * newsize.iHeight);) break; } case EFbsMessBitmapDuplicate: @@ -1192,6 +1205,7 @@ return; } iResourceCount++; + FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS, CFBCLIENT_PROCBITMAPMESSAGE_INFO3, "# Server bitmap duplicated; iSSH=0x%08x; rc=%d; iH=0x%08x; iSH=0x%08x; bytes=%d;", iSessionHandle, iResourceCount, handlebuffer().iHandle, handlebuffer().iServerHandle, bmpptr->Address()->DataStride() * bmpptr->Address()->SizeInPixels().iHeight);) break; } case EFbsMessBitmapCompress: @@ -1253,6 +1267,7 @@ aMessage.Panic(KFBSERVPanicCategory, ret); return; } + FBS_OST(OstTraceExt4( GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS, CFBCLIENT_PROCBITMAPMESSAGE_INFO5, "# Server bitmap compressed; iSSH=0x%08x; iOldH=0x%08x; iNewH=0x%08x; iNewSH=0x%08x;", (TUint)iSessionHandle, localhandle, newlocalhandle, handlebuffer().iServerHandle);) break; } case EFbsMessBitmapBgCompress: @@ -1320,6 +1335,7 @@ aMessage.Panic(KFBSERVPanicCategory, ret); return; } + FBS_OST(OstTraceExt3( GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS, CFBCLIENT_PROCBITMAPMESSAGE_INFO6, "# Server bitmap cleaned; iSSH=0x%08x; iOldH=0x%08x; iNewH=0x%08x;", iSessionHandle, localhandle, cleanlocalhandle);) break; } case EFbsGetAllBitmapHandles: diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/sfbs/SESSION.CPP --- a/fbs/fontandbitmapserver/sfbs/SESSION.CPP Fri Aug 06 17:05:55 2010 +0100 +++ b/fbs/fontandbitmapserver/sfbs/SESSION.CPP Tue Aug 24 16:17:55 2010 +0100 @@ -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" @@ -20,6 +20,12 @@ #include "FbsRalc.h" #include "fbshelper.h" #include "fbsmessage.h" +#include "OstTraceDefinitions.h" +#include "fbstrace.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "SESSIONTraces.h" +#endif + GLDEF_C void Panic(TFbsPanic aPanic) { @@ -90,16 +96,33 @@ */ EXPORT_C TInt RFbsSession::Connect(RFs& aFileServer) { + TInt ret = KErrNone; RFbsSession* thisptr = (RFbsSession*)Dll::Tls(); + FBS_OST(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, RFBSSESSION_CONNECT_ENTRY, "> this=0x%08x;", (TUint)thisptr);) if(thisptr) { thisptr->iConnections++; - return KErrNone; + FBS_OST(OstTraceExt2(GRAPHICS_CONTROL_SEMANTICS, RFBSSESSION_CONNECT_INFO, "# Connected to existing session; this=0x%08x; iConnections=%d;", (TInt)thisptr, thisptr->iConnections);) } - TInt ret = RFbsSession::DoAlloc(thisptr); - if(ret!=KErrNone) - return ret; - return thisptr->DoConnect(aFileServer); + else + { + ret = RFbsSession::DoAlloc(thisptr); + if(ret!=KErrNone) + { + FBS_OST(OstTrace1(TRACE_ERROR, RFBSSESSION_CONNECT_ERROR, "! DoAlloc returned %d", ret);) + } + else + { + ret = thisptr->DoConnect(aFileServer); + if(ret!=KErrNone) + { + FBS_OST(OstTraceExt2(TRACE_ERROR, RFBSSESSION_CONNECT_ERROR2, "! this=0x%08x; DoConnect returned %d", (TInt)thisptr, ret);) + } + } + } + + FBS_OST(OstTraceExt2(GRAPHICS_CONTROL_FUNCTIONS, RFBSSESSION_CONNECT_EXIT, "< this=0x%08x; ret=%d", (TUint)thisptr, ret);) + return ret; } /** Creates a session with the Font and Bitmap server. @@ -110,22 +133,40 @@ */ EXPORT_C TInt RFbsSession::Connect() { + TInt ret = KErrNone; RFbsSession* thisptr = (RFbsSession*)Dll::Tls(); + FBS_OST(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, RFBSSESSION_CONNECT2_ENTRY, "> this=0x%08x;", (TUint)thisptr);) if(thisptr) { thisptr->iConnections++; - return KErrNone; + FBS_OST(OstTraceExt2(GRAPHICS_CONTROL_SEMANTICS, RFBSSESSION_CONNECT2_INFO, "# Connected to existing session; this=0x%08x; iConnections=%d;", (TInt)thisptr, thisptr->iConnections);) } - TInt ret = RFbsSession::DoAlloc(thisptr); - if (ret!=KErrNone) - return ret; - ret = thisptr->iFileServer.Connect(); - if(ret!=KErrNone) - { - thisptr->Disconnect(); - return ret; - } - return thisptr->DoConnect(thisptr->iFileServer); + else + { + TInt ret = RFbsSession::DoAlloc(thisptr); + if (ret!=KErrNone) + { + FBS_OST(OstTrace1(TRACE_ERROR, RFBSSESSION_CONNECT2_ERROR, "! DoAlloc returned %d", ret);) + goto end; + } + + ret = thisptr->iFileServer.Connect(); + if(ret!=KErrNone) + { + thisptr->Disconnect(); + FBS_OST(OstTraceExt2(TRACE_ERROR, RFBSSESSION_CONNECT2_ERROR2, "! this=0x%08x; RFs::Connect() returned %d", (TInt)thisptr, ret);) + goto end; + } + + ret = thisptr->DoConnect(thisptr->iFileServer); + if(ret!=KErrNone) + { + FBS_OST(OstTraceExt2(TRACE_ERROR, RFBSSESSION_CONNECT2_ERROR3, "! this=0x%08x; DoConnect returned %d", (TInt)thisptr, ret);) + } + } +end: + FBS_OST(OstTraceExt2(GRAPHICS_CONTROL_FUNCTIONS, RFBSSESSION_CONNECT2_EXIT, "< this=0x%08x; ret=%d", (TUint)thisptr, ret);) + return ret; } /** Closes the session with the Font and Bitmap server. @@ -135,35 +176,41 @@ EXPORT_C void RFbsSession::Disconnect() { RFbsSession* thisptr=(RFbsSession*)Dll::Tls(); - if(thisptr==NULL) return; - if(thisptr->iConnections>0) - { - thisptr->iCallBack.iPtr=NULL; - thisptr->iCallBack.CallBack(); - // Destructor of CFbsSessionHelper may call SendCommand to cancel an - // outstanding request, therefore destruction must be done before - // iConnections is 0 to avoid an assertion going off. - if(thisptr->iConnections==1) - { - delete thisptr->iHelper; - } - thisptr->iConnections--; - } - if(thisptr->iConnections==0) - { - thisptr->iSharedChunk.Close(); - thisptr->iLargeBitmapChunk.Close(); - // Call close on the iFileServer regardless of whether this session owns it: - // if we don't own it, close will do nothing if there are still open files, - // so always calling close introduces extra safety - thisptr->iFileServer.Close(); - delete thisptr->iRomFileAddrCache; - delete thisptr->iScanLineBuffer; - delete thisptr->iDecompressionBuffer; - thisptr->Close(); - delete thisptr; - Dll::FreeTls(); - } + FBS_OST(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, RFBSSESSION_DISCONNECT_ENTRY, "> this=0x%08x;", (TUint)thisptr);) + if(thisptr) + { + TInt tempServerSessionHandle = thisptr->ServerSessionHandle(); + if(thisptr->iConnections>0) + { + thisptr->iCallBack.iPtr=NULL; + thisptr->iCallBack.CallBack(); + // Destructor of CFbsSessionHelper may call SendCommand to cancel an + // outstanding request, therefore destruction must be done before + // iConnections is 0 to avoid an assertion going off. + if(thisptr->iConnections==1) + { + delete thisptr->iHelper; + } + thisptr->iConnections--; + } + if(thisptr->iConnections==0) + { + thisptr->iSharedChunk.Close(); + thisptr->iLargeBitmapChunk.Close(); + // Call close on the iFileServer regardless of whether this session owns it: + // if we don't own it, close will do nothing if there are still open files, + // so always calling close introduces extra safety + thisptr->iFileServer.Close(); + delete thisptr->iRomFileAddrCache; + delete thisptr->iScanLineBuffer; + delete thisptr->iDecompressionBuffer; + thisptr->Close(); + delete thisptr; + Dll::FreeTls(); + } + FBS_OST(OstTraceExt3(GRAPHICS_CONTROL_SEMANTICS, RFBSSESSION_DISCONNECT_INFO, "# Disconnected from session; this=0x%08x; iConnections=%d; iSSH=0x%08x", (TInt)thisptr, thisptr->iConnections, tempServerSessionHandle);) + } + FBS_OST(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, RFBSSESSION_DISCONNECT_EXIT2, "< this=0x%08x;", (TUint)thisptr);) } /** Gets the current Font and Bitmap server session. @@ -355,11 +402,14 @@ return KErrNoMemory; } iHelper->iServerSessionHandle = serverAssignedHandle; + ret = iLargeBitmapChunk.OpenGlobal(KFBSERVLargeChunkName,EFalse); if(ret!=KErrNone) Panic(EFbsPanicChunkError); iSpare = (TUint32*)&aFileServer; + + FBS_OST(OstTraceExt2(GRAPHICS_CONTROL_SEMANTICS, RFBSSESSION_DOCONNECT_INFO, "# New FBS Session created; this=0x%08x; iSSH=0x%08x;", (TInt)this, serverAssignedHandle);) return KErrNone; } diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/sfbs/fbstrace.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fbs/fontandbitmapserver/sfbs/fbstrace.h Tue Aug 24 16:17:55 2010 +0100 @@ -0,0 +1,39 @@ +// Copyright (c) 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" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// +#ifndef FBSTRACE_H_ +#define FBSTRACE_H_ + +#ifdef GRAPHICS_TRACE +# define FBS_OST(x) GRAPHICS_TRACE(x) +# define FBS_OST_IF(arg, x) if(arg){GRAPHICS_TRACE(x)} +#else +# ifdef _DEBUG +# define FBS_OST(x) x +# define FBS_OST_IF(arg, x) if(arg){FBS_OST(x)} +# else +# define FBS_OST(x) +# define FBS_OST_IF(arg, x) +# endif +#endif + +#ifdef FBS_VERBOSE +# define FBS_OST_VERBOSE(x) FBS_OST(x) +# define FBS_OST_VERBOSE_IF(arg, x) FBS_OST_IF(arg, x) +#else +# define FBS_OST_VERBOSE(x) +# define FBS_OST_VERBOSE_IF(arg, x) +#endif + +#endif /* FBSTRACE_H_ */ diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/traces_FBSCLI/OstTraceDefinitions.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fbs/fontandbitmapserver/traces_FBSCLI/OstTraceDefinitions.h Tue Aug 24 16:17:55 2010 +0100 @@ -0,0 +1,7 @@ +#ifndef __OSTTRACEDEFINITIONS_H__ +#define __OSTTRACEDEFINITIONS_H__ +// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler +// REMOVE BEFORE CHECK-IN TO VERSION CONTROL +//#define OST_TRACE_COMPILER_IN_USE +#include +#endif diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/traces_FBSCLI/fixed_id.definitions --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fbs/fontandbitmapserver/traces_FBSCLI/fixed_id.definitions Tue Aug 24 16:17:55 2010 +0100 @@ -0,0 +1,92 @@ +#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt. +[GROUP]GRAPHICS_CONTROL_FUNCTIONS=0x42 +[GROUP]GRAPHICS_CONTROL_SEMANTICS=0x44 +[GROUP]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS=0x40 +[GROUP]TRACE_ERROR=0x41 +[TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_CFBSBITMAP_BEGINDATAACCESS_ENTRY=0x1 +[TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_CFBSBITMAP_BEGINDATAACCESS_EXIT=0x2 +[TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_CFBSBITMAP_ENDDATAACCESS_ENTRY=0x3 +[TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_CFBSBITMAP_ENDDATAACCESS_EXIT=0x4 +[TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_CFBSBITMAP_LOCKHEAPLC_ENTRY=0xb +[TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_CFBSBITMAP_LOCKHEAPLC_EXIT=0xc +[TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_CFBSBITMAP_LOCKHEAP_ENTRY=0x5 +[TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_CFBSBITMAP_LOCKHEAP_EXIT=0x7 +[TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_CFBSBITMAP_UNLOCKHEAP2_ENTRY=0xd +[TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_CFBSBITMAP_UNLOCKHEAP2_EXIT=0xe +[TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_CFBSBITMAP_UNLOCKHEAP_ENTRY=0x8 +[TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_CFBSBITMAP_UNLOCKHEAP_EXIT=0xa +[TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_RFBSSESSION_CONNECT2_ENTRY=0x11 +[TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_RFBSSESSION_CONNECT2_EXIT=0x12 +[TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_RFBSSESSION_CONNECT_ENTRY=0xf +[TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_RFBSSESSION_CONNECT_EXIT=0x10 +[TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_RFBSSESSION_DISCONNECT_ENTRY=0x13 +[TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_RFBSSESSION_DISCONNECT_EXIT2=0x15 +[TRACE]GRAPHICS_CONTROL_SEMANTICS[0x44]_RFBSSESSION_CONNECT2_INFO=0x2 +[TRACE]GRAPHICS_CONTROL_SEMANTICS[0x44]_RFBSSESSION_CONNECT_INFO=0x1 +[TRACE]GRAPHICS_CONTROL_SEMANTICS[0x44]_RFBSSESSION_DISCONNECT_INFO=0x3 +[TRACE]GRAPHICS_CONTROL_SEMANTICS[0x44]_RFBSSESSION_DOCONNECT_INFO=0x4 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_CREATEEXTENDEDBITMAP2_ENTRY=0x1a +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_CREATEEXTENDEDBITMAP2_EXIT=0x1b +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_CREATEEXTENDEDBITMAP_ENTRY=0x18 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_CREATEEXTENDEDBITMAP_EXIT=0x19 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_CREATEHARDWAREBITMAP_ENTRY=0x5 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_CREATEHARDWAREBITMAP_EXIT=0x6 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_CREATE_ENTRY=0x3 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_CREATE_EXIT=0x4 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_DUPLICATE_ENTRY=0x7 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_DUPLICATE_EXIT=0x1c +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_LOAD2_ENTRY=0xa +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_LOAD2_EXIT=0xb +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_LOAD3_ENTRY=0x10 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_LOAD3_EXIT=0x11 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_LOAD4_ENTRY=0x12 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_LOAD4_EXIT=0x13 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_LOADANDCOMPRESS2_ENTRY=0xe +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_LOADANDCOMPRESS2_EXIT=0xf +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_LOADANDCOMPRESS3_ENTRY=0x14 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_LOADANDCOMPRESS3_EXIT=0x15 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_LOADANDCOMPRESS4_ENTRY=0x16 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_LOADANDCOMPRESS4_EXIT=0x17 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_LOADANDCOMPRESS_ENTRY=0xc +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_LOADANDCOMPRESS_EXIT=0xd +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_LOAD_ENTRY=0x8 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_LOAD_EXIT=0x9 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_RESET_ENTRY=0x1 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS[0x40]_CFBSBITMAP_RESET_EXIT=0x2 +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_BEGINDATAACCESS_ERROR=0x10 +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_CREATEEXTENDEDBITMAP2_ERROR=0x18 +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_CREATEEXTENDEDBITMAP_ERROR=0x17 +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_DUPLICATEINRAM_ERROR=0x8 +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_DUPLICATEINRAM_ERROR2=0x9 +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_DUPLICATEINRAM_ERROR3=0xa +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_DUPLICATEINROM_ERROR=0x6 +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_DUPLICATEINROM_ERROR2=0x7 +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_DUPLICATE_ERROR=0x1 +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_DUPLICATE_ERROR2=0x2 +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_DUPLICATE_ERROR3=0x5 +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_DUPLICATE_ERROR4=0x3 +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_DUPLICATE_ERROR5=0x4 +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_ENDDATAACCESS_ERROR=0x11 +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_LOAD2_ERROR=0xb +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_LOAD2_ERROR2=0xc +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_LOAD2_ERROR3=0xd +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_LOAD2_ERROR4=0xe +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_LOAD4_ERROR=0x14 +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_LOAD4_ERROR2=0x15 +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_LOADANDCOMPRESS2_ERROR=0xf +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_LOADANDCOMPRESS4_ERROR=0x16 +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_LOCKHEAP_ERROR=0x12 +[TRACE]TRACE_ERROR[0x41]_CFBSBITMAP_UNLOCKHEAP_ERROR=0x13 +[TRACE]TRACE_ERROR[0x41]_RFBSSESSION_CONNECT2_ERROR=0x1b +[TRACE]TRACE_ERROR[0x41]_RFBSSESSION_CONNECT2_ERROR2=0x1c +[TRACE]TRACE_ERROR[0x41]_RFBSSESSION_CONNECT2_ERROR3=0x1d +[TRACE]TRACE_ERROR[0x41]_RFBSSESSION_CONNECT_ERROR=0x19 +[TRACE]TRACE_ERROR[0x41]_RFBSSESSION_CONNECT_ERROR2=0x1a +[[OBSOLETE]][GROUP]GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS=0x43 +[[OBSOLETE]][TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_CFBSBITMAP_LOCKHEAP_EXIT2=0x6 +[[OBSOLETE]][TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_CFBSBITMAP_UNLOCKHEAP_EXIT2=0x9 +[[OBSOLETE]][TRACE]GRAPHICS_CONTROL_FUNCTIONS[0x42]_RFBSSESSION_DISCONNECT_EXIT=0x14 +[[OBSOLETE]][TRACE]GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS[0x43]_RFBSSESSION_CONNECT2_INFO=0x2 +[[OBSOLETE]][TRACE]GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS[0x43]_RFBSSESSION_CONNECT_INFO=0x1 +[[OBSOLETE]][TRACE]GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS[0x43]_RFBSSESSION_DISCONNECT_INFO=0x3 +[[OBSOLETE]][TRACE]GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS[0x43]_RFBSSESSION_DOCONNECT_INFO=0x4 diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/traces_FBSERV/OstTraceDefinitions.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fbs/fontandbitmapserver/traces_FBSERV/OstTraceDefinitions.h Tue Aug 24 16:17:55 2010 +0100 @@ -0,0 +1,7 @@ +#ifndef __OSTTRACEDEFINITIONS_H__ +#define __OSTTRACEDEFINITIONS_H__ +// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler +// REMOVE BEFORE CHECK-IN TO VERSION CONTROL +//#define OST_TRACE_COMPILER_IN_USE +#include +#endif diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/traces_FBSERV/fixed_id.definitions --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fbs/fontandbitmapserver/traces_FBSERV/fixed_id.definitions Tue Aug 24 16:17:55 2010 +0100 @@ -0,0 +1,11 @@ +#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt. +[GROUP]GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS=0x40 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS[0x40]_CFBCLIENT_COPYFONTINFOINTORETURNMESSAGE_INFO=0x3 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS[0x40]_CFBCLIENT_HANDLEMESGFONTDUPLICATE_INFO=0x2 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS[0x40]_CFBCLIENT_PROCBITMAPMESSAGE_INFO=0x4 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS[0x40]_CFBCLIENT_PROCBITMAPMESSAGE_INFO2=0x5 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS[0x40]_CFBCLIENT_PROCBITMAPMESSAGE_INFO3=0x7 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS[0x40]_CFBCLIENT_PROCBITMAPMESSAGE_INFO4=0x6 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS[0x40]_CFBCLIENT_PROCBITMAPMESSAGE_INFO5=0x8 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS[0x40]_CFBCLIENT_PROCBITMAPMESSAGE_INFO6=0x9 +[TRACE]GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS[0x40]_CFBCLIENT_SERVICEL_INFO=0x1 diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/utils/fbsbitmap_memory.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fbs/fontandbitmapserver/utils/fbsbitmap_memory.pl Tue Aug 24 16:17:55 2010 +0100 @@ -0,0 +1,318 @@ +#!/usr/local/bin/perl +# +# Copyright (c) 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" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# This script parses trace data produced by OST from FBS, using the the FBSCLI, +# FBSERV and Symbian BTrace Hooks OST dictionaries, to produce a CSV output of +# the amount of bitmap memory used per-thread over a user-definable time +# granularity, since the start of the trace. +# +# To use, enable SYMBIAN_KERNEL_THREAD_IDENTIFICATION trace group in Symbian +# BTrace Hooks OST dictionary, GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS in FBSERV +# OST dictionary, and GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS, +# GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS and GRAPHICS_CONTROL_FUNCTIONS in +# FBSCLI OST dictionary. Once tracing is gathered, save trace output as ascii +# and run this script against it. The resulting file can then be imported into +# a spreadsheet application to be visually processed. +# +# KNOWN DEFECTS: +# Once the log time goes beyond midnight, snapshots will stop being taken. +# + +use strict; + +# Sanity checking of the command line parameters... +if ($#ARGV == -1 || $ARGV[0] eq "help" || $ARGV[0] eq "/?") +{ + print "\nusage: $0 filename [-h]\n"; + print "where\n"; + print " -h : Specifies the heartbeat in millisecs (default=10000)\n"; + exit; +} + + +## Modifiable constants... +my $CSV_DELIMITER = ','; + +# Time after start to take first snapshot, in millisecs +my $firstHeartBeatTimeMS = 1000; + +# Default heartbeat in millisecs if none specified. +my $heartBeatMS = 10000; + + +## +## Internal structures... +## +my $heartBeatCount = 0; +my $nextHeartBeatMS = -1; + +# A hash of thread names to the amount of bitmap memory they +# have used since the start of the trace. +my %bmpMemoryPerThread = (); + +# A hash of bitmaps fully qualified by the session they belong to, +# and their local handle (because bitmaps can have the same local +# handle in different threads), mapped to their size in bytes. +my %bmpMemoryByServerHandle = (); + +# Hash of FbsSessions to thread IDs. +my %SessionThreadMap = (); + +# Array of the above hashes, one hash per heartbeat. +my @arrayOfSnapshots; + +# Hashes of thread and process names to IDs. +my %ThreadNames; +my %ProcessNames; + + +## +## Command line options parsing... +## First arg is assumed to be the filename. +## +for my $i (1..$#ARGV) +{ + my $cma = $ARGV[$i]; + if ($cma =~ m/-h(\d*)/) + { + $heartBeatMS = $1; + } + else + { + print "Unrecognised parameter: $cma , ignoring...\n"; + } +} + +## Read from the file. +## Read the log into an array line by line. +my $TRACE_FILENAME = $ARGV[0]; +open(INPUT_FILE, $TRACE_FILENAME) or die $!; +my @traceLines = ; + + +## +## Parse each line sequentially... +## +foreach my $line (@traceLines) +{ + my $timeFromMidnightMS; + + ## + ## If this line is about a new process, make a note of the name and the + ## associated process id, so that FbsSessions can be mapped to their + ## thread by name. + ## + if ($line =~ /^.*Thread:Process name assigned;NThread:(.*);DProcess:(.*);Name:(.*)$/i) + { + my $threadId = $1; + my $processId = $2; + my $processName = $3; + $ProcessNames{$processId} = $processName ; + } + + ## + ## If this line is about a new process, make a note of the name and the + ## associated process id, so that FbsSessions can be mapped to their + ## thread by name when the csv is generated. + ## + if (($line =~ /^.*Thread:Thread created;NThread:(.*);DProcess:(.*);Name:(.*)$/i) || + ($line =~ /^.*Thread:Thread name assigned;NThread:(.*);DProcess:(.*);Name:(.*)$/i)) + { + my $threadId = $1; + my $processId = $2; + my $threadName = $3; + my $fullThreadName = $ProcessNames{$processId} . ":" . $threadName; + $ThreadNames{$threadId} = $fullThreadName; + } + + ## + ## Determine timestamp. If this time is beyond the heartbeat, + ## take a snapshot and + ## + if ($line =~ /^(\d\d):(\d\d):(\d\d)\.(\d{3})/) + { + $timeFromMidnightMS = ((($1 * 3600) + ($2 * 60) + $3) * 1000) + $4; + # Set up the time for the first snapshot. + if ($nextHeartBeatMS == -1) + { + $nextHeartBeatMS = $timeFromMidnightMS + $firstHeartBeatTimeMS; + } + } + + ## + ## If heartbeat reached, take snapshot of bmp memory per thread + ## and set next heartbeat time. + ## + while ($timeFromMidnightMS >= $nextHeartBeatMS) + { + $nextHeartBeatMS += $heartBeatMS; + # take a snapshot of the current bitmap memory usage per thread + while ((my $thread, my $bmpMemory) = each(%bmpMemoryPerThread)) + { + $arrayOfSnapshots[$heartBeatCount]{$thread} = $bmpMemory; + } + $heartBeatCount++; + } + + ## FBS Client-side traces. + if ($line =~ m/\tFBSCLI: /) + { + ## + ## If this line is an FBSCLI trace, and it contains iSSH then + ## it gives a chance to map a client thread ID to a session handle. + ## + if ( $line =~ m/iSSH=(\w*);.*Thread ID:(.*)$/) + { + my $ServerSessionHandle = $1; + my $thread = $2; + if ($thread ne "0x00000000") + { + $SessionThreadMap{$ServerSessionHandle} = $thread; + } + } + } + + ## + ## FBS Server-side traces. + ## + if ($line =~ m/\tFBSERV: /) + { + ## The line must have a s= parameter to be useful - the session server handle. + ## Any FBSERV line without this is not considered for parsing. + if ($line =~ m/; iSSH=(\w*);/) + { + my $FbsSessionHandle = $1; + my $thread = "Unknown Thread [Session=$FbsSessionHandle]"; + if (defined($SessionThreadMap{$FbsSessionHandle})) + { + $thread = $SessionThreadMap{$FbsSessionHandle}; + } + if ($line =~ m/# Server resource destroyed; .*iH=(\w*);/) + { + my $bmpHandle = $1; + my $bmpIdentifier = "$FbsSessionHandle:$bmpHandle"; + if (defined($bmpMemoryByServerHandle{$bmpIdentifier})) + { + $bmpMemoryPerThread{$thread} -= $bmpMemoryByServerHandle{$bmpIdentifier}; + delete $bmpMemoryByServerHandle{$bmpIdentifier}; + } + } + if ($line =~ m/# Server bitmap resized; .*iOldH=(\w*); iNewH=(\w*); newbytes=(\d*);/) + { + # When a bitmap is resized, the amount of memory held by the bitmap may change + # and the bitmap localhandle will change. + my $oldBmpHandle = $1; + my $newBmpHandle = $2; + my $newBmpBytes = $3; + my $oldBmpIdentifier = "$FbsSessionHandle:$oldBmpHandle"; + my $newBmpIdentifier = "$FbsSessionHandle:$newBmpHandle"; + if (defined($bmpMemoryByServerHandle{$oldBmpIdentifier})) + { + $bmpMemoryPerThread{$thread} -= $bmpMemoryByServerHandle{$oldBmpIdentifier}; + delete $bmpMemoryByServerHandle{$oldBmpIdentifier}; + } + $bmpMemoryPerThread{$thread} += $newBmpBytes; + $bmpMemoryByServerHandle{$newBmpIdentifier} = $newBmpBytes; + } + elsif ($line =~ m/#.*iOldH=(\w*); iNewH=(\w*);/) + { + # When a bitmap is compressed, cleaned or resized, the bitmap local handle changes + my $oldBmpHandle = $1; + my $newBmpHandle = $2; + my $oldBmpIdentifier = "$FbsSessionHandle:$oldBmpHandle"; + my $newBmpIdentifier = "$FbsSessionHandle:$newBmpHandle"; + if (defined($bmpMemoryByServerHandle{$oldBmpIdentifier})) + { + my $bytes = $bmpMemoryByServerHandle{$oldBmpIdentifier}; + delete $bmpMemoryByServerHandle{$oldBmpIdentifier}; + $bmpMemoryByServerHandle{$newBmpIdentifier} = $bytes; + } + } + elsif ($line =~ m/#.*iH=(\w*);.*bytes=(\d+);/) + { + # Duplication of a bitmap typically. When a bitmap is duplicated, + # the memory is 'owned' by all threads that duplicate it. + my $bmpHandle = $1; + my $bmpBytes = $2; + my $bmpIdentifier = "$FbsSessionHandle:$bmpHandle"; + $bmpMemoryPerThread{$thread} += $bmpBytes; + $bmpMemoryByServerHandle{$bmpIdentifier} = $bmpBytes; + } + } + } +} + +close (INPUT_FILE); + + +## +## Make a map of unique threads across all snapshots +## This is so only one occurrence of each thread will appear +## in the csv file. +## +my %uniqueThreads = (); +for my $i (0..$#arrayOfSnapshots) +{ + for my $thread (keys %{$arrayOfSnapshots[$i]}) + { + $uniqueThreads{$thread} = 1; + } +} + +## +## Start writing to file. +## First row, which contains the heartbeat number column headings... +## +my $OUTPUT_FILENAME = sprintf("%s.csv", $TRACE_FILENAME); +open(OUTPUT_FILE,">$OUTPUT_FILENAME") or die $!; +print OUTPUT_FILE "Session$CSV_DELIMITER"; +for my $i (0..$heartBeatCount) +{ + print OUTPUT_FILE "$i$CSV_DELIMITER"; +} + +## +## For each subsequent row, print the first thread and the +## memory at each snapshot... +## +print OUTPUT_FILE "\n"; +while ((my $thread, my $dummy) = each(%uniqueThreads)) +{ + # Resolve the thread to its full name... + print OUTPUT_FILE "$thread"; + if (defined($ThreadNames{$thread}) ) + { + my $threadName = $ThreadNames{$thread}; + print OUTPUT_FILE ":$threadName"; + } + print OUTPUT_FILE "$CSV_DELIMITER"; + + # print the memory use per thread, for each snapshot... + for my $i (0..$#arrayOfSnapshots) + { + my %snapshot = %{$arrayOfSnapshots[$i]}; + while ((my $snapshotThread, my $bmpMemory) = each(%snapshot)) + { + if ($snapshotThread eq $thread) + { + print OUTPUT_FILE "$bmpMemory"; + } + } + print OUTPUT_FILE "$CSV_DELIMITER"; + } + print OUTPUT_FILE "\n"; +} +close (OUTPUT_FILE); + diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/utils/fbsgroup.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fbs/fontandbitmapserver/utils/fbsgroup.py Tue Aug 24 16:17:55 2010 +0100 @@ -0,0 +1,76 @@ +# Copyright (c) 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" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# Groups an ASCII TracViewer trace by the contents of a named parameter. +# + +import fileinput, string, re, sys, threadname + +# Utility function to group a list by a given regular expression. +# returns a dictionary indexed by parameter 1 of the passed in pattern. +def groupby(pattern, data): + r = {} + for entry in data: + matched = re.search(pattern, entry) + if matched: + r.setdefault(matched.group(1), []).append(entry) + return r + +# Show the usage if the parameters are not as expected +if len(sys.argv) != 3: + print "Usage: fbsgroup " + print "Where:" + print " is a parameter to group by. (-t groups by thread id)" + print " is the ASCII TraceViewer file to be parsed" + sys.exit(1) + +if sys.argv[1] == "-t": + pattern = "(Thread ID:0x.*$)" +else: + pattern = "("+sys.argv[1]+"=*\w*);+" + +del sys.argv[1] + +# Add thread names to the raw trace +rawinput = threadname.addnames(fileinput.input()) + +# Group by the parameter supplied on the command line... +results = groupby(pattern, rawinput) + +for group, entries in results.items(): + print '\n'+group + + # Show a count of the number of CFbsBitmap::xxx function calls + functions = groupby("(CFbsBitmap::\S+:)", entries) + for name, function in functions.items(): + print "\t%s %s" % (name, len(function)) + + # Show a count of the number of CFbClient::xxx function calls + functions = groupby("(CFbClient::\S+:)", entries) + for name, function in functions.items(): + print "\t%s %s" % (name, len(function)) + + # Show a count of the number of RFbsSession::xxx function calls + functions = groupby("(RFbsSession::\S+:)", entries) + for name, function in functions.items(): + print "\t%s %s" % (name, len(function)) + + # Show the matching entries for this group + for entry in entries: + print "\t%s" % entry.strip() + + + + + + diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/utils/fbsresource_count.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fbs/fontandbitmapserver/utils/fbsresource_count.pl Tue Aug 24 16:17:55 2010 +0100 @@ -0,0 +1,270 @@ +#!/usr/local/bin/perl +# +# Copyright (c) 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" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# This script parses trace data produced by OST from FBS, using the the FBSCLI, +# FBSERV and Symbian BTrace Hooks OST dictionaries, to produce a CSV output of +# the amount of FBS resources used per-thread over a user-definable time +# granularity, since the start of the trace. +# +# To use, enable SYMBIAN_KERNEL_THREAD_IDENTIFICATION trace group in Symbian +# BTrace Hooks OST dictionary, GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS in FBSERV +# OST dictionary, and GRAPHICS_RESOURCE_MANAGEMENT_SEMANTICS, +# GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS and GRAPHICS_CONTROL_FUNCTIONS in +# FBSCLI OST dictionary. Once tracing is gathered, save trace output as ascii +# and run this script against it. The resulting file can then be imported into +# a spreadsheet application to be visually processed. +# +# KNOWN DEFECTS: +# Once the log time goes beyond midnight, snapshots will stop being taken. +# + +use strict; + +# Sanity checking of the command line parameters... +if ($#ARGV == -1 || $ARGV[0] eq "help" || $ARGV[0] eq "/?") +{ + print "\nusage: $0 filename [-h]\n"; + print "where\n"; + print " -h : Specifies the heartbeat in millisecs (default=10000)\n"; + exit; +} + + +## Modifiable constants... +my $CSV_DELIMITER = ','; + +# Time after start to take first snapshot, in millisecs +my $firstHeartBeatTimeMS = 1000; + +# Default heartbeat in millisecs if none specified. +my $heartBeatMS = 10000; + + +## +## Internal structures... +## +my $heartBeatCount = 0; +my $nextHeartBeatMS = -1; + +# Hash of FbsSessions to thread IDs. +my %SessionThreadMap = (); + +# A hash of thread names to the fbs resource count. +my %fbsResourcesPerThread = (); + +# Array of the above hashes, one hash per heartbeat. +my @arrayOfSnapshots; + +# Hashes of thread and process names to IDs. +my %ThreadNames; +my %ProcessNames; + + +## +## Command line options parsing... +## First arg is assumed to be the filename. +## +for my $i (1..$#ARGV) +{ + my $cma = $ARGV[$i]; + if ($cma =~ m/-h(\d*)/) + { + $heartBeatMS = $1; + } + else + { + print "Unrecognised parameter: $cma , ignoring...\n"; + } +} + +## Read from the file. +## Read the log into an array line by line. +my $TRACE_FILENAME = $ARGV[0]; +open(INPUT_FILE, $TRACE_FILENAME) or die $!; +my @traceLines = ; + + +## +## Parse each line sequentially... +## +foreach my $line (@traceLines) +{ + my $timeFromMidnightMS; + + ## + ## If this line is about a new process, make a note of the name and the + ## associated process id, so that FbsSessions can be mapped to their + ## thread by name. + ## + if ($line =~ /^.*Thread:Process name assigned;NThread:(.*);DProcess:(.*);Name:(.*)$/i) + { + my $threadId = $1; + my $processId = $2; + my $processName = $3; + $ProcessNames{$processId} = $processName ; + } + + ## + ## If this line is about a new process, make a note of the name and the + ## associated process id, so that FbsSessions can be mapped to their + ## thread by name when the csv is generated. + ## + if (($line =~ /^.*Thread:Thread created;NThread:(.*);DProcess:(.*);Name:(.*)$/i) || + ($line =~ /^.*Thread:Thread name assigned;NThread:(.*);DProcess:(.*);Name:(.*)$/i)) + { + my $threadId = $1; + my $processId = $2; + my $threadName = $3; + my $fullThreadName = $ProcessNames{$processId} . ":" . $threadName; + $ThreadNames{$threadId} = $fullThreadName; + } + + ## + ## Determine timestamp. If this time is beyond the heartbeat, + ## take a snapshot and + ## + if ($line =~ /^(\d\d):(\d\d):(\d\d)\.(\d{3})/) + { + $timeFromMidnightMS = ((($1 * 3600) + ($2 * 60) + $3) * 1000) + $4; + # Set up the time for the first snapshot. + if ($nextHeartBeatMS == -1) + { + $nextHeartBeatMS = $timeFromMidnightMS + $firstHeartBeatTimeMS; + } + } + + ## + ## If heartbeat reached, take snapshot of bmp memory per thread + ## and set next heartbeat time. + ## + while ($timeFromMidnightMS >= $nextHeartBeatMS) + { + $nextHeartBeatMS += $heartBeatMS; + # take a snapshot of the current bitmap memory usage per thread + while ((my $thread, my $fbsResourceCount) = each(%fbsResourcesPerThread)) + { + $arrayOfSnapshots[$heartBeatCount]{$thread} = $fbsResourceCount; + } + $heartBeatCount++; + } + + ## FBS Client-side traces. + if ($line =~ m/\tFBSCLI: /) + { + ## + ## If this line is an FBSCLI trace, and it contains iSSH then + ## it gives a chance to map a client thread ID to a session handle. + ## + if ( $line =~ m/iSSH=(\w*);.*Thread ID:(.*)$/) + { + my $ServerSessionHandle = $1; + my $thread = $2; + if ($thread ne "0x00000000") + { + $SessionThreadMap{$ServerSessionHandle} = $thread; + } + } + } + + ## + ## FBS Server-side traces. + ## + if ($line =~ m/\tFBSERV: /) + { + ## The line must have a s= parameter to be useful - the session server handle. + ## Any FBSERV line without this is not considered for parsing. + if ($line =~ m/; iSSH=(\w*);/) + { + my $FbsSessionHandle = $1; + my $thread = "Unknown Thread [Session=$FbsSessionHandle]"; + if (defined($SessionThreadMap{$FbsSessionHandle})) + { + $thread = $SessionThreadMap{$FbsSessionHandle}; + } + if ($line =~ m/; rc=(\d+);/) + { + my $resourceCount = $1; + if ($resourceCount == 0) + { + $resourceCount = ''; + } + $fbsResourcesPerThread{$thread} = $resourceCount; + } + } + } +} + +close (INPUT_FILE); + + +## +## Make a map of unique threads across all snapshots +## This is so only one occurrence of each thread will appear +## in the csv file. +## +my %uniqueThreads = (); +for my $i (0..$#arrayOfSnapshots) +{ + for my $thread (keys %{$arrayOfSnapshots[$i]}) + { + $uniqueThreads{$thread} = 1; + } +} + +## +## Start writing to file. +## First row, which contains the heartbeat number column headings... +## +my $OUTPUT_FILENAME = sprintf("%s.csv", $TRACE_FILENAME); +open(OUTPUT_FILE,">$OUTPUT_FILENAME") or die $!; +print OUTPUT_FILE "Session$CSV_DELIMITER"; +for my $i (0..$heartBeatCount) +{ + print OUTPUT_FILE "$i$CSV_DELIMITER"; +} + +## +## For each subsequent row, print the first thread and the +## memory at each snapshot... +## +print OUTPUT_FILE "\n"; +while ((my $thread, my $dummy) = each(%uniqueThreads)) +{ + # Resolve the thread to its full name... + print OUTPUT_FILE "$thread"; + if (defined($ThreadNames{$thread}) ) + { + my $threadName = $ThreadNames{$thread}; + print OUTPUT_FILE ":$threadName"; + } + print OUTPUT_FILE "$CSV_DELIMITER"; + + # print the memory use per thread, for each snapshot... + for my $i (0..$#arrayOfSnapshots) + { + my %snapshot = %{$arrayOfSnapshots[$i]}; + while ((my $snapshotThread, my $fbsResourceCount) = each(%snapshot)) + { + if ($snapshotThread eq $thread) + { + print OUTPUT_FILE "$fbsResourceCount"; + } + } + print OUTPUT_FILE "$CSV_DELIMITER"; + } + print OUTPUT_FILE "\n"; +} +close (OUTPUT_FILE); + diff -r 314cdf966406 -r b042127c80f6 fbs/fontandbitmapserver/utils/threadname.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fbs/fontandbitmapserver/utils/threadname.py Tue Aug 24 16:17:55 2010 +0100 @@ -0,0 +1,76 @@ +# Copyright (c) 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" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# Utility function to append thread names where the Thread Id maps to a known thread/process name. + +import re + +# Takes as input list which contains OST traces from the SYMBIAN_KERNEL_THREAD_IDENTIFICATION trace group in Symbian +# BTrace Hooks OST dictionary. Returns a list with the same content as with thread names appended. +def addnames(data): + result = [] + processNames = {} + threadNames = {} + rthreadIds = {} + + for line in data: + pattern = "^.*Thread:Process name assigned;NThread:(.*);DProcess:(.*);Name:(.*)$" + matched = re.search(pattern, line) + if matched: + processNames[matched.group(2)] = matched.group(3) + + pattern = "^.*Thread:Thread created;NThread:(.*);DProcess:(.*);Name:(.*)$" + matched = re.search(pattern, line) + if matched: + threadNames[matched.group(1)] = processNames[matched.group(2)]+":"+matched.group(3) + + pattern = "^.*Thread:Thread name assigned;NThread:(.*);DProcess:(.*);Name:(.*)$" + matched = re.search(pattern, line) + if matched: + threadNames[matched.group(1)] = processNames[matched.group(2)]+":"+matched.group(3) + + pattern = "^.*Thread:Thread ID assigned;NThread:(.*);DProcess:(.*);RThread ID:(\d*)$" + matched = re.search(pattern, line) + if matched: + rthreadIds[matched.group(3)] = matched.group(1) + + pattern = "(^.*Thread ID:)(\w*)(.*)$" + matched = re.search(pattern, line) + if matched: + threadId = matched.group(2) + if threadNames.has_key(threadId): + line = matched.group(1)+threadId+":"+threadNames[threadId]+matched.group(3) + + pattern = "(^.*clientThreadId )(\w*)(.*)$" + matched = re.search(pattern, line) + if matched: + rthreadIdHex = matched.group(2) + rthreadId = hex(rthreadIdHex) + if rthreadIds.has_key(rthreadId): + threadId = rthreadIds[rthreadId] + threadName = threadNames[threadId] + line = matched.group(1)+rthreadId+":"+threadName+matched.group(3) + + pattern = "(^.*threadId )(\w*)(.*)$" + matched = re.search(pattern, line) + if matched: + rthreadIdHex = matched.group(2) + rthreadId = hex(rthreadIdHex) + if rthreadIds.has_key(rthreadId): + threadId = rthreadIds[rthreadId] + threadName = threadNames[threadId] + line = matched.group(1)+rthreadId+":"+threadName+matched.group(3) + + result.append(line) + + return result \ No newline at end of file diff -r 314cdf966406 -r b042127c80f6 graphicstest/graphicstestharness/automation/h4/roms.tb92.txt --- a/graphicstest/graphicstestharness/automation/h4/roms.tb92.txt Fri Aug 06 17:05:55 2010 +0100 +++ b/graphicstest/graphicstestharness/automation/h4/roms.tb92.txt Tue Aug 24 16:17:55 2010 +0100 @@ -7,6 +7,7 @@ RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby openvgtest.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics3_armv5_dpdef','Graphics Test ROM (3) - OpenVG DP Default','\epoc32\data\z\graphics\wsini_integ.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_03.txt','') RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby supplieropenvgtest.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics3a_armv5_dpdef','Graphics Test ROM (3a) - OpenVG tests requiring USB/Memory Card support DP Default','\epoc32\data\z\graphics\wsini_integ.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_03a.txt' ,'') RomAndAutoRom('armv5','h4hrp pagedrom techview platsec wserv.oby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics4_armv5_dpdef','Graphics Test ROM (4) - WServ DP Default','\epoc32\data\z\system\data\ws_test.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_04.txt','') +RomAndAutoRom('armv5','h4hrp pagedrom techview platsec wserv.oby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics4yshifting_armv5_dpdef','Graphics Test ROM (YShifting) - Linear reduction of YOffset DP Default','\epoc32\data\z\system\data\wsini_pointershift.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_04a.txt','') RomAndAutoRom('armv5','h4hrp pagedrom techview platsec wserv.oby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics4ct_armv5_dpdef','Graphics Test ROM (4ct) - WServ Change Tracking DP Default','\epoc32\data\z\system\data\ws_test_changetracking.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_04ct.txt','') RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby te_uibench.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>"','h4hrp_graphics5a_armv5_dpdef','Graphics Test ROM (5a) - UIBench DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_05a.txt','') RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby internaltestfonts.iby te_outlineshadow.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE','h4hrp_graphics5b_armv5_dpdef','Graphics Test ROM (5b) - UIBench - Outline Shadow DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_05b.txt','') diff -r 314cdf966406 -r b042127c80f6 graphicstest/graphicstestharness/automation/h4/roms.wdp.tb92.txt --- a/graphicstest/graphicstestharness/automation/h4/roms.wdp.tb92.txt Fri Aug 06 17:05:55 2010 +0100 +++ b/graphicstest/graphicstestharness/automation/h4/roms.wdp.tb92.txt Tue Aug 24 16:17:55 2010 +0100 @@ -7,6 +7,7 @@ RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby openvgtest.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics3_armv5_wdp','Graphics Test ROM (3) - OpenVG WDP','\epoc32\data\z\graphics\wsini_integ.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_03.txt','') RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby supplieropenvgtest.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics3a_armv5_wdp','Graphics Test ROM (3a) - OpenVG tests requiring USB/Memory Card support WDP','\epoc32\data\z\graphics\wsini_integ.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_03a.txt','') RomAndAutoRom('armv5','h4hrp pagedrom techview platsec wserv.oby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics4_armv5_wdp','Graphics Test ROM (4) - WServ WDP','\epoc32\data\z\system\data\ws_test.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_04.txt','') +RomAndAutoRom('armv5','h4hrp pagedrom techview platsec wserv.oby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics4yshifting_armv5_wdp','Graphics Test ROM (YShifting) - Linear reduction of YOffset WDP','\epoc32\data\z\system\data\wsini_pointershift.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_04a.txt','') RomAndAutoRom('armv5','h4hrp pagedrom techview platsec wserv.oby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics4ct_armv5_wdp','Graphics Test ROM (4ct) - WServ Change Tracking WDP','\epoc32\data\z\system\data\ws_test_changetracking.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_04ct.txt','') RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby te_uibench.iby internaltestfonts.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>" -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics5a_armv5_wdp','Graphics Test ROM (5a) - UIBench WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_05a.txt','') RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby internaltestfonts.iby te_outlineshadow.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics5b_armv5_wdp','Graphics Test ROM (5b) - UIBench - Outline Shadow WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_05b.txt','') diff -r 314cdf966406 -r b042127c80f6 graphicstest/graphicstestharness/automation/h4/runroms.tb92.cmd --- a/graphicstest/graphicstestharness/automation/h4/runroms.tb92.cmd Fri Aug 06 17:05:55 2010 +0100 +++ b/graphicstest/graphicstestharness/automation/h4/runroms.tb92.cmd Tue Aug 24 16:17:55 2010 +0100 @@ -1,4 +1,4 @@ -rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +rem Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). rem All rights reserved. rem This component and the accompanying materials are made available rem under the terms of "Eclipse Public License v1.0" @@ -22,6 +22,7 @@ call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics3_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400 call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics3a_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600 --sendFiles "stress_tests,stress_tests;functional_tests,functional_tests" --retrieveFiles "functional_results_copy/test_results,functional_results/test_results;functional_tests,functional_results/functional_tests;stress_results_copy/test_results,stress_results/test_results" call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics4_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400 +call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics4yshifting_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400 call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics4ct_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400 call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics5a_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400 call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics5b_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400 diff -r 314cdf966406 -r b042127c80f6 graphicstest/graphicstestharness/automation/h4/runroms.wdp.tb92.cmd --- a/graphicstest/graphicstestharness/automation/h4/runroms.wdp.tb92.cmd Fri Aug 06 17:05:55 2010 +0100 +++ b/graphicstest/graphicstestharness/automation/h4/runroms.wdp.tb92.cmd Tue Aug 24 16:17:55 2010 +0100 @@ -1,4 +1,4 @@ -rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +rem Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). rem All rights reserved. rem This component and the accompanying materials are made available rem under the terms of "Eclipse Public License v1.0" @@ -22,6 +22,7 @@ call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics3_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400 call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics3a_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600 --sendFiles "stress_tests,stress_tests;functional_tests,functional_tests" --retrieveFiles "functional_results_copy/test_results,functional_results/test_results;functional_tests,functional_results/functional_tests;stress_results_copy/test_results,stress_results/test_results" call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics4_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400 --timeout 240 +call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics4yshifting_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400 --timeout 240 call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics4ct_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400 --timeout 240 call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics5a_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400 call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics5b_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400 diff -r 314cdf966406 -r b042127c80f6 graphicstest/graphicstestharness/automation/h4/tests_04a.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graphicstest/graphicstestharness/automation/h4/tests_04a.txt Tue Aug 24 16:17:55 2010 +0100 @@ -0,0 +1,21 @@ +# tests_04a.txt +# Copyright (c) 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" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: Used for YOffset tests + +# +# program,log,commdb,script,timeout,release,pre cmd,post cmd + +# Wserv +TESTEXECUTE, \logs\testexecute\wstest_t_pointershifttest_nga.htm, , z:\wstest\wstest_t_pointershifttest_nga.script, 600 +# program,log,commdb,script,timeout,release,pre cmd,post cmd diff -r 314cdf966406 -r b042127c80f6 graphicstest/graphicstestharness/automation/h6/roms.tb92.txt --- a/graphicstest/graphicstestharness/automation/h6/roms.tb92.txt Fri Aug 06 17:05:55 2010 +0100 +++ b/graphicstest/graphicstestharness/automation/h6/roms.tb92.txt Tue Aug 24 16:17:55 2010 +0100 @@ -7,6 +7,7 @@ RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby openvgtest.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics3_armv5_dpdef','Graphics Test ROM (3) - OpenVG DP Default','\epoc32\data\z\graphics\wsini_integ.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_03.txt','') RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby supplieropenvgtest.iby graphics_screencomparison.iby graphics_imagecomparison.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics3a_armv5_dpdef','Graphics Test ROM (3a) - OpenVG tests requiring USB/Memory Card support DP Default','\epoc32\data\z\graphics\wsini_integ.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_03a.txt','') RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec wserv.oby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics4_armv5_dpdef','Graphics Test ROM (4) - WServ DP Default','\epoc32\data\z\system\data\ws_test.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_04.txt','') +RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec wserv.oby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics4yshifting_armv5_dpdef','Graphics Test ROM (YShifting) - Linear reduction of YOffset DP Default','\epoc32\data\z\system\data\wsini_pointershift.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_04a.txt','') RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec wserv.oby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics4ct_armv5_dpdef','Graphics Test ROM (4ct) - WServ Change Tracking DP Default','\epoc32\data\z\system\data\wservu_om_h6_changetracking.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_04ct.txt','') RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby te_uibench.iby internaltestfonts.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>"','34xx_sdp_graphics5a_armv5_dpdef','Graphics Test ROM (5a) - UIBench DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_05a.txt','') RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby internaltestfonts.iby te_outlineshadow.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE','34xx_sdp_graphics5b_armv5_dpdef','Graphics Test ROM (5b) - UIBench - Outline Shadow DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_05b.txt','') diff -r 314cdf966406 -r b042127c80f6 graphicstest/graphicstestharness/automation/h6/runroms.tb92.cmd --- a/graphicstest/graphicstestharness/automation/h6/runroms.tb92.cmd Fri Aug 06 17:05:55 2010 +0100 +++ b/graphicstest/graphicstestharness/automation/h6/runroms.tb92.cmd Tue Aug 24 16:17:55 2010 +0100 @@ -1,4 +1,4 @@ -rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +rem Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). rem All rights reserved. rem This component and the accompanying materials are made available rem under the terms of "Eclipse Public License v1.0" @@ -22,6 +22,7 @@ call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics3_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400 call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics3a_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600 --sendFiles "stress_tests,stress_tests;functional_tests,functional_tests" --retrieveFiles "functional_results_copy/test_results,functional_results/test_results;functional_tests,functional_results/functional_tests;stress_results_copy/test_results,stress_results/test_results" call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics4_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600 +call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics4yshifting_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600 call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics4ct_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600 call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics5a_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400 call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics5b_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400 diff -r 314cdf966406 -r b042127c80f6 graphicstest/graphicstestharness/automation/h6/tests_04a.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graphicstest/graphicstestharness/automation/h6/tests_04a.txt Tue Aug 24 16:17:55 2010 +0100 @@ -0,0 +1,21 @@ +# tests_04a.txt +# Copyright (c) 1995-2009 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" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description:Used for YOffset tests + +# +# program,log,commdb,script,timeout,release,pre cmd,post cmd + +# Wserv +TESTEXECUTE, \logs\testexecute\wstest_t_pointershifttest_nga.htm, , z:\wstest\wstest_t_pointershifttest_nga.script, 600 +# program,log,commdb,script,timeout,release,pre cmd,post cmd \ No newline at end of file diff -r 314cdf966406 -r b042127c80f6 graphicstest/graphicstestharness/automation/ne1/roms.tb92.txt --- a/graphicstest/graphicstestharness/automation/ne1/roms.tb92.txt Fri Aug 06 17:05:55 2010 +0100 +++ b/graphicstest/graphicstestharness/automation/ne1/roms.tb92.txt Tue Aug 24 16:17:55 2010 +0100 @@ -5,6 +5,7 @@ RomAndAutoRom('armv5','naviengine techview platsec graphics_test2.iby internaltestfonts.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics2_armv5','Graphics Test ROM (2)','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_02.txt','') RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby openvgtest.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics3_armv5','Graphics Test ROM (3) - OpenVG','\epoc32\data\z\graphics\wsini_integ_norotation.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_03.txt','') RomAndAutoRom('armv5','naviengine techview platsec wserv.oby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics4_armv5','Graphics Test ROM (4) - WServ','\epoc32\data\z\system\data\ws_test_singlescreen.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_04.txt','') +RomAndAutoRom('armv5','naviengine techview platsec wserv.oby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics4yshifting_armv5','Graphics Test ROM (YShifting) - Linear reduction of YOffset','\epoc32\data\z\system\data\wsini_pointershift.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_04a.txt','') RomAndAutoRom('armv5','naviengine techview platsec wserv.oby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics4ct_armv5','Graphics Test ROM (4ct) - WServ Change Tracking','\epoc32\data\z\system\data\wservu_om_singlescreen_changetracking.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_04ct.txt','') RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby te_uibench.iby internaltestfonts.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>"','naviengine_graphics5a_armv5','Graphics Test ROM (5a) - UIBench','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_05a.txt','') RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby internaltestfonts.iby te_outlineshadow.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE','naviengine_graphics5b_armv5','Graphics Test ROM (5b) - UIBench - Outline Shadow','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_05b.txt','') diff -r 314cdf966406 -r b042127c80f6 graphicstest/graphicstestharness/automation/ne1/runroms.tb92.cmd --- a/graphicstest/graphicstestharness/automation/ne1/runroms.tb92.cmd Fri Aug 06 17:05:55 2010 +0100 +++ b/graphicstest/graphicstestharness/automation/ne1/runroms.tb92.cmd Tue Aug 24 16:17:55 2010 +0100 @@ -1,4 +1,4 @@ -rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +rem Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). rem All rights reserved. rem This component and the accompanying materials are made available rem under the terms of "Eclipse Public License v1.0" @@ -20,6 +20,7 @@ call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics2_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 120 --listenTimeout 2400 --transferMode serial call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics3_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 60 --listenTimeout 2400 --transferMode serial call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics4_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 120 --listenTimeout 2400 --transferMode serial +call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics4yshifting_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 120 --listenTimeout 2400 --transferMode serial call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics4ct_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 120 --listenTimeout 2400 --transferMode serial call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics5a_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 240 --listenTimeout 2400 --transferMode serial call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics5b_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 60 --listenTimeout 2400 --transferMode serial diff -r 314cdf966406 -r b042127c80f6 graphicstest/graphicstestharness/automation/ne1/tests_04a.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graphicstest/graphicstestharness/automation/ne1/tests_04a.txt Tue Aug 24 16:17:55 2010 +0100 @@ -0,0 +1,20 @@ +# tests_04a.txt +# 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" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: Used for YOffset tests +# +# program,log,commdb,script,timeout,release,pre cmd,post cmd + +# Wserv +TESTEXECUTE, \logs\testexecute\wstest_t_pointershifttest_nga.htm, , z:\wstest\wstest_t_pointershifttest_nga.script, 600 +# program,log,commdb,script,timeout,release,pre cmd,post cmd \ No newline at end of file diff -r 314cdf966406 -r b042127c80f6 graphicstest/graphicstestharness/automation/winscw/tests.tb92.txt --- a/graphicstest/graphicstestharness/automation/winscw/tests.tb92.txt Fri Aug 06 17:05:55 2010 +0100 +++ b/graphicstest/graphicstestharness/automation/winscw/tests.tb92.txt Tue Aug 24 16:17:55 2010 +0100 @@ -225,6 +225,9 @@ TESTEXECUTE, C:\logs\testexecute\graphics-wserv-screenconstruct-scrmodes.htm, , z:\wstest\screenconstruct\graphics-wserv-screenconstruct-scrmodes.script, 300, , z\wstest\screenconstruct\tscreenconstruct.bat install scrmodes, z\wstest\screenconstruct\tscreenconstruct.bat uninstall TESTEXECUTE, C:\logs\testexecute\wservstresstest.htm, , z:\wstest\wservstresstest.script, 4200 +# DevCR SIMR-7TBHYR tests and defect fix ou1cimx1#435306 Gradual reduction of Yoffset in wserv for better UI experinece +TESTEXECUTE, C:\logs\testexecute\wstest_t_pointershifttest_nga.htm, , z:\wstest\wstest_t_pointershifttest_nga.script, 8000, ,z\wstest\wspointershifttest_run.bat install, z\wstest\wspointershifttest_run.bat uninstall + # PREQ2102 tests TESTEXECUTE, C:\logs\testexecute\tdisplayconfiguration.htm, , z:\commonheadertest\tdisplayconfiguration.script, 600 diff -r 314cdf966406 -r b042127c80f6 windowing/windowserver/SERVER/openwfc/panics.h --- a/windowing/windowserver/SERVER/openwfc/panics.h Fri Aug 06 17:05:55 2010 +0100 +++ b/windowing/windowserver/SERVER/openwfc/panics.h Tue Aug 24 16:17:55 2010 +0100 @@ -160,7 +160,7 @@ EWsPanicUnexpectedBitmapHandleInArray = 125, //Bitmap handle in array with no matching bitmap object in bitmap ref array EWsPanicBitmapNotFound = 126, //Failed to find a bitmap in the bitmap ref array EWsPanicInvalidRotation = 127, //Invalid rotation used - EWsPanicInvalidPointerOffset = 128, //The pointer offset value in wsini.ini is invalid. + EWsPanicInvalidPointerOffset = 128,//NOT USED //The pointer offset value in wsini.ini is invalid. EWsPanicArrayInsertFailed = 129, //Array insert failed. EWsPanicCompleteNullMessage = 130, //RMessage2 is NULL prior to calling Complete(). }; diff -r 314cdf966406 -r b042127c80f6 windowing/windowserver/group/openwfc/BLD.INF --- a/windowing/windowserver/group/openwfc/BLD.INF Fri Aug 06 17:05:55 2010 +0100 +++ b/windowing/windowserver/group/openwfc/BLD.INF Tue Aug 24 16:17:55 2010 +0100 @@ -382,6 +382,7 @@ ../../test/scripts/wspointershifttest_run.bat z:/wstest/wspointershifttest_run.bat ../../test/scripts/epoc_pointershift.ini z:/wstest/epoc_pointershift.ini ../../group/wsini_pointershift_wins.ini z:/wstest/wsini_pointershift_wins.ini +../../group/wsini_pointershift.ini /epoc32/data/z/system/data/wsini_pointershift.ini #endif // SYMBIAN_BUILD_GCE diff -r 314cdf966406 -r b042127c80f6 windowing/windowserver/group/wsini_pointershift.ini Binary file windowing/windowserver/group/wsini_pointershift.ini has changed diff -r 314cdf966406 -r b042127c80f6 windowing/windowserver/group/wsini_pointershift_wins.ini Binary file windowing/windowserver/group/wsini_pointershift_wins.ini has changed diff -r 314cdf966406 -r b042127c80f6 windowing/windowserver/inc/Graphics/openwfc/WSGRAPHICDRAWERINTERFACE.H --- a/windowing/windowserver/inc/Graphics/openwfc/WSGRAPHICDRAWERINTERFACE.H Fri Aug 06 17:05:55 2010 +0100 +++ b/windowing/windowserver/inc/Graphics/openwfc/WSGRAPHICDRAWERINTERFACE.H Tue Aug 24 16:17:55 2010 +0100 @@ -849,7 +849,11 @@ EAlphaChannelTransparencyEnabled, /** True if a clipping rect should be applied when drawing a standard text cursor, false otherwise. The default value is false. */ - ECursorClipRectSet + ECursorClipRectSet, + /** Implicitly defaults to true. Will remain true as long as the application's primary screendevice + is in the same orientation as the device. This information is only given for top-windows, + i.e. children of group-windows, and only when wsini.ini is configured with SIZE_MODE > 0. */ + EScreenDeviceValid }; /** This enum encapsulates the set of non-boolean attribute changes that can be observed diff -r 314cdf966406 -r b042127c80f6 windowing/windowserver/nga/CLIENT/RGC.CPP --- a/windowing/windowserver/nga/CLIENT/RGC.CPP Fri Aug 06 17:05:55 2010 +0100 +++ b/windowing/windowserver/nga/CLIENT/RGC.CPP Tue Aug 24 16:17:55 2010 +0100 @@ -1420,6 +1420,7 @@ { iPimpl->WriteAnyPendingStateChanges(); TWsGcCmdDrawText printText(aPos,aBuf.Length()); + __ASSERT_ALWAYS(((aBuf.Size()+sizeof(printText))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); WriteTextCommand(&printText,sizeof(printText),aBuf,EWsGcOpDrawText,EWsGcOpDrawTextPtr); } @@ -1452,17 +1453,20 @@ if (aHoriz==ELeft && aLeftMrg==0) { TWsGcCmdBoxTextOptimised1 boxTextOpt1(aBox,aBaselineOffset,aBuf.Length()); + __ASSERT_ALWAYS(((aBuf.Size()+sizeof(boxTextOpt1))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); Write(&boxTextOpt1,sizeof(boxTextOpt1),aBuf.Ptr(),aBuf.Size(),EWsGcOpDrawBoxTextOptimised1); } else { TWsGcCmdBoxTextOptimised2 boxTextOpt2(aBox,aBaselineOffset,aHoriz,aLeftMrg,aBuf.Length()); + __ASSERT_ALWAYS(((aBuf.Size()+sizeof(boxTextOpt2))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); Write(&boxTextOpt2,sizeof(boxTextOpt2),aBuf.Ptr(),aBuf.Size(),EWsGcOpDrawBoxTextOptimised2); } } else { TWsGcCmdBoxText boxText(aBox,aBaselineOffset,aHoriz,aLeftMrg,aBuf.Length(),iPimpl->iFont->TextWidthInPixels(aBuf)); + __ASSERT_ALWAYS(((aBuf.Size()+sizeof(boxText))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); WriteTextCommand(&boxText,sizeof(boxText),aBuf,EWsGcOpDrawBoxText,EWsGcOpDrawBoxTextPtr); } } @@ -1471,6 +1475,7 @@ { iPimpl->WriteAnyPendingStateChanges(); TWsGcCmdDrawTextInContext printTextInContext(aPos,aBuf.Length(),aParam->iStart,aParam->iEnd); + __ASSERT_ALWAYS(((aBuf.Size()+sizeof(printTextInContext))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); WriteTextCommand(&printTextInContext,sizeof(printTextInContext),aBuf,EWsGcOpDrawTextInContext,EWsGcOpDrawTextInContextPtr); return KErrNone; } @@ -1483,17 +1488,20 @@ if (aHoriz==ELeft && aLeftMrg==0) { TWsGcCmdBoxTextInContextOptimised1 boxTextOpt1(aBox,aBaselineOffset,aBuf.Length(),aParam->iStart,aParam->iEnd); + __ASSERT_ALWAYS(((aBuf.Size()+sizeof(boxTextOpt1))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); Write(&boxTextOpt1,sizeof(boxTextOpt1),aBuf.Ptr(),aBuf.Size(),EWsGcOpDrawBoxTextInContextOptimised1); } else { TWsGcCmdBoxTextInContextOptimised2 boxTextOpt2(aBox,aBaselineOffset,aHoriz,aLeftMrg,aBuf.Length(),aParam->iStart,aParam->iEnd); + __ASSERT_ALWAYS(((aBuf.Size()+sizeof(boxTextOpt2))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); Write(&boxTextOpt2,sizeof(boxTextOpt2),aBuf.Ptr(),aBuf.Size(),EWsGcOpDrawBoxTextInContextOptimised2); } } else { TWsGcCmdBoxTextInContext boxText(aBox,aBaselineOffset,aHoriz,aLeftMrg,aBuf.Length(),iPimpl->iFont->TextWidthInPixels(aBuf),aParam->iStart,aParam->iEnd); + __ASSERT_ALWAYS(((aBuf.Size()+sizeof(boxText))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); WriteTextCommand(&boxText,sizeof(boxText),aBuf,EWsGcOpDrawBoxTextInContext,EWsGcOpDrawBoxTextInContextPtr); } return KErrNone; @@ -1509,6 +1517,7 @@ { iPimpl->WriteAnyPendingStateChanges(); TWsGcCmdDrawTextVertical printText(aPos,aText.Length(),aUp); + __ASSERT_ALWAYS(((aText.Size()+sizeof(printText))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); WriteTextCommand(&printText,sizeof(printText),aText,EWsGcOpDrawTextVertical,EWsGcOpDrawTextVerticalPtr); } @@ -1535,6 +1544,7 @@ boxText.margin=aMargin; boxText.length=aText.Length(); boxText.width=iPimpl->iFont->TextWidthInPixels(aText); + __ASSERT_ALWAYS(((aText.Size()+sizeof(boxText))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); WriteTextCommand(&boxText,sizeof(boxText),aText,EWsGcOpDrawBoxTextVertical,EWsGcOpDrawBoxTextVerticalPtr); } @@ -1542,6 +1552,7 @@ { iPimpl->WriteAnyPendingStateChanges(); TWsGcCmdDrawTextInContextVertical printText(aPos,aText.Length(),aUp,aParam->iStart,aParam->iEnd); + __ASSERT_ALWAYS(((aText.Size()+sizeof(printText))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); WriteTextCommand(&printText,sizeof(printText),aText,EWsGcOpDrawTextInContextVertical,EWsGcOpDrawTextInContextVerticalPtr); return KErrNone; } @@ -1558,6 +1569,7 @@ boxText.width=iPimpl->iFont->TextWidthInPixels(aText); boxText.start = aParam->iStart; boxText.end = aParam->iEnd; + __ASSERT_ALWAYS(((aText.Size()+sizeof(boxText))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); WriteTextCommand(&boxText,sizeof(boxText),aText,EWsGcOpDrawBoxTextInContextVertical,EWsGcOpDrawBoxTextInContextVerticalPtr); return KErrNone; } diff -r 314cdf966406 -r b042127c80f6 windowing/windowserver/nga/SERVER/EVENT.CPP --- a/windowing/windowserver/nga/SERVER/EVENT.CPP Fri Aug 06 17:05:55 2010 +0100 +++ b/windowing/windowserver/nga/SERVER/EVENT.CPP Tue Aug 24 16:17:55 2010 +0100 @@ -182,6 +182,10 @@ TBool CKeyboardRepeat::iAlternateRepeatExists=EFalse; CWsCaptureLongKey* CKeyboardRepeat::iLongCapture=NULL; +TTimeIntervalMicroSeconds TWindowServerEvent::iPauseInterval; +TTime TWindowServerEvent::iPauseStartTime; +TInt TWindowServerEvent::iConfigationPauseTime = 0; + void TWindowServerEvent::DeleteHotKeys() { @@ -241,6 +245,9 @@ iEventHandlers=RArray(2); iNotificationHandlers=new(ELeave) CArrayFixFlat(2); iDrawerHandlers = new(ELeave) RArray(4); + iPauseInterval = TTimeIntervalMicroSeconds(0); + _LIT(KWSERVIniFileVarEventsPauseAfterRotation,"SUPPRESSEVENTSTIMEAFTERROTATION"); + WsIniFile->FindVar(KWSERVIniFileVarEventsPauseAfterRotation,iConfigationPauseTime); } void TWindowServerEvent::LinkHotKey(CWsHotKey *aWsHotKey) @@ -326,6 +333,9 @@ #else iEventHandlers.AppendL(TRawEventHandler(aEventHandler, aAdvancedPointersEnabled)); //Shouldn't leave #endif +#ifdef LOG_WSERV_EVENTS + RDebug::Printf("{EVNT}TWindowServerEvent::AddEventHandler Added Handler = %d Advanced Pointers Enabled = %d", iEventHandlers.Count(),aAdvancedPointersEnabled); +#endif } void TWindowServerEvent::RemoveEventHandler(const MEventHandler *aEventHandler) @@ -336,6 +346,9 @@ { if (iEventHandlers[ii].iEventHandler==aEventHandler) { +#ifdef LOG_WSERV_EVENTS + RDebug::Printf("{EVNT}TWindowServerEvent::RemoveEventHandler Removed Handler = %d",ii); +#endif if (iEventHandlerCount>0) { iBinaryFlags |= ERemovedEventHandlerWhileProcessingRawEvents; @@ -937,16 +950,62 @@ } } +/* + Pause in processing all raw pointer and key events (except processing by anim's dll plug-ins). + All events will be ignored except for anim's dll plug-ins. + Pause prevents pointer events to come to wrong windows due to screen width and size changes. + @param aPauseInterval - the pause interval in microseconds. +*/ +void TWindowServerEvent::PauseProcessRawEvents(TInt aPauseInterval) + { + iPauseInterval = TTimeIntervalMicroSeconds(aPauseInterval); + iPauseStartTime.UniversalTime(); +#ifdef LOG_WSERV_EVENTS + RDebug::Printf("{EVNT}TWindowServerEvent::PauseProcessRawEvents aPauseInterval = %d",aPauseInterval); +#endif + } + void TWindowServerEvent::ProcessRawEvent(const TRawEvent& aRawEvent) // // Event has completed. // { + TBool pauseProcessEvents = EFalse; + //Check if the pause in processing all raw pointer and key events was set. + if(iPauseInterval.Int64() > 0) + { + TTime current; + current.UniversalTime(); + TTimeIntervalMicroSeconds interval = current.MicroSecondsFrom( + iPauseStartTime); + if ((interval.Int64() > iPauseInterval.Int64()) || (interval.Int64() < 0)) + { + iPauseInterval = TTimeIntervalMicroSeconds(0); + } + else + { + // Set flag ignore of processing all raw events (except processing by anim's dll plug-ins) + // All events will be ignored except for anim's dll plug-ins. + pauseProcessEvents = ETrue; + } + } + +#ifdef LOG_WSERV_EVENTS + if(pauseProcessEvents) + RDebug::Printf("{EVNT}TWindowServerEvent::ProcessRawEvent Processing of Raw Event - DISABLED"); + else + RDebug::Printf("{EVNT}TWindowServerEvent::ProcessRawEvent Processing of Raw Event - ENABLED"); +#endif + TRawEvent::TType eventType = aRawEvent.Type(); TBool isPointerEvent = TWsPointer::IsPointerEventType(eventType); if (isPointerEvent) { - TWsPointer::UpdatePrimaryPointer(aRawEvent); +#ifdef LOG_WSERV_EVENTS + RDebug::Printf("{EVNT}TWindowServerEvent::ProcessRawEvent EventType = 0x0%X PointerNumber = %d PrimaryPointerNumber = %d XY(%d,%d)", + aRawEvent.Type(),aRawEvent.PointerNumber(),TWsPointer::PrimaryPointer(),aRawEvent.Pos().iX,aRawEvent.Pos().iY); +#endif + TWsPointer::UpdatePrimaryPointer(aRawEvent); } TInt count=iEventHandlers.Count(); TInt ii; @@ -966,6 +1025,9 @@ SendEventToKeyClick(aRawEvent); } eventHandled = ETrue; +#ifdef LOG_WSERV_EVENTS + RDebug::Printf("{EVNT}TWindowServerEvent::ProcessRawEvent Event Consumed by Handler No = %d Advanced Pointers Enabled = %d",ii,handler.iAdvancedPointersEnabled); +#endif break; } } @@ -980,14 +1042,44 @@ } } } - if (eventHandled) + if ((eventHandled)||(pauseProcessEvents)) { if (isPointerEvent) - { - TWsPointer::RollbackPrimaryPointer(); + { + //Prevention of the phone pointer event "dead lock". + TPointerEvent::TType type; + TBool handled = ETrue; + GetPointerEvent(type, aRawEvent, handled); + switch(type) + { + case TPointerEvent::EButton1Down: + case TPointerEvent::EButton2Down: + case TPointerEvent::EButton3Down: + TWsPointer::iPointers[aRawEvent.PointerNumber()].iState = TWsPointer::EPointerStateDown; + break; + case TPointerEvent::EButton1Up: + case TPointerEvent::EButton2Up: + case TPointerEvent::EButton3Up: + TWsPointer::iPointers[aRawEvent.PointerNumber()].iState = TWsPointer::EPointerStateUp; + break; + case TPointerEvent::EOutOfRange: + TWsPointer::iPointers[aRawEvent.PointerNumber()].iState = TWsPointer::EPointerStateOutOfRange; + break; + default: + break; + } +#ifdef LOG_WSERV_EVENTS + RDebug::Printf("{EVNT}TWindowServerEvent::ProcessRawEvent Pointer Number= %d State = %x XY(%d,%d)",TWsPointer::iPointers[0].iNumber,TWsPointer::iPointers[0].iState,TWsPointer::iPointers[0].iPos.iX,TWsPointer::iPointers[0].iPos.iY); + RDebug::Printf("{EVNT}TWindowServerEvent::ProcessRawEvent Pointer Number= %d State = %x XY(%d,%d)",TWsPointer::iPointers[1].iNumber,TWsPointer::iPointers[1].iState,TWsPointer::iPointers[1].iPos.iX,TWsPointer::iPointers[1].iPos.iY); +#endif } +#ifdef LOG_WSERV_EVENTS + if(pauseProcessEvents) + RDebug::Printf("{EVNT}TWindowServerEvent::ProcessRawEvent Further Processing of Raw Event - IGNORED"); +#endif return; } + switch(eventType) { case TRawEvent::ERedraw: @@ -1112,6 +1204,10 @@ default: break; } +#ifdef LOG_WSERV_EVENTS + RDebug::Printf("{EVNT}TWindowServerEvent::ProcessRawEvent Pointer Number= %d State = %x XY(%d,%d)",TWsPointer::iPointers[0].iNumber,TWsPointer::iPointers[0].iState,TWsPointer::iPointers[0].iPos.iX,TWsPointer::iPointers[0].iPos.iY); + RDebug::Printf("{EVNT}TWindowServerEvent::ProcessRawEvent Pointer Number= %d State = %x XY(%d,%d)",TWsPointer::iPointers[1].iNumber,TWsPointer::iPointers[1].iState,TWsPointer::iPointers[1].iPos.iX,TWsPointer::iPointers[1].iPos.iY); +#endif } void TWindowServerEvent::ProcessKeyEvent(const TKeyEvent &aKeyEvent,TInt aRepeats) diff -r 314cdf966406 -r b042127c80f6 windowing/windowserver/nga/SERVER/EVENT.H --- a/windowing/windowserver/nga/SERVER/EVENT.H Fri Aug 06 17:05:55 2010 +0100 +++ b/windowing/windowserver/nga/SERVER/EVENT.H Tue Aug 24 16:17:55 2010 +0100 @@ -38,7 +38,7 @@ class CScreen; class DWsScreenDevice; -const TInt KRetryInitialDelay = 100000; //0.01 second +const TInt KRetryInitialDelay = 100000; //0.1 second struct TEventRequestItem { @@ -222,6 +222,9 @@ static void NotifyScreenDrawingEvent(const TRegion* aRegion); static void NotifyScreenDrawingEvent(const TRect& aRect); static inline const CRawEventReceiver* EventReceiver() {return iEventReceiver;} + static void PauseProcessRawEvents(TInt aPauseInterval); + static inline TInt GetConfigationPauseTime(); + private: class TRawEventHandler { @@ -260,6 +263,14 @@ static RArray iWsEventHandlers; static TUint32 iBinaryFlags; static TInt iEventHandlerCount; + + // For supporting a pause in processing raw events after rotation. + // Pause in processing all raw pointer and key events (except processing by anim's dll plug-ins). + // All events will be ignored except for anim's dll plug-ins. + static TTimeIntervalMicroSeconds iPauseInterval; + static TTime iPauseStartTime; + // Filled from wsini.ini , example: SUPPRESSEVENTSTIMEAFTERROTATION 700000 //(0.7sec) + static TInt iConfigationPauseTime; }; @@ -307,5 +318,7 @@ {iScreenDeviceChangedQueue.RemoveFromEventRequestListL(aWindow);} inline TInt TWindowServerEvent::GetStoredModifierState() {return(iModifierState);} +inline TInt TWindowServerEvent::GetConfigationPauseTime() + {return(iConfigationPauseTime);} #endif diff -r 314cdf966406 -r b042127c80f6 windowing/windowserver/nga/SERVER/POINTER.CPP --- a/windowing/windowserver/nga/SERVER/POINTER.CPP Fri Aug 06 17:05:55 2010 +0100 +++ b/windowing/windowserver/nga/SERVER/POINTER.CPP Tue Aug 24 16:17:55 2010 +0100 @@ -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" @@ -53,7 +53,9 @@ CWsPointerBuffer* CWsPointerBuffer::iCurrentBuffer=NULL; CCirBuf* CWsPointerBuffer::iPointerBuffer=NULL; TSglQue CWsPointerBuffer::iList(_FOFF(CWsPointerBuffer,iQue)); -TInt TWsPointer::iYOffset; +TInt TWsPointer::iYOffsetTop; +TInt TWsPointer::iYOffsetBottom; +TInt TWsPointer::iYOffsetMax; #if defined(__WINS__) TBool TWsPointer::iEmulatorRotatePointerCoords; #endif @@ -62,17 +64,20 @@ void TWsPointer::InitStaticsL() { - //This iYOffset setting is specific for capacitive touch screens, where user's finger is the pointer device. + //This iYOffsetTop setting is specific for capacitive touch screens, where user's finger is the pointer device. //This is typically used so that the pointer event location is more inline with where the user perceives their //finger to be on the screen (for example, due to refraction and the relatively large touch area of a finger). - iYOffset = 0; - _LIT( KWSERVIniFileVarYShifting, "YSHIFTING"); - TBool fetchingSucceeded = WsIniFile->FindVar(KWSERVIniFileVarYShifting, iYOffset); - WS_ASSERT_ALWAYS(iYOffset>=0, EWsPanicInvalidPointerOffset); - if ( !fetchingSucceeded ) - { - iYOffset = 0; - } + //The logic used here is to use Yoffset value such that it is max the finger is at the top and keeps on reducing + //when the finger input is moved towards bottom of the screen + iYOffsetTop = 0; + iYOffsetBottom = 0; + iYOffsetMax = 0; + _LIT( KWSERVIniFileVarYShiftingTop, "YSHIFTINGTOP"); + _LIT( KWSERVIniFileVarYShiftingBottom, "YSHIFTINGBOTTOM"); + _LIT( KWSERVIniFileVarYShiftingMax, "YSHIFTINGMAX"); + WsIniFile->FindVar(KWSERVIniFileVarYShiftingTop, iYOffsetTop); + WsIniFile->FindVar(KWSERVIniFileVarYShiftingBottom, iYOffsetBottom); + WsIniFile->FindVar(KWSERVIniFileVarYShiftingMax, iYOffsetMax); #if defined(__WINS__) //An emulator may or may not deploy a renderchain or displaydriver that supports rotated drawing. @@ -527,6 +532,9 @@ break; default:; } +#ifdef LOG_WSERV_EVENTS + RDebug::Printf("{EVNT}TWsPointer::QueuePointerEvent After adding event to clientqueue Event State %d ", iState); +#endif queue->QueueEvent(aEvent,priority); } } @@ -856,6 +864,11 @@ ReLogCurrentWindow(pointerEvent.iPosition,parPos,aForceInGroup); pointerEvent.iParentPosition=parPos; + +#ifdef LOG_WSERV_EVENTS + RDebug::Printf("{EVNT}TWsPointer::ProcessEvent Event send to this window %U", reinterpret_cast(iCurrentWindow)); + RDebug::Printf("{EVNT}TWsPointer::ProcessEvent EventType %d and Event State %d ", eventType, iState); +#endif // update state switch(eventType) { @@ -1007,6 +1020,10 @@ { if (iState != EPointerStateOutOfRange) { +#ifdef LOG_WSERV_EVENTS + RDebug::Printf("{EVNT}TWsPointer::ProcessOutOfRangeEvent Pointer Number = %d, iState =%d ", iNumber, iState); +#endif + // OutOfRange event generated by driver doesn't contain correct coordinates, // we update them from last state in order to deliver event to the proper window. SendEnterExitEvent(EEventPointerExit); @@ -1394,7 +1411,13 @@ TRawEvent::TType type=aRawEvent.Type(); TInt pointerNumber = aRawEvent.PointerNumber(); - + +#ifdef LOG_WSERV_EVENTS + RDebug::Printf("{EVNT}TWsPointer::UpdatePrimaryPointer Current Primary pointer = %d",iPrimaryPointer); + RDebug::Printf("{EVNT}TWsPointer::UpdatePrimaryPointer Pointer Number= %d State = %x XY(%d,%d)",iPointers[0].iNumber,iPointers[0].iState,iPointers[0].iPos.iX,iPointers[0].iPos.iY); + RDebug::Printf("{EVNT}TWsPointer::UpdatePrimaryPointer Pointer Number= %d State = %x XY(%d,%d)",iPointers[1].iNumber,iPointers[1].iState,iPointers[1].iPos.iX,iPointers[1].iPos.iY); +#endif + // If primary pointer is out of range, then the first pointer that will // start being detected (come back in range) will become primary. if (iPointers[iPrimaryPointer].iState == EPointerStateOutOfRange) @@ -1402,6 +1425,9 @@ if (type != TRawEvent::EPointer3DOutOfRange && iPointers[pointerNumber].iState == EPointerStateOutOfRange) { iPrimaryPointer = pointerNumber; +#ifdef LOG_WSERV_EVENTS + RDebug::Printf("{EVNT}TWsPointer::UpdatePrimaryPointer New Primary pointer(case OutRange) = %d",iPrimaryPointer); +#endif } return; } @@ -1410,8 +1436,11 @@ // is not down, then the pointer which has sent EButton1Down becomes primary. if (type == TRawEvent::EButton1Down && iPointers[iPrimaryPointer].iState != EPointerStateDown) - { + { iPrimaryPointer = pointerNumber; +#ifdef LOG_WSERV_EVENTS + RDebug::Printf("{EVNT}TWsPointer::UpdatePrimaryPointer New Primary pointer(case ButtonDown) = %d",iPrimaryPointer); +#endif return; } } @@ -1526,19 +1555,40 @@ will shift all pointer events by a specified Y displacement. @param aY Current y coordinate pointer position. - - */ +*/ void TWsPointer::ShiftYCoordinate(TInt& aY) { - WS_ASSERT_DEBUG(iYOffset>=0, EWsPanicInvalidPointerOffset); - if (aY >= iYOffset) - { - aY -=iYOffset; - } - else - { - aY=0; - } + // If iYOffsetMax is zero or both topOffset and bottomOffset is zero then return without doing anything + if (!iYOffsetMax || !(iYOffsetTop || iYOffsetBottom)) + return; + + if (aY >= iYOffsetMax ) + { + CScreen* screen=iRootWindow->Screen(); + TInt displayHeight = screen->SizeInPixels().iHeight; + + // Gradual reduction of Yoffset depending upon the aY value + TInt offset = iYOffsetTop + iYOffsetBottom - ( iYOffsetTop * + aY / displayHeight ); + + if ( offset > iYOffsetMax ) + { + offset = iYOffsetMax; + } + aY -=offset; + + // As the pixels are zero counted, digitiser would send a pointer with co-ordinates + // from 0 to 239 or 0 to 639, if hieght of the screen was 240 or 640. + // And here we are calulating the Yvalue so it cannot be more than 239 or 639 + if ( aY > (displayHeight-1) ) + { + aY = displayHeight-1; + } + } + else + { + aY = 0; + } } // CWsPointerTimer::CWsPointerTimer(MPointerTimerCallback& aPointerTimerCallback) diff -r 314cdf966406 -r b042127c80f6 windowing/windowserver/nga/SERVER/openwfc/WINDOW.CPP --- a/windowing/windowserver/nga/SERVER/openwfc/WINDOW.CPP Fri Aug 06 17:05:55 2010 +0100 +++ b/windowing/windowserver/nga/SERVER/openwfc/WINDOW.CPP Tue Aug 24 16:17:55 2010 +0100 @@ -674,6 +674,11 @@ aWindowTreeObserver.FlagChanged(*this, MWsWindowTreeObserver::ENonFading, ETrue); } + if(IsTopClientWindow() && (iFlags&EFlagScreenDeviceInvalid) ) + { + aWindowTreeObserver.FlagChanged(*this, MWsWindowTreeObserver::EScreenDeviceValid, EFalse); + } + if(iAnimList) iAnimList->SendState(aWindowTreeObserver); diff -r 314cdf966406 -r b042127c80f6 windowing/windowserver/nga/SERVER/openwfc/cliwin.cpp diff -r 314cdf966406 -r b042127c80f6 windowing/windowserver/nga/SERVER/pointer.h --- a/windowing/windowserver/nga/SERVER/pointer.h Fri Aug 06 17:05:55 2010 +0100 +++ b/windowing/windowserver/nga/SERVER/pointer.h Tue Aug 24 16:17:55 2010 +0100 @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2006-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" @@ -42,6 +42,7 @@ class TWsPointer : public CWsPointerTimer::MPointerTimerCallback { +friend class TWindowServerEvent; enum {EPointerUpdateGapInMicroSeconds=50000}; enum TPointerState { @@ -229,7 +230,10 @@ static TInt iExitHighPressureThreshold; /** Used to offset the y pointer */ - static TInt iYOffset; + /** upgraded to use dynamic value */ + static TInt iYOffsetTop; + static TInt iYOffsetBottom; + static TInt iYOffsetMax; #if defined(__WINS__) /** Tell whether to rotate pointer coords in _WINS_ builds */ diff -r 314cdf966406 -r b042127c80f6 windowing/windowserver/tauto/tptroffset.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/tauto/tptroffset.cpp Tue Aug 24 16:17:55 2010 +0100 @@ -0,0 +1,484 @@ +// Copyright (c) 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" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// YShifting, Wserv gradual reduction of YOffset test code +// +// + +/** + @file + @test + @internalComponent - Internal Symbian test code +*/ + +#include "PARSEINIDATA.H" +#include "tptroffset.h" +#include +#include + +//#define FAILLOG 1 // Uncomment this code to get detailed log + +//CTPointerOffsetBuffer +CTPointerOffsetBuffer::CTPointerOffsetBuffer(RWsSession *aWs, CTPointerOffsetTest *aTest, CTPointerOffsetClient* aClient) + : CTEvent(aWs), iTest(aTest), iClient(aClient) + { + } + +CTPointerOffsetBuffer::~CTPointerOffsetBuffer() + { + } + +void CTPointerOffsetBuffer::ConstructL() + { + CTEventBase::Construct(); + iEventBuffer.SetLengthL(EEventBufferSize); + } + +void CTPointerOffsetBuffer::AddExpectedEvent(TWsEvent &aEvent) + { + iEventBuffer.Add(&aEvent); + } + +TInt CTPointerOffsetBuffer::EventsRemaining() + { + return iEventBuffer.Count(); + } + + +// Main function which gets the event, checks with the event in buffer +// Then calls function NextSetOfEventsL for running other tests of a particualar test case +void CTPointerOffsetBuffer::doRunL() + { + // Get the event from wserv + TWsEvent wsEvent; + iWs->GetEvent(wsEvent); + + TWsEvent expectedEvent; + TInt wsType=wsEvent.Type(); + + // if this is called accidentally + TInt count=iEventBuffer.Count(); + if (count==0 && wsType==EEventFocusGained) + { + goto End; + } + + iEventBuffer.Remove(&expectedEvent); + iEventCount++; + +#if defined(FAILLOG) + TLogMessageText logText; + _LIT(KEventCountCheck, "Checking event number = %d"); + logText.Format(KEventCountCheck, iEventCount); + iTest->LOG_MESSAGE(logText); + _LIT(KEventType, "Actual Event type from Wserv = %d Expected Event Type = %d "); + logText.Format(KEventType, wsEvent.Type(), expectedEvent.Type()); + iTest->LOG_MESSAGE(logText); +#endif + + TestL(wsEvent.Type() == expectedEvent.Type()); + +#if defined(FAILLOG) + _LIT(KEventHandle, "Actual Window Handle from Wserv = %d Expected Window Handle = %d "); + logText.Format(KEventHandle, wsEvent.Handle(), expectedEvent.Handle()); + iTest->LOG_MESSAGE(logText); +#endif + TestL(wsEvent.Handle() == expectedEvent.Handle()); + + TAdvancedPointerEvent *expectedPointerEvent = expectedEvent.Pointer(); + TAdvancedPointerEvent *actualPointerEvent = wsEvent.Pointer(); + + if (wsType == EEventPointer) + { +#if defined(FAILLOG) + _LIT(KPointerType, "Actual PointerType from Wserv = %d Expected PointerType = %d "); + logText.Format(KPointerType, actualPointerEvent->iType, expectedPointerEvent->iType); + iTest->LOG_MESSAGE(logText); +#endif + TestL(actualPointerEvent->iType == expectedPointerEvent->iType); + +#if defined(FAILLOG) + _LIT(KPointerPosition, "Actual PointerPosition from Wserv = (%d, %d) Expected PointerPosition = (%d, %d) "); + logText.Format(KPointerPosition, actualPointerEvent->iPosition.iX, actualPointerEvent->iPosition.iY, expectedPointerEvent->iPosition.iX, expectedPointerEvent->iPosition.iY); + iTest->LOG_MESSAGE(logText); +#endif + TestL(actualPointerEvent->iPosition == expectedPointerEvent->iPosition); + +#if defined(FAILLOG) + _LIT(KPointerNumber, "Actual PointerNumber from Wserv = %d Expected PointerNumber = %d "); + logText.Format(KPointerNumber, actualPointerEvent->PointerNumber(), expectedPointerEvent->PointerNumber()); + iTest->LOG_MESSAGE(logText); +#endif + TestL(actualPointerEvent->PointerNumber() == expectedPointerEvent->PointerNumber()); + } + +End: + // Call NextSetOfEvents() when all the events have been checked + if (iEventBuffer.Count()==0) + { + iTest->NextSetOfEventsL(); // Cannot Leave + } + } + +void CTPointerOffsetBuffer::TestL(TInt aTest) + { + if (!aTest) + { + iTest->Failed(); + User::Leave(ETestFailed); + } + } + +//CTPointerOffsetClient +CTPointerOffsetClient::CTPointerOffsetClient(CTPointerOffsetTest *aTest) + : iTest(aTest) + { + } + +CTPointerOffsetClient::~CTPointerOffsetClient() + { + delete iWin; + } + +void CTPointerOffsetClient::ConstructL() + { + CTClient::ConstructL(); + + // Create a group window and assign it iGroup + iGroup = new(ELeave) CTWindowGroup(this); + iGroup->ConstructL(); + + iWinSize = iScreen->SizeInPixels(); + iWinPos = TPoint(); + + // Create window for this client so that events can come to this client + iWin=new(ELeave) CTBlankWindow(); + iWin->ConstructL(*iGroup); + iWin->SetExt(iWinPos, iWinSize); + iWin->SetColor(KRgbRed); + iWin->BaseWin()->EnableAdvancedPointers(); + iWin->Activate(); + iWs.Flush(); + } + +void CTPointerOffsetClient::AddExpectedPointerEvent(TPointerEvent::TType aType, TPoint aPos, TUint8 aPointerNumber, TUint aHandle) + { + TWsEvent ptrEvent; + ptrEvent.SetType(EEventPointer); + ptrEvent.Pointer()->iParentPosition = aPos; + ptrEvent.Pointer()->iType = aType; + ptrEvent.Pointer()->iPosition = aPos; + ptrEvent.SetPointerNumber(aPointerNumber); + if (!aHandle) + ptrEvent.SetHandle((TUint)iWin); + else + ptrEvent.SetHandle(aHandle); + + static_cast(iEventHandler)->AddExpectedEvent(ptrEvent); + } + +void CTPointerOffsetClient::AddExpectedWsEvent(TEventCode aType, TInt /*aPointerNumber*/, TUint aHandle) + { + TWsEvent ptrEvent; + ptrEvent.SetType(aType); + if (!aHandle) + ptrEvent.SetHandle((TUint)iGroup); + else + ptrEvent.SetHandle(aHandle); + static_cast(iEventHandler)->AddExpectedEvent(ptrEvent); + } + +// Create and store CTPointerOffsetBuffer in iEventHandler +void CTPointerOffsetClient::ConstructEventHandlerL() + { + CTPointerOffsetBuffer* eventBufferAndHandler = new(ELeave) CTPointerOffsetBuffer(&iWs, iTest, this); + eventBufferAndHandler->ConstructL(); + iEventHandler = eventBufferAndHandler; + } + +//CTPointerOffsetTest +CTPointerOffsetTest::CTPointerOffsetTest(CTestStep* aStep) + : CTWsGraphicsBase(aStep) + { + } + +CTPointerOffsetTest::~CTPointerOffsetTest() + { + delete iPointerOffsetClient; + } + +void CTPointerOffsetTest::ConstructL() + { + // If YOffsetValues are not defined in wsini file then just return without doing anything + _LIT(KWsIniFile, "z:\\system\\data\\wsini.ini"); + CIniData* iniData = CIniData::NewL(KWsIniFile, ' '); + _LIT( KWsiniYShiftingTop, "YSHIFTINGTOP"); + if (iniData->FindVar(KWsiniYShiftingTop, iYOffsetTop) == EFalse) + goto FAIL; + _LIT( KWsiniYShiftingBottom, "YSHIFTINGBOTTOM"); + if (iniData->FindVar(KWsiniYShiftingBottom, iYOffsetBottom) == EFalse) + goto FAIL; + _LIT( KWsiniYShiftingMax, "YSHIFTINGMAX"); + if (iniData->FindVar(KWsiniYShiftingMax, iYOffsetMax) == EFalse) + goto FAIL; + delete iniData; + + if (!iYOffsetTop || !iYOffsetBottom || !iYOffsetMax) + { +FAIL: + delete iniData; + TLogMessageText logText1; + _LIT(KWrongHALConfig, "Y Offset values are incorrect. \n"); + logText1.Append(KWrongHALConfig); + LOG_MESSAGE(logText1); + TEST(EFalse); + User::Leave(KErrArgument); + } + iPhysicalScreenSize = TheClient->iScreen->SizeInPixels(); + + // If we fail to get the maxpointernumber then just test with single pointer + TInt ret = HAL::Get(HALData::EPointerMaxPointers, iMaxPointerNumbers); + if (ret != KErrNone || iMaxPointerNumbers < 2 || iMaxPointerNumbers > 8) + { + iMaxPointerNumbers = 1; + } + } + +// Common function for all tests +// Important point to remember is that this function should not leave when running tests +void CTPointerOffsetTest::NextSetOfEventsL() + { + // For each test case calls its respective tests + switch (iTest->iState) + { + case 0: + TestYOffsetValues(); + break; + case 1: + TestYOffsetValues(); + break; + default: + AutoPanic(EAutoPanicWrongTest); + } + } + +void CTPointerOffsetTest::SimulatePointerEvent(TRawEvent::TType aType, TInt aX, TInt aY, TUint8 aPointerNumber) + { + TRawEvent rawEvent; + rawEvent.Set(aType, aX, aY, 0, aPointerNumber); + UserSvr::AddEvent(rawEvent); + } + +void CTPointerOffsetTest::AddExpectedPointerEvent(TPointerEvent::TType aType, TInt aX, TInt aY, TUint8 aPointerNumber, TUint aHandle) + { + iPointerOffsetClient->AddExpectedPointerEvent(aType, TPoint(aX, aY), aPointerNumber, aHandle); + } + +void CTPointerOffsetTest::AddExpectedWsEvent(TEventCode aType, TInt aPointerNumber, TUint aHandle) + { + iPointerOffsetClient->AddExpectedWsEvent(aType, aPointerNumber, aHandle); + } + +// If any of the Tests fails, bring the wserv in a consistent state for other test to run, +// stop ActiveScheduler and display some logs where the fail occured. +void CTPointerOffsetTest::Failed() + { + // Display the test case number, subtest case number and number of events left in the buffer which can be used to + // find out which event actually caused the failure when any test fails + TLogMessageText logText1; + _LIT(KEventsAdded, "Test case number %d Sub test case number %d Events remaining in the buffer %d \n"); + logText1.AppendFormat(KEventsAdded, iTest->iState, iEventSet, iPointerOffsetClient->EventBuffer()->EventsRemaining()); + LOG_MESSAGE(logText1); + RDebug::Printf("Test case number %d Sub test case number %d Events remaining in the buffer %d \n", iTest->iState, iEventSet, iPointerOffsetClient->EventBuffer()->EventsRemaining()); + + CActiveScheduler::Stop(); + iFailed=ETrue; + } + +// Get YValue after applying YOffset using iYOffsetTop, iYOffsetBottom and iYOffsetMax variables. +// Depending upon the Y poistion of input, yOffset is gradually reduced from top of the screen to +// bottom of the screen. +TInt CTPointerOffsetTest::GetShiftedYValue(TInt aY) + { + if (!iYOffsetTop || !iYOffsetMax || !iYOffsetBottom) + return aY; + + TInt offset = 0; + TInt returnValue = aY; + TInt displayHeight = TheClient->iScreen->SizeInPixels().iHeight; + if (aY >= iYOffsetMax) + { + // Gradual reduction of Yoffset depending upon the aY value + offset = iYOffsetTop + iYOffsetBottom - (iYOffsetTop * aY / displayHeight ); + if ( offset > iYOffsetMax ) + { + offset = iYOffsetMax; + } + returnValue -= offset; + if (returnValue > (displayHeight-1)) + { + returnValue = displayHeight-1; + } + } + else + { + returnValue = 0; + } + + return returnValue; + } + +// Common function for all test cases +void CTPointerOffsetTest::RunTestsL() + { + // Create CTPointerOffsetClient for each test case and call NextSetOfEventsL() + iPointerOffsetClient = new(ELeave) CTPointerOffsetClient(this); + iPointerOffsetClient->SetScreenNumber(iTest->iScreenNumber); + iPointerOffsetClient->ConstructL(); + + iEventSet=0; + + TRAPD(err, NextSetOfEventsL()); + if (err != KErrNone) + { + iFailed = ETrue; + } + + // Start nested activescheduler if it is not failed + if (!iFailed) + { + CActiveScheduler::Start(); + } + + TInt eventsRem = iPointerOffsetClient->EventBuffer()->EventsRemaining(); + if (eventsRem > 0) + { + iFailed=ETrue; + } + + delete iPointerOffsetClient; + iPointerOffsetClient = NULL; + } + +// This function is called by TestExecute Framework, through which all the testcases are run +void CTPointerOffsetTest::RunTestCaseL(TInt /*aCurTestCase*/) + { + _LIT(KTest0, "PointerOffset tests"); + _LIT(KTest1, "PointerOffset tests for other pointer"); + + switch(iTest->iState) + { + case 0: + iTest->LogSubTest(KTest0); + iPointerNumber = 0; + RunTestsL(); + break; + case 1: + if (iMaxPointerNumbers == 1) + { + TestComplete(); + } + else + { + iTest->LogSubTest(KTest1); + iPointerNumber = iMaxPointerNumbers-1; + RunTestsL(); + } + break; + case 2: + // Keep this code in last case statement for main test completion + TestComplete(); + break; + default: + AutoPanic(EAutoPanicWrongTest); + } + + // + if (iFailed) + { + TEST(EFalse); + iFailed=EFalse; + } + ++iTest->iState; + } + + +void CTPointerOffsetTest::TestYOffsetValues() + { + TLogMessageText logText; + _LIT(KSet, "Offset tests number : %d of 5"); + logText.AppendFormat(KSet, iEventSet); + LOG_MESSAGE(logText); + + TPoint simulatedPos(iPhysicalScreenSize.iWidth/2, iPhysicalScreenSize.iHeight/2); + TPoint expectedPos(simulatedPos); + switch(iEventSet++) + { + case 0: + // Test any point which has Y value less than YOffsetMax, where Y position would be 0 + simulatedPos.iY = iYOffsetMax - 1; + SimulatePointerEvent(TRawEvent::EButton1Down, simulatedPos.iX, simulatedPos.iY, iPointerNumber); + SimulatePointerEvent(TRawEvent::EButton1Up, simulatedPos.iX, simulatedPos.iY, iPointerNumber); + + expectedPos.iY = 0; + AddExpectedWsEvent(EEventFocusGained); + AddExpectedPointerEvent(TPointerEvent::EButton1Down, expectedPos.iX, expectedPos.iY, iPointerNumber); + AddExpectedPointerEvent(TPointerEvent::EButton1Up, expectedPos.iX, expectedPos.iY, iPointerNumber); + break; + case 1: + // Test any point which has Y value just over YOffsetMax + simulatedPos.iY = iYOffsetMax + 1; + SimulatePointerEvent(TRawEvent::EButton1Down, simulatedPos.iX, simulatedPos.iY, iPointerNumber); + SimulatePointerEvent(TRawEvent::EButton1Up, simulatedPos.iX, simulatedPos.iY, iPointerNumber); + + expectedPos.iY = GetShiftedYValue(simulatedPos.iY); + AddExpectedPointerEvent(TPointerEvent::EButton1Down, expectedPos.iX, expectedPos.iY, iPointerNumber); + AddExpectedPointerEvent(TPointerEvent::EButton1Up, expectedPos.iX, expectedPos.iY, iPointerNumber); + break; + case 2: + // Test any point which has Y value middle of the screen + SimulatePointerEvent(TRawEvent::EButton1Down, simulatedPos.iX, simulatedPos.iY, iPointerNumber); + SimulatePointerEvent(TRawEvent::EButton1Up, simulatedPos.iX, simulatedPos.iY, iPointerNumber); + + expectedPos.iY = GetShiftedYValue(simulatedPos.iY); + AddExpectedPointerEvent(TPointerEvent::EButton1Down, expectedPos.iX, expectedPos.iY, iPointerNumber); + AddExpectedPointerEvent(TPointerEvent::EButton1Up, expectedPos.iX, expectedPos.iY, iPointerNumber); + break; + case 3: + // Test any point which has Y value less than bottommost of the screen + simulatedPos.iY = iPhysicalScreenSize.iHeight - 10; + SimulatePointerEvent(TRawEvent::EButton1Down, simulatedPos.iX, simulatedPos.iY, iPointerNumber); + SimulatePointerEvent(TRawEvent::EButton1Up, simulatedPos.iX, simulatedPos.iY, iPointerNumber); + + expectedPos.iY = GetShiftedYValue(simulatedPos.iY); + AddExpectedPointerEvent(TPointerEvent::EButton1Down, expectedPos.iX, expectedPos.iY, iPointerNumber); + AddExpectedPointerEvent(TPointerEvent::EButton1Up, expectedPos.iX, expectedPos.iY, iPointerNumber); + break; + case 4: + // Test any point which has Y value at bottom of the screen + // As pixels are zero counted and so it cannot be >= iPhysicalScreenSize.iHeight + simulatedPos.iY = iPhysicalScreenSize.iHeight-1; + SimulatePointerEvent(TRawEvent::EButton1Down, simulatedPos.iX, simulatedPos.iY, iPointerNumber); + SimulatePointerEvent(TRawEvent::EButton1Up, simulatedPos.iX, simulatedPos.iY, iPointerNumber); + + expectedPos.iY = GetShiftedYValue(simulatedPos.iY); + AddExpectedPointerEvent(TPointerEvent::EButton1Down, expectedPos.iX, expectedPos.iY, iPointerNumber); + AddExpectedPointerEvent(TPointerEvent::EButton1Up, expectedPos.iX, expectedPos.iY, iPointerNumber); + break; + default: + CActiveScheduler::Stop(); + } + } +// Macro which is used for construction of CTPointerOffsetTestStep object +// and also used to call CreateTestL() which creates CTPointerOffsetTest and CTestBase objects +__WS_CONSTRUCT_STEP__(PointerOffsetTest) diff -r 314cdf966406 -r b042127c80f6 windowing/windowserver/tauto/tptroffset.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/tauto/tptroffset.h Tue Aug 24 16:17:55 2010 +0100 @@ -0,0 +1,155 @@ +// Copyright (c) 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" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +/** + @file + @test + @internalComponent - Internal Symbian test code + */ + +#ifndef TPTROFFSET_H_ +#define TPTROFFSET_H_ + +#include +#include +#include "w32std.h" +#include "../tlib/testbase.h" +#include "AUTO.H" +#include "AUTODLL.H" +#include "TGraphicsHarness.h" + + +class CTPointerOffsetTest; +class CTPointerOffsetClient; + +/* + * CTEvent derived class which acts as eventhandler and eventbuffer + * Stores the events in buffer, which is used for comparing events received from wserv. + */ +class CTPointerOffsetBuffer : public CTEvent + { + enum {EEventBufferSize=40}; +public: + CTPointerOffsetBuffer(RWsSession *aWs, CTPointerOffsetTest *aTest, CTPointerOffsetClient* aClient); + ~CTPointerOffsetBuffer(); + void ConstructL(); + void AddExpectedEvent(TWsEvent &aEvent); + TInt EventsRemaining(); + void SetEventCount(TInt aCount) {iEventCount = aCount;} + +protected: + // Pure virtual from CTEventBase + void doRunL(); +private: + void TestL(TInt aTest); + +private: + CCirBuf iEventBuffer; + CTPointerOffsetTest* iTest; + TInt iEventCount; + CTPointerOffsetClient* iClient; + }; + +/* + * CTClient derived class which gives Wserv client environment + * i,e iWs, iScreen, iGc, iGroup, iEventHandler etc... + * Owns CTPointerOffsetBuffer and stores in iEventhandler of its base class + * Accepts the event from test class and passes them on to buffer class + */ +class CTPointerOffsetClient : public CTClient + { +public: + CTPointerOffsetClient(CTPointerOffsetTest *aTest); + ~CTPointerOffsetClient(); + void ConstructL(); + + inline CTBlankWindow* Win() { return iWin; } + inline CTPointerOffsetBuffer* EventBuffer() {return static_cast(iEventHandler);} + + void AddExpectedPointerEvent(TPointerEvent::TType aType, TPoint aPos, TUint8 aPointerNumber, TUint aHandle = 0); + void AddExpectedWsEvent(TEventCode aType, TInt aPointerNumber = 0, TUint aHandle = 0); + + // Virtual from CTClient + void ConstructEventHandlerL(); + +private: + CTPointerOffsetTest* iTest; + TSize iWinSize; + TPoint iWinPos; + CTBlankWindow* iWin; + }; + + +/* + * CTWsGraphicsBase derived class which implements RunTestCaseL pure virtual. + * Runs all the testcases for pointer events which have offset. + * For each test case it creates CTPointerOffsetClient object and creates a nested activescheduler + * Calls NextSetOfEventsL() which in turn calls respective tests depending upon the testcase number + * For each test, simulate the events and adds the same to CTPointerOffsetBuffer + * When all the tests for a particular testcase completes, stops activescheduler. + * Repeats the same for all testcases + */ +class CTPointerOffsetTest : public CTWsGraphicsBase + { +public: + CTPointerOffsetTest(CTestStep* aStep); + ~CTPointerOffsetTest(); + void ConstructL(); + void NextSetOfEventsL(); + void Failed(); + + // Function for simulating events, which use UserSvr::AddEvent + void SimulatePointerEvent(TRawEvent::TType aType, TInt aX, TInt aY, TUint8 aPointerNumber); + + // Function for adding event, calls the client's AddExpectedPointer + void AddExpectedPointerEvent(TPointerEvent::TType aType, TInt aX, TInt aY, TUint8 aPointerNumber, TUint aHandle = 0); + void AddExpectedWsEvent(TEventCode aType, TInt aPointerNumber = 0, TUint aHandle = 0); + + // Supplementary function for tests + TInt GetShiftedYValue(TInt aY); + + // All tests function can come here + void TestYOffsetValues(); + +protected: + void RunTestCaseL(TInt aCurTestCase); +private: + void RunTestsL(); +private: + TInt iYOffsetTop; + TInt iYOffsetBottom; + TInt iYOffsetMax; + + TInt iEventSet; // Set of events for one particular test case + TBool iFailed; + TSize iPhysicalScreenSize; + TInt iPointerNumber; + TInt iMaxPointerNumbers; + + CTPointerOffsetClient *iPointerOffsetClient; + }; + +class CTPointerOffsetTestStep : public CTGraphicsStep + { +public: + CTPointerOffsetTestStep(); +protected: + //from CTGraphicsStep + virtual CTGraphicsBase* CreateTestL(); + }; + +_LIT(KTPointerOffsetTestStep, "TPointerOffsetTest"); + +#endif /*TPTROFFSET_H_*/ diff -r 314cdf966406 -r b042127c80f6 windowing/windowserver/test/TAutoServer/TAutoServer.cpp --- a/windowing/windowserver/test/TAutoServer/TAutoServer.cpp Fri Aug 06 17:05:55 2010 +0100 +++ b/windowing/windowserver/test/TAutoServer/TAutoServer.cpp Tue Aug 24 16:17:55 2010 +0100 @@ -1,4 +1,4 @@ -// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2005-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" @@ -85,6 +85,7 @@ #include "tmultiptrevent.h" #include "tdrawresource.h" #include "twindowsizecache.h" +#include "tptroffset.h" /* Path to the script z:\GraphicsTest\gditest.script @@ -336,6 +337,8 @@ testStep = new CTDrawResourceStep(); else if(aStepName == KTWindowSizeCacheTestStep) testStep = new CTWindowSizeCacheTestStep(); + else if(aStepName == KTPointerOffsetTestStep) + testStep = new CTPointerOffsetTestStep(); #endif return testStep; } diff -r 314cdf966406 -r b042127c80f6 windowing/windowserver/test/TAutoServer/openwfc/TAutoServer_nga.mmp --- a/windowing/windowserver/test/TAutoServer/openwfc/TAutoServer_nga.mmp Fri Aug 06 17:05:55 2010 +0100 +++ b/windowing/windowserver/test/TAutoServer/openwfc/TAutoServer_nga.mmp Tue Aug 24 16:17:55 2010 +0100 @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2006-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" @@ -102,6 +102,8 @@ SOURCE tmultiptrevent.cpp SOURCE tdrawresource.cpp SOURCE twindowsizecache.cpp +SOURCE tptroffset.cpp + //Required to test CommamdBuffer::Play using MWsGraphicsContext in tgc SOURCE directgdigcwrapper.cpp diff -r 314cdf966406 -r b042127c80f6 windowing/windowserver/test/scripts/wstest_t_pointershifttest_nga.script --- a/windowing/windowserver/test/scripts/wstest_t_pointershifttest_nga.script Fri Aug 06 17:05:55 2010 +0100 +++ b/windowing/windowserver/test/scripts/wstest_t_pointershifttest_nga.script Tue Aug 24 16:17:55 2010 +0100 @@ -1,5 +1,5 @@ // -// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2009-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" @@ -14,24 +14,24 @@ // Description: // -PRINT Run WServ NGA pointer event tests on screen 0 +PRINT Run WServ YShifting pointer offset test on screen 0 LOAD_SUITE tautoserver_nga PRINT Run Final WServ pointer shift tests on screen 0 DELAY 5000 //!@SYMTestCaseID graphics-wserv-CR2052-0001 -//!@SYMPREQ CR2052 -//!@SYMTestCaseDesc Test pointer event positions for offset YSHIFTING in wsini.ini -//!@SYMTestActions Simulate the pointer click events in various positions/rotations. A keyword YSHIFTING with a value greater than 0 should required to test the pointer offset. -//! Add those event in event queue and retrieve the positions from the event queue for verification +//!@SYMPREQ CR2052 +//!@SYMTestCaseDesc Test pointer event positions for offset YSHIFTINGTOP, YSHIFTINGBOTTOM and YSHIFTINGMAX values in wsini.ini +//!@SYMTestActions Simulate the pointer click events in various positions on the screen. The above keywords with a value other than 0 +//! is required to test the pointer offset. Add those event in event queue and retrieve the positions from the event queue for verification. +//! Repeat the above tests for different pointer number. //!@SYMTestStatus Implemented //!@SYMTestPriority 2 -//!@SYMTestExpectedResults Simlated pointer position and expected pointer positions should match. +//!@SYMTestExpectedResults Simlated pointer position and expected pointer positions should match. //!@SYMTestType CT -RUN_TEST_STEP 1500 tautoserver_nga TEventTest -RUN_TEST_STEP 200 tautoserver_nga TMultiPtrEventTest +RUN_TEST_STEP 1500 tautoserver_nga TPointerOffsetTest