Index: Source/platform/heap/Heap.cpp |
diff --git a/Source/platform/heap/Heap.cpp b/Source/platform/heap/Heap.cpp |
index cb5a75fe4b0fb2f167f37942ce38d2df3d81e540..a70abaa13e3256d83437839e0a6131b2ebaa297a 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 tag = header->gcInfoIndex(); |
haraken
2015/08/10 23:54:48
tag => gcInfoIndex
ssid
2015/08/11 09:03:03
Done.
|
+ info.liveCount[tag]++; |
+ info.liveSize[tag] += header->size(); |
} else { |
deadCount++; |
deadSize += header->size(); |
+ |
+ size_t tag = header->gcInfoIndex(); |
haraken
2015/08/10 23:54:48
Ditto.
|
+ info.deadCount[tag]++; |
+ info.deadSize[tag] += 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 tag = header->gcInfoIndex(); |
haraken
2015/08/10 23:54:48
Ditto.
ssid
2015/08/11 09:03:03
Done.
|
if (header->isMarked()) { |
liveCount = 1; |
liveSize += header->payloadSize(); |
+ info.liveCount[tag]++; |
+ info.liveSize[tag] += header->size(); |
haraken
2015/08/10 23:54:48
Yeah, it is inconsistent we mix header->size() and
ssid
2015/08/11 09:03:03
Sorry, I keep getting confused between these two.
|
} else { |
deadCount = 1; |
deadSize += header->payloadSize(); |
+ info.deadCount[tag]++; |
+ info.deadSize[tag] += header->size(); |
} |
pageDump->AddScalar("live_count", "objects", liveCount); |