Index: src/heap-snapshot-generator.cc |
diff --git a/src/heap-snapshot-generator.cc b/src/heap-snapshot-generator.cc |
index 2d31ca49d1f88118982e487038f470f24bd1f89e..bd47eec63b3e39c88afeb4a85ecb5d0b60dc7a86 100644 |
--- a/src/heap-snapshot-generator.cc |
+++ b/src/heap-snapshot-generator.cc |
@@ -2472,7 +2472,7 @@ void HeapSnapshotJSONSerializer::SerializeImpl() { |
int HeapSnapshotJSONSerializer::GetStringId(const char* s) { |
HashMap::Entry* cache_entry = strings_.Lookup( |
- const_cast<char*>(s), StringHash(s), true); |
+ const_cast<char*>(s), ObjectHash(s), true); |
if (cache_entry->value == NULL) { |
cache_entry->value = reinterpret_cast<void*>(next_string_id_++); |
} |
@@ -2693,21 +2693,37 @@ void HeapSnapshotJSONSerializer::SerializeString(const unsigned char* s) { |
void HeapSnapshotJSONSerializer::SerializeStrings() { |
- ScopedVector<const unsigned char*> sorted_strings( |
- strings_.occupancy() + 1); |
- for (HashMap::Entry* entry = strings_.Start(); |
- entry != NULL; |
- entry = strings_.Next(entry)) { |
- int index = static_cast<int>(reinterpret_cast<uintptr_t>(entry->value)); |
- sorted_strings[index] = reinterpret_cast<const unsigned char*>(entry->key); |
- } |
+ List<HashMap::Entry*> sorted_strings; |
+ SortHashMap(&strings_, &sorted_strings); |
writer_->AddString("\"<dummy>\""); |
- for (int i = 1; i < sorted_strings.length(); ++i) { |
+ for (int i = 0; i < sorted_strings.length(); ++i) { |
writer_->AddCharacter(','); |
- SerializeString(sorted_strings[i]); |
+ SerializeString( |
+ reinterpret_cast<const unsigned char*>(sorted_strings[i]->key)); |
if (writer_->aborted()) return; |
} |
} |
+template<typename T> |
+inline static int SortUsingEntryValue(const T* x, const T* y) { |
+ uintptr_t x_uint = reinterpret_cast<uintptr_t>((*x)->value); |
+ uintptr_t y_uint = reinterpret_cast<uintptr_t>((*y)->value); |
+ if (x_uint > y_uint) { |
+ return 1; |
+ } else if (x_uint == y_uint) { |
+ return 0; |
+ } else { |
+ return -1; |
+ } |
+} |
+ |
+ |
+void HeapSnapshotJSONSerializer::SortHashMap( |
+ HashMap* map, List<HashMap::Entry*>* sorted_entries) { |
+ for (HashMap::Entry* p = map->Start(); p != NULL; p = map->Next(p)) |
+ sorted_entries->Add(p); |
+ sorted_entries->Sort(SortUsingEntryValue); |
+} |
+ |
} } // namespace v8::internal |