Index: Source/platform/heap/Heap.h |
diff --git a/Source/platform/heap/Heap.h b/Source/platform/heap/Heap.h |
index ca2f6c48674398d5efb4b2ac8ddead590f5b7be1..d40eb0827e48f881a4ca75b6c871215804b99026 100644 |
--- a/Source/platform/heap/Heap.h |
+++ b/Source/platform/heap/Heap.h |
@@ -705,6 +705,15 @@ public: |
// All FreeListEntries in the given bucket, n, have size >= 2^n. |
static int bucketIndexForSize(size_t); |
+#if ENABLE(GC_PROFILING) |
+ struct PerBucketFreeListStats { |
+ size_t entryCount; |
+ size_t freeSize; |
+ }; |
+ |
+ void getFreeSizeStats(PerBucketFreeListStats bucketStats[], size_t& totalSize) const; |
+#endif |
+ |
private: |
int m_biggestFreeListIndex; |
@@ -772,6 +781,10 @@ public: |
void shrinkObject(HeapObjectHeader*, size_t); |
void decreasePromptlyFreedSize(size_t size) { m_promptlyFreedSize -= size; } |
+#if ENABLE(GC_PROFILING) |
+ void snapshotFreeList(TracedValue&); |
+#endif |
+ |
private: |
Address outOfLineAllocate(size_t allocationSize, size_t gcInfoIndex); |
Address currentAllocationPoint() const { return m_currentAllocationPoint; } |
@@ -814,6 +827,12 @@ private: |
// The size of promptly freed objects in the heap. |
size_t m_promptlyFreedSize; |
+ |
+#if ENABLE(GC_PROFILING) |
+ size_t m_cumulativeAllocationSize; |
+ size_t m_allocationCount; |
+ size_t m_inlineAllocationCount; |
+#endif |
}; |
// Mask an address down to the enclosing oilpan heap base page. All oilpan heap |
@@ -1332,7 +1351,15 @@ size_t ThreadHeap::allocationSizeFromSize(size_t size) |
Address ThreadHeap::allocateObject(size_t allocationSize, size_t gcInfoIndex) |
{ |
+#if ENABLE(GC_PROFILING) |
+ m_cumulativeAllocationSize += allocationSize; |
+ ++m_allocationCount; |
+#endif |
+ |
if (LIKELY(allocationSize <= m_remainingAllocationSize)) { |
+#if ENABLE(GC_PROFILING) |
+ ++m_inlineAllocationCount; |
+#endif |
Address headerAddress = m_currentAllocationPoint; |
m_currentAllocationPoint += allocationSize; |
m_remainingAllocationSize -= allocationSize; |