| Index: src/profile-generator.cc
|
| diff --git a/src/profile-generator.cc b/src/profile-generator.cc
|
| index 02c67f4ea6656d057610a1b549edf01e174fd672..1ffeaadf0e51466434b9f30d31679926da619cf4 100644
|
| --- a/src/profile-generator.cc
|
| +++ b/src/profile-generator.cc
|
| @@ -169,6 +169,15 @@ const char* StringsStorage::GetName(int index) {
|
| }
|
|
|
|
|
| +size_t StringsStorage::GetUsedMemorySize() const {
|
| + size_t size = sizeof(*this);
|
| + size += sizeof(HashMap::Entry) * names_.capacity();
|
| + for (HashMap::Entry* p = names_.Start(); p != NULL; p = names_.Next(p)) {
|
| + size += strlen(reinterpret_cast<const char*>(p->value)) + 1;
|
| + }
|
| + return size;
|
| +}
|
| +
|
| const char* const CodeEntry::kEmptyNamePrefix = "";
|
|
|
|
|
| @@ -1083,12 +1092,16 @@ template <size_t ptr_size> struct SnapshotSizeConstants;
|
| template <> struct SnapshotSizeConstants<4> {
|
| static const int kExpectedHeapGraphEdgeSize = 12;
|
| static const int kExpectedHeapEntrySize = 24;
|
| + static const int kExpectedHeapSnapshotsCollectionSize = 96;
|
| + static const int kExpectedHeapSnapshotSize = 136;
|
| static const size_t kMaxSerializableSnapshotRawSize = 256 * MB;
|
| };
|
|
|
| template <> struct SnapshotSizeConstants<8> {
|
| static const int kExpectedHeapGraphEdgeSize = 24;
|
| static const int kExpectedHeapEntrySize = 32;
|
| + static const int kExpectedHeapSnapshotsCollectionSize = 144;
|
| + static const int kExpectedHeapSnapshotSize = 168;
|
| static const uint64_t kMaxSerializableSnapshotRawSize =
|
| static_cast<uint64_t>(6000) * MB;
|
| };
|
| @@ -1243,12 +1256,15 @@ void HeapSnapshot::Print(int max_depth) {
|
|
|
| template<typename T, class P>
|
| static size_t GetMemoryUsedByList(const List<T, P>& list) {
|
| - return list.capacity() * sizeof(T);
|
| + return list.length() * sizeof(T) + sizeof(list);
|
| }
|
|
|
|
|
| size_t HeapSnapshot::RawSnapshotSize() const {
|
| + STATIC_CHECK(sizeof(*this) ==
|
| + SnapshotSizeConstants<kPointerSize>::kExpectedHeapSnapshotSize);
|
| return
|
| + sizeof(*this) +
|
| GetMemoryUsedByList(entries_) +
|
| GetMemoryUsedByList(edges_) +
|
| GetMemoryUsedByList(children_) +
|
| @@ -1446,6 +1462,15 @@ SnapshotObjectId HeapObjectsMap::GenerateId(v8::RetainedObjectInfo* info) {
|
| }
|
|
|
|
|
| +size_t HeapObjectsMap::GetUsedMemorySize() const {
|
| + return
|
| + sizeof(*this) +
|
| + sizeof(HashMap::Entry) * entries_map_.capacity() +
|
| + GetMemoryUsedByList(entries_) +
|
| + GetMemoryUsedByList(time_intervals_);
|
| +}
|
| +
|
| +
|
| HeapSnapshotsCollection::HeapSnapshotsCollection()
|
| : is_tracking_objects_(false),
|
| snapshots_uids_(HeapSnapshotsMatch),
|
| @@ -1525,6 +1550,22 @@ Handle<HeapObject> HeapSnapshotsCollection::FindHeapObjectById(
|
| }
|
|
|
|
|
| +size_t HeapSnapshotsCollection::GetUsedMemorySize() const {
|
| + STATIC_CHECK(
|
| + sizeof(*this) == SnapshotSizeConstants<kPointerSize>::
|
| + kExpectedHeapSnapshotsCollectionSize);
|
| + size_t size = sizeof(*this);
|
| + size += names_.GetUsedMemorySize();
|
| + size += ids_.GetUsedMemorySize();
|
| + size += sizeof(HashMap::Entry) * snapshots_uids_.capacity();
|
| + size += GetMemoryUsedByList(snapshots_);
|
| + for (int i = 0; i < snapshots_.length(); ++i) {
|
| + size += snapshots_[i]->RawSnapshotSize();
|
| + }
|
| + return size;
|
| +}
|
| +
|
| +
|
| HeapEntriesMap::HeapEntriesMap()
|
| : entries_(HeapThingsMatch) {
|
| }
|
|
|