Heap profiler: Add static assertions for heap snapshot entities' sizes.

Review URL: http://codereview.chromium.org/2808112

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5224 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
mikhail.naganov@gmail.com 2010-08-10 07:30:14 +00:00
parent 31fd432f2d
commit bdf15ec9f3

View File

@ -1188,6 +1188,25 @@ void HeapGraphPath::Print() {
HeapObject *const HeapSnapshot::kInternalRootObject = HeapObject *const HeapSnapshot::kInternalRootObject =
reinterpret_cast<HeapObject*>(1); 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, HeapSnapshot::HeapSnapshot(HeapSnapshotsCollection* collection,
const char* title, const char* title,
unsigned uid) unsigned uid)
@ -1197,6 +1216,12 @@ HeapSnapshot::HeapSnapshot(HeapSnapshotsCollection* collection,
root_entry_index_(-1), root_entry_index_(-1),
raw_entries_(NULL), raw_entries_(NULL),
entries_sorted_(false) { entries_sorted_(false) {
STATIC_ASSERT(
sizeof(HeapGraphEdge) ==
SnapshotSizeConstants<sizeof(void*)>::kExpectedHeapGraphEdgeSize);
STATIC_ASSERT(
sizeof(HeapEntry) ==
SnapshotSizeConstants<sizeof(void*)>::kExpectedHeapEntrySize);
} }