OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 #include "Source/platform/heap/BlinkGCMemoryDumpProvider.h" | 6 #include "Source/platform/heap/BlinkGCMemoryDumpProvider.h" |
7 | 7 |
8 #include "platform/heap/Handle.h" | 8 #include "platform/heap/Handle.h" |
| 9 #include "public/platform/Platform.h" |
9 #include "public/platform/WebMemoryAllocatorDump.h" | 10 #include "public/platform/WebMemoryAllocatorDump.h" |
10 #include "public/platform/WebProcessMemoryDump.h" | 11 #include "public/platform/WebProcessMemoryDump.h" |
11 #include "wtf/StdLibExtras.h" | 12 #include "wtf/StdLibExtras.h" |
12 #include "wtf/Threading.h" | 13 #include "wtf/Threading.h" |
13 | 14 |
14 namespace blink { | 15 namespace blink { |
15 | 16 |
16 BlinkGCMemoryDumpProvider* BlinkGCMemoryDumpProvider::instance() | 17 BlinkGCMemoryDumpProvider* BlinkGCMemoryDumpProvider::instance() |
17 { | 18 { |
18 DEFINE_STATIC_LOCAL(BlinkGCMemoryDumpProvider, instance, ()); | 19 DEFINE_STATIC_LOCAL(BlinkGCMemoryDumpProvider, instance, ()); |
19 return &instance; | 20 return &instance; |
20 } | 21 } |
21 | 22 |
| 23 BlinkGCMemoryDumpProvider::~BlinkGCMemoryDumpProvider() |
| 24 { |
| 25 } |
| 26 |
22 bool BlinkGCMemoryDumpProvider::onMemoryDump(blink::WebProcessMemoryDump* memory
Dump) | 27 bool BlinkGCMemoryDumpProvider::onMemoryDump(blink::WebProcessMemoryDump* memory
Dump) |
23 { | 28 { |
| 29 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::TakeSn
apshot, Heap::ForcedGC); |
24 String dumpName = String::format("blink_gc/thread_%lu", static_cast<unsigned
long>(WTF::currentThread())); | 30 String dumpName = String::format("blink_gc/thread_%lu", static_cast<unsigned
long>(WTF::currentThread())); |
25 WebMemoryAllocatorDump* allocatorDump = memoryDump->createMemoryAllocatorDum
p(dumpName); | 31 WebMemoryAllocatorDump* allocatorDump = memoryDump->createMemoryAllocatorDum
p(dumpName); |
26 allocatorDump->AddScalar("size", "bytes", Heap::allocatedSpace()); | 32 allocatorDump->AddScalar("size", "bytes", Heap::allocatedSpace()); |
27 | 33 |
28 dumpName.append("/allocated_objects"); | 34 dumpName.append("/allocated_objects"); |
29 WebMemoryAllocatorDump* objectsDump = memoryDump->createMemoryAllocatorDump(
dumpName); | 35 WebMemoryAllocatorDump* objectsDump = memoryDump->createMemoryAllocatorDump(
dumpName); |
30 objectsDump->AddScalar("size", "bytes", Heap::allocatedObjectSize() + Heap::
markedObjectSize()); | 36 objectsDump->AddScalar("size", "bytes", Heap::allocatedObjectSize() + Heap::
markedObjectSize()); |
31 objectsDump->AddScalar("estimated_live_object_size", "bytes", Heap::estimate
dLiveObjectSize()); | 37 objectsDump->AddScalar("estimated_live_object_size", "bytes", Heap::estimate
dLiveObjectSize()); |
32 | 38 |
| 39 // Merge all dumps collected by Heap::collectGarbage. |
| 40 memoryDump->takeAllDumpsFrom(m_currentProcessMemoryDump.get()); |
33 return true; | 41 return true; |
34 } | 42 } |
35 | 43 |
36 BlinkGCMemoryDumpProvider::BlinkGCMemoryDumpProvider() | 44 WebMemoryAllocatorDump* BlinkGCMemoryDumpProvider::createMemoryAllocatorDumpForC
urrentGC(const String& absoluteName) |
37 { | 45 { |
| 46 return m_currentProcessMemoryDump->createMemoryAllocatorDump(absoluteName); |
38 } | 47 } |
39 | 48 |
40 BlinkGCMemoryDumpProvider::~BlinkGCMemoryDumpProvider() | 49 void BlinkGCMemoryDumpProvider::clearProcessDumpForCurrentGC() |
41 { | 50 { |
| 51 m_currentProcessMemoryDump->clear(); |
| 52 } |
| 53 |
| 54 BlinkGCMemoryDumpProvider::BlinkGCMemoryDumpProvider() |
| 55 : m_currentProcessMemoryDump(adoptPtr(Platform::current()->createProcessMemo
ryDump())) |
| 56 { |
| 57 ASSERT(m_currentProcessMemoryDump); |
42 } | 58 } |
43 | 59 |
44 } // namespace blink | 60 } // namespace blink |
OLD | NEW |