Index: third_party/WebKit/Source/platform/heap/Heap.cpp |
diff --git a/third_party/WebKit/Source/platform/heap/Heap.cpp b/third_party/WebKit/Source/platform/heap/Heap.cpp |
index 8a414e3ec0378d68a144275f1cf59b6561e47c60..5f2809b0fde544c5063643db8588a1cc4ac1e092 100644 |
--- a/third_party/WebKit/Source/platform/heap/Heap.cpp |
+++ b/third_party/WebKit/Source/platform/heap/Heap.cpp |
@@ -355,6 +355,14 @@ bool Heap::weakTableRegistered(const void* table) |
} |
#endif |
+void Heap::decommitCallbackStacks() |
+{ |
+ s_markingStack->decommit(); |
sof
2016/02/24 09:29:39
An alternative scheme would be for Heap to reserve
|
+ s_postMarkingCallbackStack->decommit(); |
+ s_globalWeakCallbackStack->decommit(); |
+ s_ephemeronStack->decommit(); |
+} |
+ |
void Heap::preGC() |
{ |
ASSERT(!ThreadState::current()->isInGC()); |
@@ -469,6 +477,7 @@ void Heap::collectGarbage(BlinkGC::StackState stackState, BlinkGC::GCType gcType |
WTF::Partitions::reportMemoryUsageHistogram(); |
postGC(gcType); |
+ Heap::decommitCallbackStacks(); |
#if ENABLE(ASSERT) |
// 0 is used to figure non-assigned area, so avoid to use 0 in s_gcGeneration. |
@@ -511,6 +520,7 @@ void Heap::collectGarbageForTerminatingThread(ThreadState* state) |
globalWeakProcessing(gcScope.visitor()); |
state->postGC(BlinkGC::GCWithSweep); |
+ Heap::decommitCallbackStacks(); |
} |
state->preSweep(); |
} |
@@ -547,8 +557,6 @@ void Heap::postMarkingProcessing(Visitor* visitor) |
// if they are only reachable from their front objects. |
while (popAndInvokePostMarkingCallback(visitor)) { } |
- s_ephemeronStack->clear(); |
- |
// Post-marking callbacks should not trace any objects and |
// therefore the marking stack should be empty after the |
// post-marking callbacks. |