| Index: Source/platform/heap/Heap.cpp
|
| diff --git a/Source/platform/heap/Heap.cpp b/Source/platform/heap/Heap.cpp
|
| index e21fdf68dc1d73c0c4ccd7e293f04aee7d6b3ce2..3edbf6206b5b97b0e67515ccb9091c33a404a035 100644
|
| --- a/Source/platform/heap/Heap.cpp
|
| +++ b/Source/platform/heap/Heap.cpp
|
| @@ -2475,8 +2475,7 @@ void Heap::collectGarbage(ThreadState::StackState stackState, ThreadState::GCTyp
|
| s_markingVisitor->configureEagerTraceLimit();
|
| ASSERT(s_markingVisitor->canTraceEagerly());
|
|
|
| - Heap::resetMarkedObjectSize();
|
| - Heap::resetAllocatedObjectSize();
|
| + Heap::resetHeapCounters();
|
|
|
| // 1. Trace persistent roots.
|
| ThreadState::visitPersistentRoots(s_markingVisitor);
|
| @@ -2840,6 +2839,32 @@ void Heap::RegionTree::remove(PageMemoryRegion* region, RegionTree** context)
|
| delete current;
|
| }
|
|
|
| +void Heap::resetHeapCounters()
|
| +{
|
| + ASSERT(ThreadState::current()->isInGC());
|
| +
|
| + s_allocatedObjectSize = 0;
|
| + s_markedObjectSize = 0;
|
| +
|
| + // Similarly, reset the amount of externally allocated memory.
|
| + s_externallyAllocatedBytes = 0;
|
| + s_externallyAllocatedBytesAlive = 0;
|
| +
|
| + s_requestedUrgentGC = false;
|
| +}
|
| +
|
| +void Heap::requestUrgentGC()
|
| +{
|
| + // The urgent-gc flag will be considered the next time an out-of-line
|
| + // allocation is made. Bump allocations from the current block will
|
| + // go ahead until it can no longer service an allocation request.
|
| + //
|
| + // FIXME: if that delays urgently needed GCs for too long, consider
|
| + // flushing out per-heap "allocation points" to trigger the GC
|
| + // right away.
|
| + releaseStore(&s_requestedUrgentGC, 1);
|
| +}
|
| +
|
| Visitor* Heap::s_markingVisitor;
|
| CallbackStack* Heap::s_markingStack;
|
| CallbackStack* Heap::s_postMarkingCallbackStack;
|
| @@ -2855,4 +2880,8 @@ size_t Heap::s_allocatedObjectSize = 0;
|
| size_t Heap::s_allocatedSpace = 0;
|
| size_t Heap::s_markedObjectSize = 0;
|
|
|
| +size_t Heap::s_externallyAllocatedBytes = 0;
|
| +size_t Heap::s_externallyAllocatedBytesAlive = 0;
|
| +unsigned Heap::s_requestedUrgentGC = false;
|
| +
|
| } // namespace blink
|
|
|