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 a916993ee827eb58f633b6024aeb12e01010e781..daf927fe5397fdc1744adc8b05b57faacc5037ce 100644 |
--- a/third_party/WebKit/Source/platform/heap/Heap.cpp |
+++ b/third_party/WebKit/Source/platform/heap/Heap.cpp |
@@ -30,6 +30,7 @@ |
#include "platform/heap/Heap.h" |
+#include "base/debug/alias.h" |
#include "base/sys_info.h" |
#include "platform/Histogram.h" |
#include "platform/ScriptForbiddenScope.h" |
@@ -65,7 +66,7 @@ |
bool parkThreads(ThreadState* state) |
{ |
- TRACE_EVENT0("blink_gc", "ThreadHeap::ParkThreadsScope"); |
+ TRACE_EVENT0("blink_gc", "Heap::ParkThreadsScope"); |
const char* samplingState = TRACE_EVENT_GET_SAMPLING_STATE(); |
if (state->isMainThread()) |
TRACE_EVENT_SET_SAMPLING_STATE("blink_gc", "BlinkGCWaiting"); |
@@ -98,7 +99,7 @@ |
bool m_shouldResumeThreads; |
}; |
-void ThreadHeap::flushHeapDoesNotContainCache() |
+void Heap::flushHeapDoesNotContainCache() |
{ |
s_heapDoesNotContainCache->flush(); |
} |
@@ -117,7 +118,7 @@ |
s_totalMarkedObjectSize = 0; |
} |
-void ThreadHeap::init() |
+void Heap::init() |
{ |
ThreadState::init(); |
ProcessHeap::init(); |
@@ -137,7 +138,7 @@ |
Platform::current()->registerMemoryDumpProvider(BlinkGCMemoryDumpProvider::instance(), "BlinkGC"); |
} |
-void ThreadHeap::shutdown() |
+void Heap::shutdown() |
{ |
ASSERT(s_markingStack); |
@@ -163,7 +164,7 @@ |
s_ephemeronStack = nullptr; |
GCInfoTable::shutdown(); |
ThreadState::shutdown(); |
- ASSERT(ThreadHeap::heapStats().allocatedSpace() == 0); |
+ ASSERT(Heap::heapStats().allocatedSpace() == 0); |
} |
CrossThreadPersistentRegion& ProcessHeap::crossThreadPersistentRegion() |
@@ -245,7 +246,7 @@ |
} |
#if ENABLE(ASSERT) |
-BasePage* ThreadHeap::findPageFromAddress(Address address) |
+BasePage* Heap::findPageFromAddress(Address address) |
{ |
MutexLocker lock(ThreadState::threadAttachMutex()); |
for (ThreadState* state : ThreadState::attachedThreads()) { |
@@ -256,7 +257,7 @@ |
} |
#endif |
-Address ThreadHeap::checkAndMarkPointer(Visitor* visitor, Address address) |
+Address Heap::checkAndMarkPointer(Visitor* visitor, Address address) |
{ |
ASSERT(ThreadState::current()->isInGC()); |
@@ -282,17 +283,17 @@ |
return nullptr; |
} |
-void ThreadHeap::pushTraceCallback(void* object, TraceCallback callback) |
+void Heap::pushTraceCallback(void* object, TraceCallback callback) |
{ |
ASSERT(ThreadState::current()->isInGC()); |
// Trace should never reach an orphaned page. |
- ASSERT(!ThreadHeap::getOrphanedPagePool()->contains(object)); |
+ ASSERT(!Heap::getOrphanedPagePool()->contains(object)); |
CallbackStack::Item* slot = s_markingStack->allocateEntry(); |
*slot = CallbackStack::Item(object, callback); |
} |
-bool ThreadHeap::popAndInvokeTraceCallback(Visitor* visitor) |
+bool Heap::popAndInvokeTraceCallback(Visitor* visitor) |
{ |
CallbackStack::Item* item = s_markingStack->pop(); |
if (!item) |
@@ -301,17 +302,17 @@ |
return true; |
} |
-void ThreadHeap::pushPostMarkingCallback(void* object, TraceCallback callback) |
+void Heap::pushPostMarkingCallback(void* object, TraceCallback callback) |
{ |
ASSERT(ThreadState::current()->isInGC()); |
// Trace should never reach an orphaned page. |
- ASSERT(!ThreadHeap::getOrphanedPagePool()->contains(object)); |
+ ASSERT(!Heap::getOrphanedPagePool()->contains(object)); |
CallbackStack::Item* slot = s_postMarkingCallbackStack->allocateEntry(); |
*slot = CallbackStack::Item(object, callback); |
} |
-bool ThreadHeap::popAndInvokePostMarkingCallback(Visitor* visitor) |
+bool Heap::popAndInvokePostMarkingCallback(Visitor* visitor) |
{ |
if (CallbackStack::Item* item = s_postMarkingCallbackStack->pop()) { |
item->call(visitor); |
@@ -320,27 +321,27 @@ |
return false; |
} |
-void ThreadHeap::pushGlobalWeakCallback(void** cell, WeakCallback callback) |
+void Heap::pushGlobalWeakCallback(void** cell, WeakCallback callback) |
{ |
ASSERT(ThreadState::current()->isInGC()); |
// Trace should never reach an orphaned page. |
- ASSERT(!ThreadHeap::getOrphanedPagePool()->contains(cell)); |
+ ASSERT(!Heap::getOrphanedPagePool()->contains(cell)); |
CallbackStack::Item* slot = s_globalWeakCallbackStack->allocateEntry(); |
*slot = CallbackStack::Item(cell, callback); |
} |
-void ThreadHeap::pushThreadLocalWeakCallback(void* closure, void* object, WeakCallback callback) |
+void Heap::pushThreadLocalWeakCallback(void* closure, void* object, WeakCallback callback) |
{ |
ASSERT(ThreadState::current()->isInGC()); |
// Trace should never reach an orphaned page. |
- ASSERT(!ThreadHeap::getOrphanedPagePool()->contains(object)); |
+ ASSERT(!Heap::getOrphanedPagePool()->contains(object)); |
ThreadState* state = pageFromObject(object)->arena()->getThreadState(); |
state->pushThreadLocalWeakCallback(closure, callback); |
} |
-bool ThreadHeap::popAndInvokeGlobalWeakCallback(Visitor* visitor) |
+bool Heap::popAndInvokeGlobalWeakCallback(Visitor* visitor) |
{ |
if (CallbackStack::Item* item = s_globalWeakCallbackStack->pop()) { |
item->call(visitor); |
@@ -349,12 +350,12 @@ |
return false; |
} |
-void ThreadHeap::registerWeakTable(void* table, EphemeronCallback iterationCallback, EphemeronCallback iterationDoneCallback) |
+void Heap::registerWeakTable(void* table, EphemeronCallback iterationCallback, EphemeronCallback iterationDoneCallback) |
{ |
ASSERT(ThreadState::current()->isInGC()); |
// Trace should never reach an orphaned page. |
- ASSERT(!ThreadHeap::getOrphanedPagePool()->contains(table)); |
+ ASSERT(!Heap::getOrphanedPagePool()->contains(table)); |
CallbackStack::Item* slot = s_ephemeronStack->allocateEntry(); |
*slot = CallbackStack::Item(table, iterationCallback); |
@@ -364,14 +365,14 @@ |
} |
#if ENABLE(ASSERT) |
-bool ThreadHeap::weakTableRegistered(const void* table) |
+bool Heap::weakTableRegistered(const void* table) |
{ |
ASSERT(s_ephemeronStack); |
return s_ephemeronStack->hasCallbackForObject(table); |
} |
#endif |
-void ThreadHeap::decommitCallbackStacks() |
+void Heap::decommitCallbackStacks() |
{ |
s_markingStack->decommit(); |
s_postMarkingCallbackStack->decommit(); |
@@ -379,21 +380,21 @@ |
s_ephemeronStack->decommit(); |
} |
-void ThreadHeap::preGC() |
+void Heap::preGC() |
{ |
ASSERT(!ThreadState::current()->isInGC()); |
for (ThreadState* state : ThreadState::attachedThreads()) |
state->preGC(); |
} |
-void ThreadHeap::postGC(BlinkGC::GCType gcType) |
+void Heap::postGC(BlinkGC::GCType gcType) |
{ |
ASSERT(ThreadState::current()->isInGC()); |
for (ThreadState* state : ThreadState::attachedThreads()) |
state->postGC(gcType); |
} |
-const char* ThreadHeap::gcReasonString(BlinkGC::GCReason reason) |
+const char* Heap::gcReasonString(BlinkGC::GCReason reason) |
{ |
switch (reason) { |
case BlinkGC::IdleGC: |
@@ -414,7 +415,7 @@ |
return "<Unknown>"; |
} |
-void ThreadHeap::collectGarbage(BlinkGC::StackState stackState, BlinkGC::GCType gcType, BlinkGC::GCReason reason) |
+void Heap::collectGarbage(BlinkGC::StackState stackState, BlinkGC::GCType gcType, BlinkGC::GCReason reason) |
{ |
ASSERT(gcType != BlinkGC::ThreadTerminationGC); |
@@ -423,6 +424,11 @@ |
RELEASE_ASSERT(!state->isGCForbidden()); |
state->completeSweep(); |
+ size_t debugAllocatedObjectSize = Heap::heapStats().allocatedObjectSize(); |
+ base::debug::Alias(&debugAllocatedObjectSize); |
+ size_t debugWrapperCount = Heap::heapStats().wrapperCount(); |
+ base::debug::Alias(&debugWrapperCount); |
+ |
OwnPtr<Visitor> visitor = Visitor::create(state, gcType); |
SafePointScope safePointScope(stackState, state); |
@@ -436,7 +442,7 @@ |
ScriptForbiddenIfMainThreadScope scriptForbidden; |
- TRACE_EVENT2("blink_gc,devtools.timeline", "BlinkGCMarking", |
+ TRACE_EVENT2("blink_gc,devtools.timeline", "Heap::collectGarbage", |
"lazySweeping", gcType == BlinkGC::GCWithoutSweep, |
"gcReason", gcReasonString(reason)); |
TRACE_EVENT_SCOPED_SAMPLING_STATE("blink_gc", "BlinkGC"); |
@@ -453,9 +459,9 @@ |
StackFrameDepthScope stackDepthScope; |
- size_t totalObjectSize = ThreadHeap::heapStats().allocatedObjectSize() + ThreadHeap::heapStats().markedObjectSize(); |
+ size_t totalObjectSize = Heap::heapStats().allocatedObjectSize() + Heap::heapStats().markedObjectSize(); |
if (gcType != BlinkGC::TakeSnapshot) |
- ThreadHeap::resetHeapCounters(); |
+ Heap::resetHeapCounters(); |
// 1. Trace persistent roots. |
ThreadState::visitPersistentRoots(visitor.get()); |
@@ -476,10 +482,10 @@ |
getOrphanedPagePool()->decommitOrphanedPages(); |
double markingTimeInMilliseconds = WTF::currentTimeMS() - startTime; |
- ThreadHeap::heapStats().setEstimatedMarkingTimePerByte(totalObjectSize ? (markingTimeInMilliseconds / 1000 / totalObjectSize) : 0); |
+ Heap::heapStats().setEstimatedMarkingTimePerByte(totalObjectSize ? (markingTimeInMilliseconds / 1000 / totalObjectSize) : 0); |
#if PRINT_HEAP_STATS |
- dataLogF("ThreadHeap::collectGarbage (gcReason=%s, lazySweeping=%d, time=%.1lfms)\n", gcReasonString(reason), gcType == BlinkGC::GCWithoutSweep, markingTimeInMilliseconds); |
+ dataLogF("Heap::collectGarbage (gcReason=%s, lazySweeping=%d, time=%.1lfms)\n", gcReasonString(reason), gcType == BlinkGC::GCWithoutSweep, markingTimeInMilliseconds); |
#endif |
DEFINE_THREAD_SAFE_STATIC_LOCAL(CustomCountHistogram, markingTimeHistogram, new CustomCountHistogram("BlinkGC.CollectGarbage", 0, 10 * 1000, 50)); |
@@ -493,14 +499,14 @@ |
s_lastGCReason = reason; |
- ThreadHeap::reportMemoryUsageHistogram(); |
+ Heap::reportMemoryUsageHistogram(); |
WTF::Partitions::reportMemoryUsageHistogram(); |
postGC(gcType); |
- ThreadHeap::decommitCallbackStacks(); |
-} |
- |
-void ThreadHeap::collectGarbageForTerminatingThread(ThreadState* state) |
+ Heap::decommitCallbackStacks(); |
+} |
+ |
+void Heap::collectGarbageForTerminatingThread(ThreadState* state) |
{ |
{ |
// A thread-specific termination GC must not allow other global GCs to go |
@@ -533,26 +539,26 @@ |
globalWeakProcessing(visitor.get()); |
state->postGC(BlinkGC::GCWithSweep); |
- ThreadHeap::decommitCallbackStacks(); |
+ Heap::decommitCallbackStacks(); |
} |
state->preSweep(); |
} |
-void ThreadHeap::processMarkingStack(Visitor* visitor) |
+void Heap::processMarkingStack(Visitor* visitor) |
{ |
// Ephemeron fixed point loop. |
do { |
{ |
// Iteratively mark all objects that are reachable from the objects |
// currently pushed onto the marking stack. |
- TRACE_EVENT0("blink_gc", "ThreadHeap::processMarkingStackSingleThreaded"); |
+ TRACE_EVENT0("blink_gc", "Heap::processMarkingStackSingleThreaded"); |
while (popAndInvokeTraceCallback(visitor)) { } |
} |
{ |
// Mark any strong pointers that have now become reachable in |
// ephemeron maps. |
- TRACE_EVENT0("blink_gc", "ThreadHeap::processEphemeronStack"); |
+ TRACE_EVENT0("blink_gc", "Heap::processEphemeronStack"); |
s_ephemeronStack->invokeEphemeronCallbacks(visitor); |
} |
@@ -560,9 +566,9 @@ |
} while (!s_markingStack->isEmpty()); |
} |
-void ThreadHeap::postMarkingProcessing(Visitor* visitor) |
-{ |
- TRACE_EVENT0("blink_gc", "ThreadHeap::postMarkingProcessing"); |
+void Heap::postMarkingProcessing(Visitor* visitor) |
+{ |
+ TRACE_EVENT0("blink_gc", "Heap::postMarkingProcessing"); |
// Call post-marking callbacks including: |
// 1. the ephemeronIterationDone callbacks on weak tables to do cleanup |
// (specifically to clear the queued bits for weak hash tables), and |
@@ -576,9 +582,9 @@ |
ASSERT(s_markingStack->isEmpty()); |
} |
-void ThreadHeap::globalWeakProcessing(Visitor* visitor) |
-{ |
- TRACE_EVENT0("blink_gc", "ThreadHeap::globalWeakProcessing"); |
+void Heap::globalWeakProcessing(Visitor* visitor) |
+{ |
+ TRACE_EVENT0("blink_gc", "Heap::globalWeakProcessing"); |
double startTime = WTF::currentTimeMS(); |
// Call weak callbacks on objects that may now be pointing to dead objects. |
@@ -593,20 +599,20 @@ |
globalWeakTimeHistogram.count(timeForGlobalWeakProcessing); |
} |
-void ThreadHeap::collectAllGarbage() |
+void Heap::collectAllGarbage() |
{ |
// We need to run multiple GCs to collect a chain of persistent handles. |
size_t previousLiveObjects = 0; |
for (int i = 0; i < 5; ++i) { |
collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSweep, BlinkGC::ForcedGC); |
- size_t liveObjects = ThreadHeap::heapStats().markedObjectSize(); |
+ size_t liveObjects = Heap::heapStats().markedObjectSize(); |
if (liveObjects == previousLiveObjects) |
break; |
previousLiveObjects = liveObjects; |
} |
} |
-void ThreadHeap::reportMemoryUsageHistogram() |
+void Heap::reportMemoryUsageHistogram() |
{ |
static size_t supportedMaxSizeInMB = 4 * 1024; |
static size_t observedMaxSizeInMB = 0; |
@@ -615,7 +621,7 @@ |
if (!isMainThread()) |
return; |
// +1 is for rounding up the sizeInMB. |
- size_t sizeInMB = ThreadHeap::heapStats().allocatedSpace() / 1024 / 1024 + 1; |
+ size_t sizeInMB = Heap::heapStats().allocatedSpace() / 1024 / 1024 + 1; |
if (sizeInMB >= supportedMaxSizeInMB) |
sizeInMB = supportedMaxSizeInMB - 1; |
if (sizeInMB > observedMaxSizeInMB) { |
@@ -627,10 +633,10 @@ |
} |
} |
-void ThreadHeap::reportMemoryUsageForTracing() |
+void Heap::reportMemoryUsageForTracing() |
{ |
#if PRINT_HEAP_STATS |
- // dataLogF("allocatedSpace=%ldMB, allocatedObjectSize=%ldMB, markedObjectSize=%ldMB, partitionAllocSize=%ldMB, wrapperCount=%ld, collectedWrapperCount=%ld\n", ThreadHeap::allocatedSpace() / 1024 / 1024, ThreadHeap::allocatedObjectSize() / 1024 / 1024, ThreadHeap::markedObjectSize() / 1024 / 1024, WTF::Partitions::totalSizeOfCommittedPages() / 1024 / 1024, ThreadHeap::wrapperCount(), ThreadHeap::collectedWrapperCount()); |
+ // dataLogF("allocatedSpace=%ldMB, allocatedObjectSize=%ldMB, markedObjectSize=%ldMB, partitionAllocSize=%ldMB, wrapperCount=%ld, collectedWrapperCount=%ld\n", Heap::allocatedSpace() / 1024 / 1024, Heap::allocatedObjectSize() / 1024 / 1024, Heap::markedObjectSize() / 1024 / 1024, WTF::Partitions::totalSizeOfCommittedPages() / 1024 / 1024, Heap::wrapperCount(), Heap::collectedWrapperCount()); |
#endif |
bool gcTracingEnabled; |
@@ -640,19 +646,19 @@ |
// These values are divided by 1024 to avoid overflow in practical cases (TRACE_COUNTER values are 32-bit ints). |
// They are capped to INT_MAX just in case. |
- TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "ThreadHeap::allocatedObjectSizeKB", std::min(ThreadHeap::heapStats().allocatedObjectSize() / 1024, static_cast<size_t>(INT_MAX))); |
- TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "ThreadHeap::markedObjectSizeKB", std::min(ThreadHeap::heapStats().markedObjectSize() / 1024, static_cast<size_t>(INT_MAX))); |
- TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "ThreadHeap::markedObjectSizeAtLastCompleteSweepKB", std::min(ThreadHeap::heapStats().markedObjectSizeAtLastCompleteSweep() / 1024, static_cast<size_t>(INT_MAX))); |
- TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "ThreadHeap::allocatedSpaceKB", std::min(ThreadHeap::heapStats().allocatedSpace() / 1024, static_cast<size_t>(INT_MAX))); |
- TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "ThreadHeap::objectSizeAtLastGCKB", std::min(ThreadHeap::heapStats().objectSizeAtLastGC() / 1024, static_cast<size_t>(INT_MAX))); |
- TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "ThreadHeap::wrapperCount", std::min(ThreadHeap::heapStats().wrapperCount(), static_cast<size_t>(INT_MAX))); |
- TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "ThreadHeap::heapStats().wrapperCountAtLastGC", std::min(ThreadHeap::heapStats().wrapperCountAtLastGC(), static_cast<size_t>(INT_MAX))); |
- TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "ThreadHeap::collectedWrapperCount", std::min(ThreadHeap::heapStats().collectedWrapperCount(), static_cast<size_t>(INT_MAX))); |
- TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "ThreadHeap::partitionAllocSizeAtLastGCKB", std::min(ThreadHeap::heapStats().partitionAllocSizeAtLastGC() / 1024, static_cast<size_t>(INT_MAX))); |
+ TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "Heap::allocatedObjectSizeKB", std::min(Heap::heapStats().allocatedObjectSize() / 1024, static_cast<size_t>(INT_MAX))); |
+ TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "Heap::markedObjectSizeKB", std::min(Heap::heapStats().markedObjectSize() / 1024, static_cast<size_t>(INT_MAX))); |
+ TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "Heap::markedObjectSizeAtLastCompleteSweepKB", std::min(Heap::heapStats().markedObjectSizeAtLastCompleteSweep() / 1024, static_cast<size_t>(INT_MAX))); |
+ TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "Heap::allocatedSpaceKB", std::min(Heap::heapStats().allocatedSpace() / 1024, static_cast<size_t>(INT_MAX))); |
+ TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "Heap::objectSizeAtLastGCKB", std::min(Heap::heapStats().objectSizeAtLastGC() / 1024, static_cast<size_t>(INT_MAX))); |
+ TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "Heap::wrapperCount", std::min(Heap::heapStats().wrapperCount(), static_cast<size_t>(INT_MAX))); |
+ TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "Heap::heapStats().wrapperCountAtLastGC", std::min(Heap::heapStats().wrapperCountAtLastGC(), static_cast<size_t>(INT_MAX))); |
+ TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "Heap::collectedWrapperCount", std::min(Heap::heapStats().collectedWrapperCount(), static_cast<size_t>(INT_MAX))); |
+ TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "Heap::partitionAllocSizeAtLastGCKB", std::min(Heap::heapStats().partitionAllocSizeAtLastGC() / 1024, static_cast<size_t>(INT_MAX))); |
TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink_gc"), "Partitions::totalSizeOfCommittedPagesKB", std::min(WTF::Partitions::totalSizeOfCommittedPages() / 1024, static_cast<size_t>(INT_MAX))); |
} |
-size_t ThreadHeap::objectPayloadSizeForTesting() |
+size_t Heap::objectPayloadSizeForTesting() |
{ |
size_t objectPayloadSize = 0; |
for (ThreadState* state : ThreadState::attachedThreads()) { |
@@ -666,48 +672,49 @@ |
return objectPayloadSize; |
} |
-RegionTree* ThreadHeap::getRegionTree() |
+RegionTree* Heap::getRegionTree() |
{ |
DEFINE_THREAD_SAFE_STATIC_LOCAL(RegionTree, tree, new RegionTree); |
return &tree; |
} |
-BasePage* ThreadHeap::lookup(Address address) |
-{ |
- ASSERT(ThreadState::current()->isInGC()); |
- if (PageMemoryRegion* region = ThreadHeap::getRegionTree()->lookup(address)) { |
+BasePage* Heap::lookup(Address address) |
+{ |
+ ASSERT(ThreadState::current()->isInGC()); |
+ if (PageMemoryRegion* region = Heap::getRegionTree()->lookup(address)) { |
BasePage* page = region->pageFromAddress(address); |
return page && !page->orphaned() ? page : nullptr; |
} |
return nullptr; |
} |
-void ThreadHeap::resetHeapCounters() |
-{ |
- ASSERT(ThreadState::current()->isInGC()); |
- |
- ThreadHeap::reportMemoryUsageForTracing(); |
+void Heap::resetHeapCounters() |
+{ |
+ ASSERT(ThreadState::current()->isInGC()); |
+ |
+ Heap::reportMemoryUsageForTracing(); |
ProcessHeap::resetHeapCounters(); |
- ThreadHeap::heapStats().reset(); |
+ Heap::heapStats().reset(); |
for (ThreadState* state : ThreadState::attachedThreads()) |
state->resetHeapCounters(); |
} |
-ThreadHeapStats& ThreadHeap::heapStats() |
+// TODO(keishi): Make this a member of ThreadHeap. |
+ThreadHeapStats& Heap::heapStats() |
{ |
DEFINE_THREAD_SAFE_STATIC_LOCAL(ThreadHeapStats, stats, new ThreadHeapStats()); |
return stats; |
} |
-CallbackStack* ThreadHeap::s_markingStack; |
-CallbackStack* ThreadHeap::s_postMarkingCallbackStack; |
-CallbackStack* ThreadHeap::s_globalWeakCallbackStack; |
-CallbackStack* ThreadHeap::s_ephemeronStack; |
-HeapDoesNotContainCache* ThreadHeap::s_heapDoesNotContainCache; |
-FreePagePool* ThreadHeap::s_freePagePool; |
-OrphanedPagePool* ThreadHeap::s_orphanedPagePool; |
- |
-BlinkGC::GCReason ThreadHeap::s_lastGCReason = BlinkGC::NumberOfGCReason; |
+CallbackStack* Heap::s_markingStack; |
+CallbackStack* Heap::s_postMarkingCallbackStack; |
+CallbackStack* Heap::s_globalWeakCallbackStack; |
+CallbackStack* Heap::s_ephemeronStack; |
+HeapDoesNotContainCache* Heap::s_heapDoesNotContainCache; |
+FreePagePool* Heap::s_freePagePool; |
+OrphanedPagePool* Heap::s_orphanedPagePool; |
+ |
+BlinkGC::GCReason Heap::s_lastGCReason = BlinkGC::NumberOfGCReason; |
} // namespace blink |