Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/Source/JavaScriptCore/heap/IncrementalSweeper.cpp b/Source/JavaScriptCore/heap/IncrementalSweeper.cpp
- index da15137..b3ad8c8 100644
- --- a/Source/JavaScriptCore/heap/IncrementalSweeper.cpp
- +++ b/Source/JavaScriptCore/heap/IncrementalSweeper.cpp
- @@ -60,6 +60,12 @@ void IncrementalSweeper::cancelTimer()
- CFRunLoopTimerSetNextFireDate(m_timer.get(), CFAbsoluteTimeGetCurrent() + s_decade);
- }
- +void IncrementalSweeper::fullSweep()
- +{
- + while (hasWork())
- + doWork();
- +}
- +
- void IncrementalSweeper::doWork()
- {
- doSweep(WTF::monotonicallyIncreasingTime());
- diff --git a/Source/JavaScriptCore/heap/IncrementalSweeper.h b/Source/JavaScriptCore/heap/IncrementalSweeper.h
- index af826c4..199f948 100644
- --- a/Source/JavaScriptCore/heap/IncrementalSweeper.h
- +++ b/Source/JavaScriptCore/heap/IncrementalSweeper.h
- @@ -38,6 +38,7 @@ class IncrementalSweeper : public HeapTimer {
- public:
- #if USE(CF)
- JS_EXPORT_PRIVATE IncrementalSweeper(Heap*, CFRunLoopRef);
- + JS_EXPORT_PRIVATE void fullSweep();
- #else
- explicit IncrementalSweeper(VM*);
- #endif
- @@ -52,6 +53,7 @@ private:
- void doSweep(double startTime);
- void scheduleTimer();
- void cancelTimer();
- + bool hasWork() const { return !m_blocksToSweep.isEmpty(); }
- unsigned m_currentBlockToSweepIndex;
- Vector<MarkedBlock*>& m_blocksToSweep;
- diff --git a/Source/WebCore/platform/cocoa/MemoryPressureHandlerCocoa.mm b/Source/WebCore/platform/cocoa/MemoryPressureHandlerCocoa.mm
- index 17858c44e..c85dca3 100644
- --- a/Source/WebCore/platform/cocoa/MemoryPressureHandlerCocoa.mm
- +++ b/Source/WebCore/platform/cocoa/MemoryPressureHandlerCocoa.mm
- @@ -30,9 +30,11 @@
- #import "IOSurfacePool.h"
- #import "GCController.h"
- #import "JSDOMWindowBase.h"
- +#import "JSDOMWindow.h"
- #import "LayerPool.h"
- #import "Logging.h"
- #import "WebCoreSystemInterface.h"
- +#import <JavaScriptCore/IncrementalSweeper.h>
- #import <mach/mach.h>
- #import <mach/task_info.h>
- #import <malloc/malloc.h>
- @@ -88,6 +90,13 @@ void MemoryPressureHandler::platformReleaseMemory(bool critical)
- ReliefLogger log("Collecting JavaScript garbage");
- gcController().garbageCollectNow();
- }
- +
- + // Do a full sweep of collected objects.
- + {
- + ReliefLogger log("Full JavaScript garbage sweep");
- + JSC::JSLockHolder lock(JSDOMWindow::commonVM());
- + JSDOMWindow::commonVM().heap.sweeper()->fullSweep();
- + }
- #endif
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement