Index: src/profile-generator.cc |
diff --git a/src/profile-generator.cc b/src/profile-generator.cc |
index 7653c095697ea04a0af1cb8a4b298abd70a75ba0..cc46606f8f57576536385196560a9db2299c3e63 100644 |
--- a/src/profile-generator.cc |
+++ b/src/profile-generator.cc |
@@ -1188,6 +1188,25 @@ void HeapGraphPath::Print() { |
HeapObject *const HeapSnapshot::kInternalRootObject = |
reinterpret_cast<HeapObject*>(1); |
+ |
+// It is very important to keep objects that form a heap snapshot |
+// as small as possible. |
+namespace { // Avoid littering the global namespace. |
+ |
+template <size_t ptr_size> struct SnapshotSizeConstants; |
+ |
+template <> struct SnapshotSizeConstants<4> { |
+ static const int kExpectedHeapGraphEdgeSize = 12; |
+ static const int kExpectedHeapEntrySize = 32; |
+}; |
+ |
+template <> struct SnapshotSizeConstants<8> { |
+ static const int kExpectedHeapGraphEdgeSize = 24; |
+ static const int kExpectedHeapEntrySize = 40; |
+}; |
+ |
+} // namespace |
+ |
HeapSnapshot::HeapSnapshot(HeapSnapshotsCollection* collection, |
const char* title, |
unsigned uid) |
@@ -1197,6 +1216,12 @@ HeapSnapshot::HeapSnapshot(HeapSnapshotsCollection* collection, |
root_entry_index_(-1), |
raw_entries_(NULL), |
entries_sorted_(false) { |
+ STATIC_ASSERT( |
+ sizeof(HeapGraphEdge) == |
+ SnapshotSizeConstants<sizeof(void*)>::kExpectedHeapGraphEdgeSize); |
+ STATIC_ASSERT( |
+ sizeof(HeapEntry) == |
+ SnapshotSizeConstants<sizeof(void*)>::kExpectedHeapEntrySize); |
} |