Reviewers: Søren Gjesse,
Description:
A follow-up to r5211: fix a couple of issues detected on Windows.
- storage of enums in bit fields;
- removing dead entries from address -> id map in HeapObjectsMap;
- layout of HeapEntry, to avoid class size increase on ia32 due to
alignment;
Please review this at http://codereview.chromium.org/3096008/show
Affected files:
M src/profile-generator.h
M src/profile-generator.cc
Index: src/profile-generator.cc
diff --git a/src/profile-generator.cc b/src/profile-generator.cc
index
01c4e4fe8709a2eb4e1030bba3d828c7d9c4e7d6..7653c095697ea04a0af1cb8a4b298abd70a75ba0
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<EntryInfo>* new_entries = new List<EntryInfo>();
+ List<void*> 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<void*>(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<Address>(raw_entry)));
+ }
delete entries_;
entries_ = new_entries;
}
Index: src/profile-generator.h
diff --git a/src/profile-generator.h b/src/profile-generator.h
index
8bd6ef358a8fd78bcc909fece7a7e9f0caed8f41..4c5eb3f1587c8e3ae04676bacb70df84c0465c7c
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>(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>(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;
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev