2011-02-04 Geoffrey Garen <ggaren@apple.com>
[WebKit.git] / Source / JavaScriptCore / runtime / Heap.cpp
index 89cc6f82e149e9892c3b49c4367f81367ed6e9ba..72d7188b868ce653c70d59c2ac854e55a8bb778b 100644 (file)
 #include "JSLock.h"
 #include "JSONObject.h"
 #include "Tracing.h"
 #include "JSLock.h"
 #include "JSONObject.h"
 #include "Tracing.h"
+#include <algorithm>
 
 #define COLLECT_ON_EVERY_ALLOCATION 0
 
 
 #define COLLECT_ON_EVERY_ALLOCATION 0
 
+using namespace std;
+
 namespace JSC {
 
 namespace JSC {
 
+const size_t minBytesPerCycle = 512 * 1024;
+
 Heap::Heap(JSGlobalData* globalData)
 Heap::Heap(JSGlobalData* globalData)
-    : m_markedSpace(globalData)
-    , m_operationInProgress(NoOperation)
+    : m_operationInProgress(NoOperation)
+    , m_markedSpace(globalData)
     , m_markListSet(0)
     , m_activityCallback(DefaultGCActivityCallback::create(this))
     , m_globalData(globalData)
     , m_markListSet(0)
     , m_activityCallback(DefaultGCActivityCallback::create(this))
     , m_globalData(globalData)
@@ -381,6 +386,10 @@ void Heap::reset(SweepToggle sweepToggle)
     if (sweepToggle == DoSweep)
         m_markedSpace.sweep();
 
     if (sweepToggle == DoSweep)
         m_markedSpace.sweep();
 
+    size_t usedCellCount = m_markedSpace.markedCells();
+    size_t proportionalBytes = static_cast<size_t>(usedCellCount * 1.5 * HeapConstants::cellSize);
+    m_markedSpace.setHighWaterMark(max(proportionalBytes, minBytesPerCycle));
+
     JAVASCRIPTCORE_GC_END();
 
     (*m_activityCallback)();
     JAVASCRIPTCORE_GC_END();
 
     (*m_activityCallback)();