Chromium Code Reviews| Index: Source/platform/heap/Heap.cpp |
| diff --git a/Source/platform/heap/Heap.cpp b/Source/platform/heap/Heap.cpp |
| index 3fef547f1660fe8dc9a2fddf735d751d6e8f191d..cb4ee67842fb152f7dc5568b5d8118cd45deaf08 100644 |
| --- a/Source/platform/heap/Heap.cpp |
| +++ b/Source/platform/heap/Heap.cpp |
| @@ -41,6 +41,8 @@ |
| #include "platform/heap/SafePoint.h" |
| #include "platform/heap/ThreadState.h" |
| #include "public/platform/Platform.h" |
| +#include "public/platform/WebMemoryAllocatorDump.h" |
| +#include "public/platform/WebProcessMemoryDump.h" |
| #include "wtf/Assertions.h" |
| #include "wtf/ContainerAnnotations.h" |
| #include "wtf/LeakAnnotations.h" |
| @@ -213,6 +215,16 @@ void BaseHeap::cleanupPages() |
| m_firstPage = nullptr; |
| } |
| +void BaseHeap::dumpMemory(const String& dumpBaseName) |
| +{ |
| + size_t pageCount = 0; |
| + for (BasePage* page = m_firstPage; page; page = page->next()) { |
| + pageCount++; |
| + } |
| + WebMemoryAllocatorDump* allocatorDump = Heap::getLastProcessMemoryDump()->createMemoryAllocatorDump(dumpBaseName); |
| + allocatorDump->AddScalar("blink_page_count", "objects", pageCount); |
| +} |
| + |
| #if ENABLE(ASSERT) || ENABLE(GC_PROFILING) |
| BasePage* BaseHeap::findPageFromAddress(Address address) |
| { |
| @@ -1658,6 +1670,11 @@ void Heap::doShutdown() |
| s_ephemeronStack = nullptr; |
| delete s_regionTree; |
| s_regionTree = nullptr; |
| + if (s_lastProcessMemoryDump) { |
|
Primiano Tucci (use gerrit)
2015/05/22 15:50:21
See my other consideration. If you move this to Bl
ssid
2015/05/22 17:17:10
Done.
|
| + delete s_lastProcessMemoryDump; |
| + s_lastProcessMemoryDump = nullptr; |
| + } |
| + |
| GCInfoTable::shutdown(); |
| ThreadState::shutdown(); |
| ASSERT(Heap::allocatedSpace() == 0); |
| @@ -1863,9 +1880,24 @@ void Heap::preGC() |
| void Heap::postGC(ThreadState::GCType gcType) |
| { |
| + // TODO(ssid): Change this to use api from memory-infra to check tracing |
| + // enabled (crbug.com/490087). |
| + bool enabled; |
|
Primiano Tucci (use gerrit)
2015/05/22 15:50:21
s /enabled/memory_tracing_enabled/
ssid
2015/05/22 17:17:10
Done.
|
| + TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("memory-infra"), &enabled); |
| + if (enabled) |
| + Heap::clearLastProcessMemoryDump(); |
| + |
| ASSERT(ThreadState::current()->isInGC()); |
| - for (ThreadState* state : ThreadState::attachedThreads()) |
| + for (ThreadState* state : ThreadState::attachedThreads()) { |
| + if (enabled) |
| + state->dumpMemory(); |
| + |
| state->postGC(gcType); |
| + } |
| + |
| + // TODO(ssid): Request global dump from blink when support is available |
| + // (crbug.com/490087). For the moment the dump is periodically invoked by |
| + // the MemoryDumpManager every X secs. |
| } |
| const char* Heap::gcReasonString(GCReason reason) |
| @@ -2121,6 +2153,15 @@ size_t Heap::objectPayloadSizeForTesting() |
| return objectPayloadSize; |
| } |
| +WebProcessMemoryDump* Heap::getLastProcessMemoryDump() { return s_lastProcessMemoryDump; } |
| + |
| +void Heap::clearLastProcessMemoryDump() |
|
Primiano Tucci (use gerrit)
2015/05/22 15:50:21
Ouch, this is really my fault, I forgot that WPMD
ssid
2015/05/22 17:17:10
Yes i know. Looked like this file had lots of new(
|
| +{ |
| + if (s_lastProcessMemoryDump) |
| + delete s_lastProcessMemoryDump; |
| + s_lastProcessMemoryDump = Platform::current()->createProcessMemoryDump(); |
| +} |
| + |
| BasePage* Heap::lookup(Address address) |
| { |
| ASSERT(ThreadState::current()->isInGC()); |
| @@ -2240,5 +2281,6 @@ size_t Heap::s_markedObjectSize = 0; |
| size_t Heap::s_estimatedLiveObjectSize = 512 * 1024; |
| size_t Heap::s_externalObjectSizeAtLastGC = 0; |
| double Heap::s_estimatedMarkingTimePerByte = 0.0; |
| +WebProcessMemoryDump* Heap::s_lastProcessMemoryDump; |
|
Primiano Tucci (use gerrit)
2015/05/22 15:50:21
This also goes away :)
ssid
2015/05/22 17:17:10
Done.
|
| } // namespace blink |