webengine/osswebengine/MemoryManager/Inc/MemoryManager.h
changeset 0 dd21522fd290
child 36 0ed94ceaa377
--- /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 <e32std.h>
+#include <e32base.h>
+
+// 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_