diff -r 000000000000 -r 5d03bc08d59c fbs/fontandbitmapserver/sfbs/UTILS.H --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fbs/fontandbitmapserver/sfbs/UTILS.H Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,242 @@ +// Copyright (c) 1998-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: +// + +#ifndef __UTILS_H__ +#define __UTILS_H__ + +#include +#include +#include +#include + + + +/** +@internalComponent +*/ +_LIT(KFBSERVPanicCategory,"FBSERV"); +_LIT(KFBSERVGlobalThreadName,"!Fontbitmapserver"); +_LIT(KFBSERVSharedChunkName,"FbsSharedChunk"); +_LIT(KFBSERVLargeChunkName,"FbsLargeChunk"); +#ifdef SYMBIAN_DEBUG_FBS_LOCKHEAP +_LIT(KFBSERVDebugMutexName,"FbsDebugMutex"); +#endif + +/** +@internalComponent +*/ +const TUid KUidCFbsBitmapCreation={0x0009A2C}; +/** +@internalComponent +*/ +enum TFbsPanic + { + EFbsPanicNoConnection=1, + EFbsPanicBadConnection, + EFbsPanicUnknownMessage, + EFbsPanicActiveSchedulerError, + EFbsPanicStartupFailed, + EFbsTypefaceStoreError, + EFbsFontCreateFailed, + EFbsFontAddressViolation, + EFbsBitmapInvalidFormat, + EFbsBitmapInvalidMode, + EFbsBitmapInvalidCompression, + EFbsBitmapDecompressionError, + EFbsPanicChunkError, + EFbsColor256UtilError, + EFbsHardwareBitmapError, + EFbsNotSupportedForCompression, + EFbsBitmapAlignment, + EFbsBitmapInvalidScanLinePtr, + EFbsBitmapInvalidMode2, + EFbsBitmapInvalidMode3, + EFbsBitmapSwappingImpossible, + EFbsPanicBadHeapLock, + EFbsShaperNotYetCalled, + EFbsShaperInvalidArguments, + EFbsInvalidCompressionThreshold, + EFbsTypefaceIndexOutOfRange, + EFbsPanicBitmapDataCopy, + EFbsPanicBitmapReadOnly + }; + +class TScanLine +/** +@internalComponent +*/ + { +public: + TPoint iPoint; + TInt iLength; + TDisplayMode iDispMode; + }; + +class TBmpSpec +/** +@internalComponent +*/ + { +public: + TSize iSizeInPixels; + TDisplayMode iDispMode; + TInt iHandle; + TInt iServerHandle; + TInt iAddressOffset; + }; + +class TBmpHandles +/** +@internalComponent +*/ + { +public: + TInt iHandle; + TInt iServerHandle; + TInt iAddressOffset; + }; + +class TFontInfo +/** +@internalComponent +*/ + { +public: + TInt iHandle; + TInt iAddressOffset; + TInt iServerHandle; + }; + +class TSizeInfo +/** +@internalComponent +*/ + { + public: + TSizeInfo(){} + TSizeInfo(TInt aMaxHeight,TSize aDevSize):iMaxHeight(aMaxHeight),iDevSize(aDevSize) {} + + TInt iMaxHeight; + TSize iDevSize; + }; + +class TIntParcel +/** +@internalComponent +*/ + { +public: + TInt iInt; + }; + +class TLoadBitmapArg +/** +@internalComponent +*/ + { +public: + TInt iBitmapId; + TInt iShareIfLoaded; + TInt iFileOffset; + }; + + +IMPORT_C extern const TInt KFbServLargeChunkGrowByShifter; +IMPORT_C extern const TInt KFbServLargeChunkSizeShifter; +IMPORT_C extern const TInt KFbServLargeChunkMinPhysicalSize; +IMPORT_C extern const TInt KFbServLargeChunkMinVirtualSize; +IMPORT_C extern const TInt KFbServLargeChunkMaxVirtualSize; + + +class CChunkPile : public CBase +/** +@internalComponent +*/ + { +public: + IMPORT_C ~CChunkPile(); + IMPORT_C static CChunkPile* NewL(const RChunk& aChunk); + IMPORT_C TUint8* Alloc(TInt aSize); + IMPORT_C void Free(TAny* aCell); + IMPORT_C TUint8* ChunkBase() const; + IMPORT_C static TInt VirtualSize(); +private: + CChunkPile(const RChunk& aChunk); + void ConstructL(); + TInt DoAlloc(TUint8*& aCell, TInt aSize, RPointerArray& aCells, RArray& aFreeCellLinks, TBool aLarge); + void DoFree(TUint8* aCell, RPointerArray& aCells, RArray& aFreeCellLinks, TBool aLarge); + TInt GrowSmallSection(TInt aSize, TInt aLastFreeCell); + void ShrinkSmallSection(TInt aShrinkBy); +private: + RChunk iChunk; + TInt iPageSize, iPageMask; + RPointerArray iSmallCells; // last address is not a cell but the top of the small section + RArray iFreeSmallCellLinks; // index of Nth free small cell is element 0 + element 1 + ... + element N-1 + TInt iLargeSectionBottom; // boundary between small & large sections + RPointerArray iLargeCells; // last address is not a cell but the top of the large section + RArray iFreeLargeCellLinks; // index of Nth free large cell is element 0 + element 1 + ... + element N-1 + RCriticalSection iLock; + }; + +/** +Used to pass sizes of FBServs default heap, heap for large bitmaps, and heap for small bitmaps. + +@internalComponent +@test +*/ +struct THeapSizes + { + TInt iDefault; + TInt iBig; + TInt iSmall; + }; + +/** +Used when the EFbsMessRasterize message is sent from client to server. Allows pointers to items +created on the shared FBServ heap to be passed from the server to the client as offsets from the +heap base. Valid pointers are recreated client side using these offsets combined with the client's +heap base. + +@internalComponent + */ +struct TRasterizeParams + { + TInt iMetricsOffset; + TInt iBitmapPointerOffset; + }; + +IMPORT_C extern const TInt KFbServWritableDataPagingMode; + +/** +Used to specify the writable data paging mode of fbserv. +This may be set using the patchable constant KFbServWritableDataPagingMode at rom-build time via the definitions: + SYMBIAN_GRAPHICS_FBSERV_PAGEDATA -request that fbserv writable data is paged. + SYMBIAN_GRAPHICS_FBSERV_UNPAGEDDATA -request that fbserv writable data is unpaged. + SYMBIAN_GRAPHICS_FBSERV_PAGE_BITMAP_DATA_ONLY -request that only bitmap data is paged. + SYMBIAN_GRAPHICS_FBSERV_PAGE_BITMAP_DATA_AND_SHARED_HEAP_ONLY -request that only bitmap data and shared heap are paged. +@internalComponent +*/ +enum TFbsWritableDataPagingMode + { + EFbsWdpDefault=0x00, //No change to the rom-build writable data paging configuration (nothing was specified). + EFbsWdpPagedData=0x01, //SYMBIAN_GRAPHICS_FBSERV_PAGEDATA was specified. + EFbsWdpUnpagedData=0x02, //SYMBIAN_GRAPHICS_FBSERV_UNPAGEDDATA was specified. + EFbsWdpPageBitmapDataChunkOnly=0x03, //SYMBIAN_GRAPHICS_FBSERV_PAGE_BITMAP_DATA_ONLY was specified. + EFbsWdpPageBitmapDataAndSharedHeapChunksOnly=0x04, //SYMBIAN_GRAPHICS_FBSERV_PAGE_BITMAP_DATA_AND_SHARED_HEAP_ONLY was specified. + }; + +#endif + +