Index: Source/platform/heap/ThreadState.cpp |
diff --git a/Source/platform/heap/ThreadState.cpp b/Source/platform/heap/ThreadState.cpp |
index 8126e720f54d9987347a98d46e4abeace17f9bd2..a6f33018f482969fc7ba57ef9a9f26bd31ccec49 100644 |
--- a/Source/platform/heap/ThreadState.cpp |
+++ b/Source/platform/heap/ThreadState.cpp |
@@ -657,6 +657,11 @@ bool ThreadState::shouldSchedulePreciseGC() |
#endif |
} |
+bool ThreadState::shouldScheduleV8FollowupGC() |
+{ |
+ return judgeGCThreshold(32 * 1024 * 1024, 1.5); |
+} |
+ |
bool ThreadState::shouldSchedulePageNavigationGC(float estimatedRemovalRatio) |
{ |
return judgeGCThreshold(1024 * 1024, 1.5 * (1 - estimatedRemovalRatio)); |
@@ -668,6 +673,21 @@ bool ThreadState::shouldForceConservativeGC() |
return judgeGCThreshold(32 * 1024 * 1024, 5.0); |
} |
+void ThreadState::scheduleV8FollowupGCIfNeeded() |
+{ |
+ ASSERT(checkThread()); |
+ if (isGCForbidden()) |
+ return; |
+ |
+ if (isSweepingInProgress()) |
+ return; |
+ ASSERT(!sweepForbidden()); |
+ |
+ Heap::reportMemoryUsageForTracing(); |
+ if (shouldScheduleV8FollowupGC()) |
+ schedulePreciseGC(); |
+} |
+ |
void ThreadState::schedulePageNavigationGCIfNeeded(float estimatedRemovalRatio) |
{ |
ASSERT(checkThread()); |