diff -r 000000000000 -r 5d03bc08d59c graphicsdeviceinterface/directgdiadaptation/hwsrc/vgimagecache.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graphicsdeviceinterface/directgdiadaptation/hwsrc/vgimagecache.h Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,79 @@ +// Copyright (c) 2007-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 VGIMAGECACHE_H_ +#define VGIMAGECACHE_H_ + +/** +@file +@internalComponent Reference implementation of Open VG hardware accelerated DirectGDI adaptation. +*/ +#include +#include +#include +#include + + +/** +A class for managing a cache of VGImages. +Each VGImage has a CFbsBitmap associated with it. +The CFbsBitmap's serial number is used to retrieve VGImages from the cache +as these are unique to the bitmap for the lifetime of the system. +*/ +NONSHARABLE_CLASS(CVgImageCache): public CBase, public MVgImageCache + { +public: + CVgImageCache(TInt aMaxCacheSize); + ~CVgImageCache(); + TBool AddImage(const CFbsBitmap& aBitmap, VGImage& aImage, const TPoint& aOrigin); + VGImage GetVgImageFromBitmap(const CFbsBitmap& aBitmap, const TPoint& aOrigin); + + //MVgImageCache commands + TBool IsInCache(TInt64 aSerialNumber); /**< @internalTechnology*/ + TInt TouchCount(TInt64 aSerialNumber); /**< @internalTechnology*/ + TInt NumEntries() const; /**< @internalTechnology*/ + void GetOrderedCacheEntries(TInt64& aSerialNumberList, TInt aListSize); /**< @internalTechnology*/ + TInt CacheSizeInBytes() const; /**< @internalTechnology*/ + TInt MaxCacheSize() const; /**< @internalTechnology*/ + void ResetCache(); /**< @internalTechnology*/ + TInt SetMaxCacheSize(TInt aMaxCacheSize); /**< @internalTechnology*/ + +private: + NONSHARABLE_CLASS(CVgImageCacheItem): public CBase + { + public: + CVgImageCacheItem(); + ~CVgImageCacheItem(); + + TDblQueLink iLink; + VGImage iImage; /**< VGImage created from CFbsBitmap.*/ + TInt64 iSerialNumber; /**< Bitmap ID used to select VGImage.*/ + TInt iImageSizeInBytes; + TInt iTouchCount; /**< Touch count of CFbsBitmap when VGImage was stored.*/ + TPoint iOrigin; /**< Origin used to tile image when created.*/ + }; + void DeleteItem(CVgImageCacheItem* aItem); + static TUint32 Hash(const TInt64& aKey); + +private: + RHashMap iCacheItemMap; /**< Maps bitmap's unique identifier to a cache item.*/ + TDblQue iVgImageCache; /**< Least-recently used ordered queue (most-recently used at head).*/ + TInt iCacheSizeInBytes; + TInt iMaxCacheSizeInBytes; + TInt iNumMatchMisses; /**< Number of unsuccessful matches when retrieving VGImage from cache.*/ + TInt iNumMatchTries; /**< Number of attempts to retrieve VGImage from cache.*/ + }; + +#endif /*VGIMAGECACHE_H_*/