Heap profiler: Add static assertions for heap snapshot entities' sizes.
authormikhail.naganov@gmail.com <mikhail.naganov@gmail.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 10 Aug 2010 07:30:14 +0000 (07:30 +0000)
committermikhail.naganov@gmail.com <mikhail.naganov@gmail.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 10 Aug 2010 07:30:14 +0000 (07:30 +0000)
Review URL: http://codereview.chromium.org/2808112

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5224 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/profile-generator.cc

index 7653c095697ea04a0af1cb8a4b298abd70a75ba0..cc46606f8f57576536385196560a9db2299c3e63 100644 (file)
@@ -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);
 }