diff -r 000000000000 -r dd21522fd290 webengine/osswebengine/MemoryManager/Inc/MemoryManager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/osswebengine/MemoryManager/Inc/MemoryManager.h Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,302 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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 _MEMORYMANAGER_H_ +#define _MEMORYMANAGER_H_ + +// INCLUDES +#include +#include + +// CONSTANTS + +// MACROS +// + +// DATA TYPES +enum TOOMCheckResult + { + ENoOOM = 0x0000, // no oom + ECheckOOM = 0x0001, // last memory check failed + EUserAllocOOM = 0x0002, // system heap allocation failed + ERescueOOM = 0x0004, // rescue buffer allocation failed + ECollecting = 0x0010, // memory manager is collecting memory + EStopping = 0x0020 // memory menager is stopping operations + }; + +// simulate OOM, for debugging purpose +enum TOOMType + { + EOOM_None = 0x0000, + EOOM_Heap1 = 0x0001, // fail the first heap allocation + EOOM_Heap2 = 0x0003, // fail the second heap allocation, after collection + EOOM_Rescue = 0x0007 // fail the rescue allocation + }; + +enum TOOMPriority + { + EOOM_PriorityLow = 0, + EOOM_PriorityMiddle, + EOOM_PriorityHigh, + EOOM_PriorityCritical + }; + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class CAllocator; +class FunctionLogger; + +// CLASS DECLARATION + +/** +* +* @lib memman.lib +* @since 3.1 +*/ +class MMemoryCollector + { + public: // New functions + /** + * Collect free memory, this function is called when allocation from + * System heap fails + * @since 3.1 + * @param amount of memory needs to be collected + * @return amount of memory collected + */ + virtual TUint Collect(TUint aRequired) = 0; + + /** + * restore the entity controlled memory collector when there is enough memory + * System heap fails + * @since 3.1 + * @param + * @return + */ + virtual void Restore() = 0; + + /** + * Priority of this collector, 0 - lowest, 10 - highest; + * the lower the priority, the earlier this collector is executed. + * @since 3.1 + * @param + * @return + */ + virtual TOOMPriority Priority() = 0; + }; + +/** +* +* @lib memman.lib +* @since 3.1 +*/ +class MOOMStopper + { + public: // New functions + /** + * Stop currently on-going operations, called by the allocator + * @since 3.1 + * @param + * @return + */ + virtual void Stop() = 0; + + /** + * return the priority of this stopper (1-100), allocator expects this value + * to determine the stopping order. The higher the priority is, the sooner + * this stopper will be called. + * @since 3.1 + * @param + * @return + */ + virtual TOOMPriority Priority() = 0; + }; + +/** +* +* @lib memman.lib +* @since 3.1 +*/ +class MOOMNotifier + { + public: // New functions + /** + * client provided notifying utility function, called by the allocator + * to inform the user + * @since 3.1 + * @param + * @return + */ + virtual TInt Notify() = 0; + }; + +/** +* A class handles all memory operations and OOM issues +* @lib memman.lib +* @since 3.1 +*/ +class MemoryManager + { + public: + /** + * register a memory collector, memory manager doesn't own this collector + * @since 3.1 + * @param aCollector the collector to be registered + * @param + * @return + */ + IMPORT_C static void AddCollector( MMemoryCollector* aCollector ); + + /** + * unregister a memory collector + * @since 3.1 + * @param aCollector the collector to be unregistered + * @param + * @return + */ + IMPORT_C static void RemoveCollector( MMemoryCollector* aCollector ); + + /** + * register a stopper, memory manager doesn't own this stopper. + * @since 3.1 + * @param aStopper the stopper to be registered + * @param + * @return + */ + IMPORT_C static void AddStopper( MOOMStopper* aStopper ); + + /** + * unregister a stopper + * @since 3.1 + * @param aStopper the stopper to be unregistered + * @param + * @return + */ + IMPORT_C static void RemoveStopper( MOOMStopper* aStopper ); + + /** + * set the OOM notifier, memory manager doesn't own this notifier + * @since 3.1 + * @param aNotifier the notifier + * @param + * @return + */ + IMPORT_C static void SetNotifier( MOOMNotifier* aNotifier ); + + /** + * check if the memory manager is able to reserve enough memory for the coming operation. + * @since 3.1 + * @param aTotalSize total amount of memory + * @param aMaxBufSizse the biggest contiguous memory buffer + * @param aChecker the name of operation + * @return result of prechecking, ETrue = successful + */ + IMPORT_C static TBool PreCheck( TUint aTotalSize, TUint aMaxBufSize, const TDesC8& aChecker=KNullDesC8 ); + + /** + * An additional check after an operation is completed. + * @since 3.1 + * @param + * @param + * @return the status of memory during this operation. + */ + IMPORT_C static TUint PostCheck(); + + /** + * Get the status of memory manager, specific state could be retrieve by AND (&) operator + * with TOOMCheckResult enum + * @since 3.1 + * @param + * @param + * @return the status of memory during this operation. + */ + IMPORT_C static TUint Status(); + + /** + * Trigger an OOM event, this function is only for debugging purpose + * @since 3.1 + * @param aType defines where memory allocation fails + * @param + * @return + */ + IMPORT_C static void SetStatus( TOOMCheckResult aType = ENoOOM ); + + /** + * Prepare Memory manager for the coming application exit. + * @since 3.1 + * @param + * @param + * @return + */ + IMPORT_C static void PrepareForExit(); + + /** + * Free some RAM. Calls collect on registered collectors + * @since 3.1 + * @param + * @param + * @return + */ + IMPORT_C static void FreeRam(); + + /** + * Called when application is no longer in OOM situation. + * @since 3.1 + * @param + * @param + * @return + */ + IMPORT_C static void RestoreCollectors(); + + /** + * Called when application wants to change the rescue buffer size + * @since 3.1 + * @param + * @param + * @return + */ + IMPORT_C static void SetRescueBufferSize(TInt aSize); + + /** + * retrieve the size of an allocated memory cell + * @since 3.1 + * @param + * @param + * @return + */ + IMPORT_C static TUint MemorySize(TAny* aPtr); + + /** + * switch to the allocator using fast dlmalloc + * @since 3.1 + * @param + * @param + * @return + */ + IMPORT_C static RAllocator* SwitchToFastAllocator(); + + /** + * switch to the default allocator provided by Symbian OS, + * and close the current fast allocator. + * @since 3.1 + * @param + * @param + * @return + */ + IMPORT_C static void CloseFastAllocator(RAllocator* aDefaultAllocator); + }; + +#endif// !_MEMORYMANAGER_H_