webengine/osswebengine/MemoryManager/Src/MemoryPool.cpp
changeset 10 a359256acfc6
parent 1 7c90e6132015
child 26 cb62a4f66ebe
--- a/webengine/osswebengine/MemoryManager/Src/MemoryPool.cpp	Fri Jul 03 15:54:40 2009 +0100
+++ b/webengine/osswebengine/MemoryManager/Src/MemoryPool.cpp	Thu Aug 27 07:44:59 2009 +0300
@@ -620,30 +620,38 @@
 						// except at process end.
 	}
 
-const TInt KMaxHeapSize = 0x2000000; //32MB
-const TInt KHeapGrowSize = 0x10000;  //64KB
+#ifdef __WINSCW__
+const TInt KMaxHeapSize = 0x2000000; // 32MB, on emulator
+#else
+const TInt KMaxHeapSize = 0x4000000; // 64MB, on hardware
+#endif
+
+const TInt KHeapGrowSize = 0x10000;  // 64KB
 
 TBool CNewSymbianHeapPool::Create()
 	{
 	// need to know system page size
 	TInt page_size;
 	UserHal::PageSizeInBytes(page_size);
-
-	// Create the thread's heap chunk.
-	//
-	// The chunk needs reserve enough address space for twice the maximum allocation
-	// The heap object is instantiated exactly half way up the chunk, and initially is provided just 1 page of memory
-	// This memory can be committed as part of the call to creat the chunk
-	//
-	TInt maxChunkSize = 2 * KMaxHeapSize;
-	TInt offset = KMaxHeapSize;
+	
+    TInt maxmem = 0;
+    HAL::Get(HALData::EMemoryRAM, maxmem);
+    TInt maxHeapSize = Min(maxmem, KMaxHeapSize);
+        
+	/* Create the thread's heap chunk.
+	 * The chunk needs reserve enough address space for twice the maximum allocation
+	 * The heap object is instantiated exactly half way up the chunk, and initially is provided just 1 page of memory
+	 * This memory can be committed as part of the call to creat the chunk
+	 */
+	TInt maxChunkSize = 2 * maxHeapSize;
+	TInt offset = maxHeapSize;
 	TInt minLength = page_size;
 	RChunk c;
 	TInt r = c.CreateDisconnectedLocal(offset, offset+minLength, maxChunkSize, EOwnerProcess);
 	if (r!=KErrNone)
 		return EFalse;
 	
-	iAlloc = new (c.Base() + offset) RSymbianDLHeap(c.Handle(), offset, minLength, KMaxHeapSize, KHeapGrowSize, 8, EFalse /* not single threaded! */);
+	iAlloc = new (c.Base() + offset) RSymbianDLHeap(c.Handle(), offset, minLength, maxHeapSize, KHeapGrowSize, 8, EFalse /* not single threaded! */);
 	iAlloc->iHandles = &iAlloc->iChunkHandle;
 	iAlloc->iHandleCount = 2;
 	// chunk handle now 'owned' by iAlloc
@@ -655,5 +663,12 @@
 	return CMemoryPool::Create();
 	}
 
+#ifdef OOM_LOGGING   
+void CNewSymbianHeapPool::DumpHeapLogs()
+    {
+    iAlloc->dump_heap_logs(0);
+    iAlloc->dump_dl_free_chunks();
+    }
+#endif
 #endif
 // END OF FILE