Chromium Code Reviews| 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. |