Index: Source/platform/heap/Heap.cpp |
diff --git a/Source/platform/heap/Heap.cpp b/Source/platform/heap/Heap.cpp |
index cb5a75fe4b0fb2f167f37942ce38d2df3d81e540..ef9249c058ee6469fe8655e1d0367e00607a7168 100644 |
--- a/Source/platform/heap/Heap.cpp |
+++ b/Source/platform/heap/Heap.cpp |
@@ -242,7 +242,7 @@ void BaseHeap::cleanupPages() |
m_firstPage = nullptr; |
} |
-void BaseHeap::takeSnapshot(const String& dumpBaseName) |
+void BaseHeap::takeSnapshot(const String& dumpBaseName, ThreadState::GCSnapshotInfo& info) |
{ |
// |dumpBaseName| at this point is "blink_gc/thread_X/heaps/HeapName" |
WebMemoryAllocatorDump* allocatorDump = BlinkGCMemoryDumpProvider::instance()->createMemoryAllocatorDumpForCurrentGC(dumpBaseName); |
@@ -252,7 +252,7 @@ void BaseHeap::takeSnapshot(const String& dumpBaseName) |
for (BasePage* page = m_firstUnsweptPage; page; page = page->next()) { |
size_t heapPageFreeSize = 0; |
size_t heapPageFreeCount = 0; |
- page->takeSnapshot(dumpBaseName, pageIndex, &heapPageFreeSize, &heapPageFreeCount); |
+ page->takeSnapshot(dumpBaseName, pageIndex, info, &heapPageFreeSize, &heapPageFreeCount); |
heapTotalFreeSize += heapPageFreeSize; |
heapTotalFreeCount += heapPageFreeCount; |
pageIndex++; |
@@ -1555,7 +1555,7 @@ void NormalPage::markOrphaned() |
BasePage::markOrphaned(); |
} |
-void NormalPage::takeSnapshot(String dumpName, size_t pageIndex, size_t* outFreeSize, size_t* outFreeCount) |
+void NormalPage::takeSnapshot(String dumpName, size_t pageIndex, ThreadState::GCSnapshotInfo& info, size_t* outFreeSize, size_t* outFreeCount) |
{ |
dumpName.append(String::format("/pages/page_%lu", static_cast<unsigned long>(pageIndex))); |
WebMemoryAllocatorDump* pageDump = BlinkGCMemoryDumpProvider::instance()->createMemoryAllocatorDumpForCurrentGC(dumpName); |
@@ -1575,9 +1575,17 @@ void NormalPage::takeSnapshot(String dumpName, size_t pageIndex, size_t* outFree |
} else if (header->isMarked()) { |
liveCount++; |
liveSize += header->size(); |
+ |
+ size_t gcInfoIndex = header->gcInfoIndex(); |
+ info.liveCount[gcInfoIndex]++; |
+ info.liveSize[gcInfoIndex] += header->size(); |
} else { |
deadCount++; |
deadSize += header->size(); |
+ |
+ size_t gcInfoIndex = header->gcInfoIndex(); |
+ info.deadCount[gcInfoIndex]++; |
+ info.deadSize[gcInfoIndex] += header->size(); |
} |
} |
@@ -1766,7 +1774,7 @@ void LargeObjectPage::markOrphaned() |
BasePage::markOrphaned(); |
} |
-void LargeObjectPage::takeSnapshot(String dumpName, size_t pageIndex, size_t* outFreeSize, size_t* outFreeCount) |
+void LargeObjectPage::takeSnapshot(String dumpName, size_t pageIndex, ThreadState::GCSnapshotInfo& info, size_t* outFreeSize, size_t* outFreeCount) |
{ |
dumpName.append(String::format("/pages/page_%lu", static_cast<unsigned long>(pageIndex))); |
WebMemoryAllocatorDump* pageDump = BlinkGCMemoryDumpProvider::instance()->createMemoryAllocatorDumpForCurrentGC(dumpName); |
@@ -1776,12 +1784,17 @@ void LargeObjectPage::takeSnapshot(String dumpName, size_t pageIndex, size_t* ou |
size_t liveCount = 0; |
size_t deadCount = 0; |
HeapObjectHeader* header = heapObjectHeader(); |
+ size_t gcInfoIndex = header->gcInfoIndex(); |
if (header->isMarked()) { |
liveCount = 1; |
liveSize += header->payloadSize(); |
+ info.liveCount[gcInfoIndex]++; |
+ info.liveSize[gcInfoIndex] += header->size(); |
} else { |
deadCount = 1; |
deadSize += header->payloadSize(); |
+ info.deadCount[gcInfoIndex]++; |
+ info.deadSize[gcInfoIndex] += header->size(); |
} |
pageDump->AddScalar("live_count", "objects", liveCount); |