diff --git a/src/profile-generator.cc b/src/profile-generator.cc index 01c4e4fe87..7653c09569 100644 --- a/src/profile-generator.cc +++ b/src/profile-generator.cc @@ -1465,6 +1465,7 @@ uint64_t HeapObjectsMap::FindEntry(Address addr) { void HeapObjectsMap::RemoveDeadEntries() { List* new_entries = new List(); + List dead_entries; for (HashMap::Entry* entry = entries_map_.Start(); entry != NULL; entry = entries_map_.Next(entry)) { @@ -1474,8 +1475,15 @@ void HeapObjectsMap::RemoveDeadEntries() { if (entry_info.accessed) { entry->value = reinterpret_cast(new_entries->length()); new_entries->Add(EntryInfo(entry_info.id, false)); + } else { + dead_entries.Add(entry->key); } } + for (int i = 0; i < dead_entries.length(); ++i) { + void* raw_entry = dead_entries[i]; + entries_map_.Remove( + raw_entry, AddressHash(reinterpret_cast
(raw_entry))); + } delete entries_; entries_ = new_entries; } diff --git a/src/profile-generator.h b/src/profile-generator.h index 8bd6ef358a..4c5eb3f158 100644 --- a/src/profile-generator.h +++ b/src/profile-generator.h @@ -438,7 +438,7 @@ class HeapGraphEdge BASE_EMBEDDED { void Init(int child_index, Type type, const char* name, HeapEntry* to); void Init(int child_index, int index, HeapEntry* to); - Type type() { return type_; } + Type type() { return static_cast(type_); } int index() { ASSERT(type_ == kElement); return index_; @@ -455,7 +455,7 @@ class HeapGraphEdge BASE_EMBEDDED { private: int child_index_ : 30; - Type type_ : 2; + unsigned type_ : 2; union { int index_; const char* name_; @@ -511,7 +511,7 @@ class HeapEntry BASE_EMBEDDED { int retainers_count); HeapSnapshot* snapshot() { return snapshot_; } - Type type() { return type_; } + Type type() { return static_cast(type_); } const char* name() { return name_; } uint64_t id() { return id_; } int self_size() { return self_size_; } @@ -566,17 +566,17 @@ class HeapEntry BASE_EMBEDDED { } const char* TypeAsString(); - HeapSnapshot* snapshot_; unsigned painted_: 2; - Type type_: 3; + unsigned type_: 3; // The calculated data is stored in HeapSnapshot in HeapEntryCalculatedData // entries. See AddCalculatedData and GetCalculatedData. int calculated_data_index_: 27; - const char* name_; - uint64_t id_; int self_size_; int children_count_; int retainers_count_; + HeapSnapshot* snapshot_; + const char* name_; + uint64_t id_; static const unsigned kUnpainted = 0; static const unsigned kPainted = 1;