Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2295)

Unified Diff: Source/platform/heap/ThreadState.cpp

Issue 1174123002: Oilpan: adjust GC policy under memory pressure. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/platform/heap/ThreadState.cpp
diff --git a/Source/platform/heap/ThreadState.cpp b/Source/platform/heap/ThreadState.cpp
index e4c8669990f7e6c3652fdec1903c184ca9ddc586..9498a2dabdbdc2a2183294d7cf2d97b327c4c86f 100644
--- a/Source/platform/heap/ThreadState.cpp
+++ b/Source/platform/heap/ThreadState.cpp
@@ -572,6 +572,20 @@ bool ThreadState::shouldSchedulePreciseGC()
#endif
}
+namespace {
haraken 2015/06/11 04:10:30 Or static. No strong opinion.
+
+inline bool shouldForceMemoryPressureGC(size_t currentSize, size_t estimatedSize)
haraken 2015/06/11 04:10:30 currentObjectSize, estimatedLiveObjectSize
+{
+ if (currentSize < 300 * 1024 * 1024)
+ return false;
+
+ // If we're consuming too much memory, trigger a conservative GC
+ // aggressively. This is a safe guard to avoid OOM.
+ return (currentSize >> 10) > (estimatedSize >> 10) * 3 / 2;
haraken 2015/06/11 04:10:30 Add a comment about why we want to shift the size.
sof 2015/06/11 08:45:02 Done.
+}
+
+} // namespace
+
// TODO(haraken): We should improve the GC heuristics.
// These heuristics affect performance significantly.
bool ThreadState::shouldForceConservativeGC()
@@ -587,11 +601,8 @@ bool ThreadState::shouldForceConservativeGC()
// Heap::markedObjectSize() may be underestimated if any thread has not
// finished completeSweep().
size_t currentObjectSize = allocatedObjectSize + Heap::markedObjectSize() + WTF::Partitions::totalSizeOfCommittedPages();
- if (currentObjectSize >= 300 * 1024 * 1024) {
- // If we're consuming too much memory, trigger a conservative GC
- // aggressively. This is a safe guard to avoid OOM.
- return currentObjectSize > estimatedLiveObjectSize * 3 / 2;
- }
+ if (shouldForceMemoryPressureGC(currentObjectSize, estimatedLiveObjectSize))
+ return true;
// Schedule a conservative GC if Oilpan has allocated more than 32 MB since
// the last GC and the current memory usage is >400% larger than
// the estimated live memory usage.
@@ -792,6 +803,13 @@ void ThreadState::didV8GC()
{
checkThread();
if (isMainThread()) {
+ size_t currentObjectSize = Heap::allocatedObjectSize() + Heap::markedObjectSize() + WTF::Partitions::totalSizeOfCommittedPages();
haraken 2015/06/11 04:10:31 Or you can do: if (shouldForceMemoryPressureGC(
+ size_t estimatedLiveObjectSize = Heap::estimatedLiveObjectSize();
+ if (shouldForceMemoryPressureGC(currentObjectSize, estimatedLiveObjectSize)) {
+ // Under memory pressure, force a conservative GC.
+ Heap::collectGarbage(HeapPointersOnStack, GCWithoutSweep, Heap::ConservativeGC);
+ return;
+ }
// Lower the estimated live object size because the V8 major GC is
// expected to have collected a lot of DOM wrappers and dropped
// references to their DOM objects.
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698