diff -r 000000000000 -r 15bf7259bb7c uiaccelerator_plat/alf_visual_api/inc/goommonitor/goommonitorplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiaccelerator_plat/alf_visual_api/inc/goommonitor/goommonitorplugin.h Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,191 @@ +/* +* Copyright (c) 2006-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: Main functionality for Graphics Out of Memory Monitor +* +*/ + + +#ifndef GOOMMONITORPLUGIN_H +#define GOOMMONITORPLUGIN_H + +#include + +class CMemoryMonitor; +class RFs; +class RWsSession; + + +/** +* Panic codes with category "OomMonitorPlugin" +*/ +enum TGOomMonitorPluginPanic + { + /** + * The plugin has been constructed by a thread other than the GOOM monitor. + */ + EGOomMonitorPluginPanic_PluginConstructedOutsideGOomMonitorThread + }; + +// Message type used to signal an GOOM plug-in to free some memory. +const TInt KAppGOomMonitor_FreeRam = 0x10282304; + +// Message type used to signal an OOM plug-in that there is free memory again. +const TInt KAppGOomMonitor_MemoryGood = 0x10282305; + +class CGOomMonitorPluginBase : public CBase + { +public: + /** + * Constructor + * Plugins should assume that the system memory is good when + * they are created. + */ + IMPORT_C CGOomMonitorPluginBase(); + /** + * Destructor + */ + IMPORT_C ~CGOomMonitorPluginBase(); + /** + * 2nd stage constructor + */ + IMPORT_C void ConstructL(); + +public: + /** + * FreeRam is called when the system RAM level becomes + * low. This plugin is requested to help free some RAM. + */ + virtual void FreeRam(TInt aBytesToFree) = 0; + + /** + * MemoryGood is called when the system RAM level becomes + * good after being low.The plugin may take this opportunity + * to start using RAM again. + * Nb It is assumed that the plugin will not immediately + * cause a large increase in memory use, but that memory may be + * used over time, otherwise the plugin may cause oscillation + * between low and good memory states. + */ + virtual void MemoryGood() = 0; + +public: + /** + * Get a handle to the file server. + * @return a connected file server session. + */ + IMPORT_C RFs& FsSession(); + /** + * Get a handle to the window server. + * @return a connected window server session. + */ + IMPORT_C RWsSession& WsSession(); + + IMPORT_C virtual void ExtensionInterface(TUid aInterfaceId, TAny*& aImplementaion); + +private: + CMemoryMonitor* iMemoryMonitor; + }; + + +class CGOomMonitorPlugin : public CGOomMonitorPluginBase + { +public: // new functions + + CGOomMonitorPlugin():CGOomMonitorPluginBase(){} + +public: // From CGOomMonitorPluginBase + /** + * FreeRam is called when the system graphics memory level becomes + * low. This plugin is requested to help free some RAM. + * + * this version of the function should not need to be implemented. + * The definition of this function should change once the alf plugin is stable and finetuned + * @param aBytesToFree The minimum number of bytes of free memory that the plugin should try to free. + */ + + virtual void FreeRam(TInt aBytesToFree) = 0; + + /** + * MemoryGood is called when the system RAM level becomes + * good after being low.The plugin may take this opportunity + * to start using RAM again. + * Nb It is assumed that the plugin will not immediately + * cause a large increase in memory use, but that memory may be + * used over time, otherwise the plugin may cause oscillation + * between low and good memory states. + */ + virtual void MemoryGood() = 0; + }; + + + +/** +* CAppOomMonitorPlugin is a specialised OOM monitor plugin +* that sends messages to applications when the memory state +* changes. +* The target application is specified by the appUid parameter. +* the message will be sent to all running instances of this app. +* The messages are: +* KAppOomMonitor_FreeRam when memory should be released. +* KAppOomMonitor_MemoryGood when memory is good again. +* +* These messages can be picked up in the app UI like this: +* void CMyAppUi::HandleApplicationSpecificEventL(TInt aType, const TWsEvent& aEvent) +* { +* CAknAppUi::HandleApplicationSpecificEventL(aType, aEvent); +* if (aType == KAppOomMonitor_FreeRam) +* { +* // release memory and disable memory use +* } +* else if (aType == KAppOomMonitor_MemoryGood) +* { +* // re-enable memory use +* } +* } +* +* The plugin can be instantiated in an ECom factory function. +* The application does not need to derive from this class. +* For example: +* TAny* CreateAppPlugin() +* { +* return CAppOomMonitorPlugin::NewL(KMyAppUid); +* } +*/ +NONSHARABLE_CLASS(CAppGOomMonitorPlugin) : public CGOomMonitorPluginBase + { +public: + IMPORT_C static CAppGOomMonitorPlugin* NewL(TUid aAppUid); + +private: + CAppGOomMonitorPlugin(TUid aAppUid); + + void FreeRam(TInt aFreeMemory); + void MemoryGood(); + + void SendMessageToApp(TInt aMessage); + +private: + TUid iAppUid; + }; + + +/** +* Sets the CMemoryMonitor object for this DLL. +* Only for use by CMemoryMonitor. +* @internal +*/ +IMPORT_C void SetGMemoryMonitorTls(CMemoryMonitor* aMonitor); + + +#endif // OOMMONITORPLUGIN_H