webengine/osswebengine/MemoryManager/Src/MemoryManager.cpp
branchRCL_3
changeset 94 919f36ff910f
parent 93 79859ed3eea9
--- a/webengine/osswebengine/MemoryManager/Src/MemoryManager.cpp	Tue Aug 31 16:17:46 2010 +0300
+++ b/webengine/osswebengine/MemoryManager/Src/MemoryManager.cpp	Wed Sep 01 12:28:30 2010 +0100
@@ -18,9 +18,10 @@
 
 // INCLUDE FILES
 
-#include "MemoryManager.h"
+#include <MemoryManager.h>
 #include "MemoryPool.h"
 #include "FastAllocator.h"
+#include "MemoryLogger.h"
 
 // CONSTANTS
 
@@ -31,16 +32,6 @@
 //  initializing a global memory pool.
 static CMemoryPool *s_pool = 0;
 
-struct cleanupMemoryPool {
-    ~cleanupMemoryPool() {
-    	if(s_pool)
-    		{
-    		delete s_pool;
-    		s_pool = NULL;
-    		}
-    }
-};
-static cleanupMemoryPool deleteMemoryPool;
 
 //-----------------------------------------------------------------------------
 // Pool() - a utility function for accessing the right memory pool
@@ -58,16 +49,50 @@
     }
 
 //-----------------------------------------------------------------------------
+// MemoryManager::CreateAllocator
+//-----------------------------------------------------------------------------
+EXPORT_C void MemoryManager::CreateFastAllocator()
+    {
+    // create the right memory pool
+    MEM_LOG_CREATE();    
+#ifdef __NEW_ALLOCATOR__
+    CMemoryPool *pool = new CNewSymbianHeapPool();
+    pool->Create();
+    RSymbianDlAllocatorWrapper* allocator = new RSymbianDlAllocatorWrapper((CNewSymbianHeapPool*)pool);
+    User::SwitchAllocator(allocator);
+    MEM_LOGF(_L8("MemoryManager::CreateFastAllocator - new pool=%x, allocator=%x"), pool, allocator);
+#endif
+    }
+
+//-----------------------------------------------------------------------------
+// MemoryManager::InitAllocator
+//-----------------------------------------------------------------------------
+EXPORT_C void MemoryManager::InitFastAllocator()
+    {
+    // Initialize s_pool variable from current allocator, assumption is that main program has already called CreateAllocator()
+    // It is special case when this allocator is created in SetupThreadHeap() where can not initialize static data. It also
+    // solves problems due to static data destruction in Symbian 9.5.
+#ifdef __NEW_ALLOCATOR__    
+    RAllocator &aAllocator = User::Allocator();
+    RSymbianDlAllocatorWrapper* allocator = (RSymbianDlAllocatorWrapper*) &aAllocator;
+    s_pool = allocator->iPool;
+    MEM_LOGF(_L8("MemoryManager::InitFastAllocator - s_pool=%x, allocator=%x"), s_pool, allocator);
+#endif    
+    }
+
+//-----------------------------------------------------------------------------
 // MemoryManager::SwitchToFastAllocator
 //-----------------------------------------------------------------------------
 EXPORT_C RAllocator* MemoryManager::SwitchToFastAllocator()
     {
     // create the right memory pool
     __ASSERT_DEBUG( s_pool == 0, User::Panic( KMemManPanicDes, 0 ) );
+    MEM_LOGF(_L8("MemoryManager::SwitchToFastAllocator - s_pool=%x"), s_pool);
 #ifdef __NEW_ALLOCATOR__
     s_pool = new CNewSymbianHeapPool();
     s_pool->Create();
     RSymbianDlAllocatorWrapper* allocator = new RSymbianDlAllocatorWrapper((CNewSymbianHeapPool*)s_pool);
+    MEM_LOGF(_L8("MemoryManager::SwitchToFastAllocator - new s_pool=%x"), s_pool);
     return User::SwitchAllocator( allocator );
 #else
     s_pool = new CFastMemoryPool();
@@ -78,6 +103,28 @@
     }
 
 //-----------------------------------------------------------------------------
+// MemoryManager::InitOOMHandler
+//-----------------------------------------------------------------------------
+EXPORT_C void MemoryManager::InitOOMDialog()
+    {
+#ifdef __NEW_ALLOCATOR__
+    if (s_pool)
+        s_pool->InitOOMDialog();
+#endif
+    }
+
+//-----------------------------------------------------------------------------
+// MemoryManager::ResetOOMDialogDisplayed
+//-----------------------------------------------------------------------------
+EXPORT_C void MemoryManager::ResetOOMDialogDisplayed()
+    {
+#ifdef __NEW_ALLOCATOR__
+    if (s_pool)
+        s_pool->ResetOOMDialog();
+#endif
+    }
+
+//-----------------------------------------------------------------------------
 // MemoryManager::CloseFastAllocator
 //-----------------------------------------------------------------------------
 EXPORT_C void MemoryManager::CloseFastAllocator(RAllocator* aDefaultAllocator)
@@ -195,3 +242,11 @@
     return Pool()->MemorySize( aPtr );
     }
 
+
+EXPORT_C void MemoryManager::DumpMemoryLogs()
+    {
+#if defined(OOM_LOGGING) && defined (__NEW_ALLOCATOR__)
+    CNewSymbianHeapPool *hPool = (CNewSymbianHeapPool *)Pool();
+    hPool->DumpHeapLogs(0);
+#endif    
+    }