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;

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

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5217 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 9677b96b
...@@ -1465,6 +1465,7 @@ uint64_t HeapObjectsMap::FindEntry(Address addr) { ...@@ -1465,6 +1465,7 @@ uint64_t HeapObjectsMap::FindEntry(Address addr) {
void HeapObjectsMap::RemoveDeadEntries() { void HeapObjectsMap::RemoveDeadEntries() {
List<EntryInfo>* new_entries = new List<EntryInfo>(); List<EntryInfo>* new_entries = new List<EntryInfo>();
List<void*> dead_entries;
for (HashMap::Entry* entry = entries_map_.Start(); for (HashMap::Entry* entry = entries_map_.Start();
entry != NULL; entry != NULL;
entry = entries_map_.Next(entry)) { entry = entries_map_.Next(entry)) {
...@@ -1474,8 +1475,15 @@ void HeapObjectsMap::RemoveDeadEntries() { ...@@ -1474,8 +1475,15 @@ void HeapObjectsMap::RemoveDeadEntries() {
if (entry_info.accessed) { if (entry_info.accessed) {
entry->value = reinterpret_cast<void*>(new_entries->length()); entry->value = reinterpret_cast<void*>(new_entries->length());
new_entries->Add(EntryInfo(entry_info.id, false)); 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_; delete entries_;
entries_ = new_entries; entries_ = new_entries;
} }
......
...@@ -438,7 +438,7 @@ class HeapGraphEdge BASE_EMBEDDED { ...@@ -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, Type type, const char* name, HeapEntry* to);
void Init(int child_index, int index, HeapEntry* to); void Init(int child_index, int index, HeapEntry* to);
Type type() { return type_; } Type type() { return static_cast<Type>(type_); }
int index() { int index() {
ASSERT(type_ == kElement); ASSERT(type_ == kElement);
return index_; return index_;
...@@ -455,7 +455,7 @@ class HeapGraphEdge BASE_EMBEDDED { ...@@ -455,7 +455,7 @@ class HeapGraphEdge BASE_EMBEDDED {
private: private:
int child_index_ : 30; int child_index_ : 30;
Type type_ : 2; unsigned type_ : 2;
union { union {
int index_; int index_;
const char* name_; const char* name_;
...@@ -511,7 +511,7 @@ class HeapEntry BASE_EMBEDDED { ...@@ -511,7 +511,7 @@ class HeapEntry BASE_EMBEDDED {
int retainers_count); int retainers_count);
HeapSnapshot* snapshot() { return snapshot_; } HeapSnapshot* snapshot() { return snapshot_; }
Type type() { return type_; } Type type() { return static_cast<Type>(type_); }
const char* name() { return name_; } const char* name() { return name_; }
uint64_t id() { return id_; } uint64_t id() { return id_; }
int self_size() { return self_size_; } int self_size() { return self_size_; }
...@@ -566,17 +566,17 @@ class HeapEntry BASE_EMBEDDED { ...@@ -566,17 +566,17 @@ class HeapEntry BASE_EMBEDDED {
} }
const char* TypeAsString(); const char* TypeAsString();
HeapSnapshot* snapshot_;
unsigned painted_: 2; unsigned painted_: 2;
Type type_: 3; unsigned type_: 3;
// The calculated data is stored in HeapSnapshot in HeapEntryCalculatedData // The calculated data is stored in HeapSnapshot in HeapEntryCalculatedData
// entries. See AddCalculatedData and GetCalculatedData. // entries. See AddCalculatedData and GetCalculatedData.
int calculated_data_index_: 27; int calculated_data_index_: 27;
const char* name_;
uint64_t id_;
int self_size_; int self_size_;
int children_count_; int children_count_;
int retainers_count_; int retainers_count_;
HeapSnapshot* snapshot_;
const char* name_;
uint64_t id_;
static const unsigned kUnpainted = 0; static const unsigned kUnpainted = 0;
static const unsigned kPainted = 1; static const unsigned kPainted = 1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment