Index: Source/platform/heap/Heap.cpp |
diff --git a/Source/platform/heap/Heap.cpp b/Source/platform/heap/Heap.cpp |
index fbbc840d354685efba92cd8e5d74c7488d247cdb..d41fb7386f419b573c37a75001b7109318d9a618 100644 |
--- a/Source/platform/heap/Heap.cpp |
+++ b/Source/platform/heap/Heap.cpp |
@@ -260,12 +260,12 @@ void BaseHeap::cleanupPages() |
m_firstPage = nullptr; |
} |
-void BaseHeap::takeSnapshot(const String& dumpBaseName) |
+void BaseHeap::takeSnapshot(const String& dumpBaseName, ThreadState::GCSnapshotInfo& info) |
{ |
WebMemoryAllocatorDump* allocatorDump = BlinkGCMemoryDumpProvider::instance()->createMemoryAllocatorDumpForCurrentGC(dumpBaseName); |
size_t pageIndex = 0; |
for (BasePage* page = m_firstUnsweptPage; page; page = page->next()) { |
- page->takeSnapshot(dumpBaseName, pageIndex); |
+ page->takeSnapshot(dumpBaseName, pageIndex, info); |
pageIndex++; |
} |
allocatorDump->AddScalar("blink_page_count", "objects", pageIndex); |
@@ -1488,7 +1488,7 @@ void NormalPage::markOrphaned() |
BasePage::markOrphaned(); |
} |
-void NormalPage::takeSnapshot(String dumpName, size_t pageIndex) |
+void NormalPage::takeSnapshot(String dumpName, size_t pageIndex, ThreadState::GCSnapshotInfo& info) |
{ |
dumpName.append(String::format("/pages/page_%lu", static_cast<unsigned long>(pageIndex))); |
WebMemoryAllocatorDump* pageDump = BlinkGCMemoryDumpProvider::instance()->createMemoryAllocatorDumpForCurrentGC(dumpName); |
@@ -1508,9 +1508,17 @@ void NormalPage::takeSnapshot(String dumpName, size_t pageIndex) |
} else if (header->isMarked()) { |
liveCount++; |
liveSize += header->size(); |
+ |
+ size_t tag = info.getClassTag(Heap::gcInfo(header->gcInfoIndex())); |
+ info.liveCount[tag]++; |
+ info.liveSize[tag] += header->size(); |
} else { |
deadCount++; |
deadSize += header->size(); |
+ |
+ size_t tag = info.getClassTag(Heap::gcInfo(header->gcInfoIndex())); |
+ info.deadCount[tag]++; |
+ info.deadSize[tag] += header->size(); |
} |
} |
@@ -1697,7 +1705,7 @@ void LargeObjectPage::markOrphaned() |
BasePage::markOrphaned(); |
} |
-void LargeObjectPage::takeSnapshot(String dumpName, size_t pageIndex) |
+void LargeObjectPage::takeSnapshot(String dumpName, size_t pageIndex, ThreadState::GCSnapshotInfo& info) |
{ |
dumpName.append(String::format("/pages/page_%lu", static_cast<unsigned long>(pageIndex))); |
WebMemoryAllocatorDump* pageDump = BlinkGCMemoryDumpProvider::instance()->createMemoryAllocatorDumpForCurrentGC(dumpName); |
@@ -1707,12 +1715,17 @@ void LargeObjectPage::takeSnapshot(String dumpName, size_t pageIndex) |
size_t liveCount = 0; |
size_t deadCount = 0; |
HeapObjectHeader* header = heapObjectHeader(); |
+ size_t tag = info.getClassTag(Heap::gcInfo(header->gcInfoIndex())); |
if (header->isMarked()) { |
liveCount = 1; |
liveSize += header->size(); |
+ info.liveCount[tag]++; |
+ info.liveSize[tag] += header->size(); |
haraken
2015/06/26 05:35:28
header->size() => header->payloadSize()
header->s
ssid
2015/06/26 10:10:28
Done.
|
} else { |
deadCount = 1; |
deadSize += header->size(); |
+ info.deadCount[tag]++; |
+ info.deadSize[tag] += header->size(); |
haraken
2015/06/26 05:35:28
Ditto.
|
} |
pageDump->AddScalar("live_count", "objects", liveCount); |