From 3749d61e1f7a59f5ec5067e560af1eb610c82015 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Sun, 12 Aug 2012 09:27:39 +0200 Subject: Imported WebKit commit a77350243e054f3460d1137301d8b3faee3d2052 (http://svn.webkit.org/repository/webkit/trunk@125365) New snapshot with build fixes for latest API changes in Qt and all WK1 Win MSVC fixes upstream --- Source/JavaScriptCore/heap/IncrementalSweeper.cpp | 58 +++++++++++++++++++---- 1 file changed, 50 insertions(+), 8 deletions(-) (limited to 'Source/JavaScriptCore/heap/IncrementalSweeper.cpp') diff --git a/Source/JavaScriptCore/heap/IncrementalSweeper.cpp b/Source/JavaScriptCore/heap/IncrementalSweeper.cpp index 49222c545..f284d8b57 100644 --- a/Source/JavaScriptCore/heap/IncrementalSweeper.cpp +++ b/Source/JavaScriptCore/heap/IncrementalSweeper.cpp @@ -51,6 +51,7 @@ void IncrementalSweeper::doWork() IncrementalSweeper::IncrementalSweeper(Heap* heap, CFRunLoopRef runLoop) : HeapTimer(heap->globalData(), runLoop) , m_currentBlockToSweepIndex(0) + , m_structuresCanBeSwept(false) { } @@ -72,12 +73,7 @@ void IncrementalSweeper::cancelTimer() void IncrementalSweeper::doSweep(double sweepBeginTime) { while (m_currentBlockToSweepIndex < m_blocksToSweep.size()) { - MarkedBlock* block = m_blocksToSweep[m_currentBlockToSweepIndex++]; - if (!block->needsSweeping()) - continue; - - block->sweep(); - m_globalData->heap.objectSpace().freeOrShrinkBlock(block); + sweepNextBlock(); CFTimeInterval elapsedTime = WTF::monotonicallyIncreasingTime() - sweepBeginTime; if (elapsedTime < sweepTimeSlice) @@ -91,17 +87,48 @@ void IncrementalSweeper::doSweep(double sweepBeginTime) cancelTimer(); } +void IncrementalSweeper::sweepNextBlock() +{ + while (m_currentBlockToSweepIndex < m_blocksToSweep.size()) { + MarkedBlock* block = m_blocksToSweep[m_currentBlockToSweepIndex++]; + if (block->onlyContainsStructures()) + m_structuresCanBeSwept = true; + else + ASSERT(!m_structuresCanBeSwept); + + if (!block->needsSweeping()) + continue; + + block->sweep(); + m_globalData->heap.objectSpace().freeOrShrinkBlock(block); + return; + } +} + void IncrementalSweeper::startSweeping(const HashSet& blockSnapshot) { - WTF::copyToVector(blockSnapshot, m_blocksToSweep); + m_blocksToSweep.resize(blockSnapshot.size()); + CopyFunctor functor(m_blocksToSweep); + m_globalData->heap.objectSpace().forEachBlock(functor); m_currentBlockToSweepIndex = 0; + m_structuresCanBeSwept = false; scheduleTimer(); } +void IncrementalSweeper::willFinishSweeping() +{ + m_currentBlockToSweepIndex = 0; + m_structuresCanBeSwept = true; + m_blocksToSweep.clear(); + if (m_globalData) + cancelTimer(); +} + #else IncrementalSweeper::IncrementalSweeper(JSGlobalData* globalData) : HeapTimer(globalData) + , m_structuresCanBeSwept(false) { } @@ -116,8 +143,23 @@ IncrementalSweeper* IncrementalSweeper::create(Heap* heap) void IncrementalSweeper::startSweeping(const HashSet&) { + m_structuresCanBeSwept = false; } - + +void IncrementalSweeper::willFinishSweeping() +{ + m_structuresCanBeSwept = true; +} + +void IncrementalSweeper::sweepNextBlock() +{ +} + #endif +bool IncrementalSweeper::structuresCanBeSwept() +{ + return m_structuresCanBeSwept; +} + } // namespace JSC -- cgit v1.2.1