Add LRU cache of rendered bitmaps, to improve redraw performance in the absence of graphics HW support for OpenVG
/** Copyright (c) 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 CDLSFILES#define CDLSFILES#include <CdlDllWatcher.h>/*** A collection of CDir objects.*/class CCdlDirs : public CArrayPtrFlat<CDir> {public: CCdlDirs(); ~CCdlDirs(); };/*** Mixin interface for objects that want to observe activity in the file system watcher*/class MFsWatcherObserver {public: virtual void NewDirsList(CCdlDirs* aNewDirs) = 0; };/*** The file system watcher active object.* This watches the ?:\system\cdl directories for changes in the available CDL DLLs.*/class CFsWatcher : public CActive {public: CFsWatcher(RFs& aFs, MFsWatcherObserver& aObserver); ~CFsWatcher(); void ConstructL(); CCdlDirs* CreateDirsListL() const;private: void DoCancel(); void RunL(); void DoRunL(); void Queue();private: RFs& iFs; MFsWatcherObserver& iObserver; };/*** Self driven active object that maintains a list of the currently available CDL DLLs.* It trickles changes in this set of DLLs to it's observer. This is done one DLL at a time* to avoid hanging up the server on a long running scan of all CDL DLLs.*/class CCdlDllsWatcher : public CCdlDllsWatcherBase, MFsWatcherObserver {public: CCdlDllsWatcher(RFs& aFs, MCdlDllsObserver* aObserver); ~CCdlDllsWatcher(); void ConstructL();private: // from CActive void DoCancel(); void RunL();private: // from MFsWatcherObserver void NewDirsList(CCdlDirs* aNewDirs);private: void DoRunL(); void Queue(); void StartTellingObserverIfNecessaryL(); void AddNewToObserverL(); void RemoveCurrentFromObserverL();private: // from CCdlDllsWatcherBase TInt IsPluginInRom(const TDesC& aFileName, TBool& aIsInRom) const;private: class TDllList { public: // List functions. // These functions iterate all the DLLs in name order. // Drive order is ignored, except when the same name appears in more // than one drive, when CDL drive priority rules are observed. void Reset(); const TEntry& Current() const; TBool AtEnd() const; void Next(); // Current entry comparison operators. // These compare the current entry for two DLL lists by name then // date modified. TBool operator==(const TDllList& aRhs) const; TBool operator<(const TDllList& aRhs) const; private: void SetCurrent(); public: CCdlDirs* iDirs; // not owned TInt iIndices[KMaxDrives]; const TEntry* iCurrent; }; TDllList iCurrent; // .iDirs is owned TDllList iNew; // .iDirs is owned CCdlDirs* iNext; // owned, temporary storage for new dirs list while processing on-going TBool iTellingObserver; MCdlDllsObserver* iObserver; CFsWatcher* iFsWatcher; // owned };#endif