Index: src/profile-generator.cc |
diff --git a/src/profile-generator.cc b/src/profile-generator.cc |
index 6b1476f773535eec38864457e934506e8865a57a..85e6a12cea530e1a348dd2c4e2194c484b4f863c 100644 |
--- a/src/profile-generator.cc |
+++ b/src/profile-generator.cc |
@@ -154,14 +154,17 @@ const char* StringsStorage::GetVFormatted(const char* format, va_list args) { |
} |
-const char* StringsStorage::GetName(String* name) { |
+const char* StringsStorage::GetName(Name* name) { |
if (name->IsString()) { |
- int length = Min(kMaxNameSize, name->length()); |
+ String* str = String::cast(name); |
+ int length = Min(kMaxNameSize, str->length()); |
SmartArrayPointer<char> data = |
- name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL, 0, length); |
+ str->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL, 0, length); |
uint32_t hash = StringHasher::HashSequentialString( |
*data, length, name->GetHeap()->HashSeed()); |
return AddOrDisposeString(data.Detach(), hash); |
+ } else if (name->IsSymbol()) { |
+ return "<symbol>"; |
} |
return ""; |
} |
@@ -783,7 +786,7 @@ List<CpuProfile*>* CpuProfilesCollection::Profiles(int security_token_id) { |
CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag, |
- String* name, |
+ Name* name, |
String* resource_name, |
int line_number) { |
CodeEntry* entry = new CodeEntry(tag, |
@@ -812,7 +815,7 @@ CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag, |
CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag, |
const char* name_prefix, |
- String* name) { |
+ Name* name) { |
CodeEntry* entry = new CodeEntry(tag, |
name_prefix, |
GetName(name), |
@@ -2213,7 +2216,7 @@ void V8HeapExplorer::ExtractPropertyReferences(JSObject* js_obj, int entry) { |
case FIELD: { |
int index = descs->GetFieldIndex(i); |
- String* k = descs->GetKey(i); |
+ Name* k = descs->GetKey(i); |
if (index < js_obj->map()->inobject_properties()) { |
Object* value = js_obj->InObjectPropertyAt(index); |
if (k != heap_->hidden_string()) { |
@@ -2271,7 +2274,7 @@ void V8HeapExplorer::ExtractPropertyReferences(JSObject* js_obj, int entry) { |
} |
} |
} else { |
- StringDictionary* dictionary = js_obj->property_dictionary(); |
+ NameDictionary* dictionary = js_obj->property_dictionary(); |
int length = dictionary->Capacity(); |
for (int i = 0; i < length; ++i) { |
Object* k = dictionary->KeyAt(i); |
@@ -2581,20 +2584,21 @@ void V8HeapExplorer::SetWeakReference(HeapObject* parent_obj, |
void V8HeapExplorer::SetPropertyReference(HeapObject* parent_obj, |
int parent_entry, |
- String* reference_name, |
+ Name* reference_name, |
Object* child_obj, |
const char* name_format_string, |
int field_offset) { |
HeapEntry* child_entry = GetEntry(child_obj); |
if (child_entry != NULL) { |
- HeapGraphEdge::Type type = reference_name->length() > 0 ? |
- HeapGraphEdge::kProperty : HeapGraphEdge::kInternal; |
- const char* name = name_format_string != NULL ? |
- collection_->names()->GetFormatted( |
- name_format_string, |
- *reference_name->ToCString(DISALLOW_NULLS, |
- ROBUST_STRING_TRAVERSAL)) : |
- collection_->names()->GetName(reference_name); |
+ HeapGraphEdge::Type type = |
+ reference_name->IsSymbol() || String::cast(reference_name)->length() > 0 |
+ ? HeapGraphEdge::kProperty : HeapGraphEdge::kInternal; |
+ const char* name = name_format_string != NULL && reference_name->IsString() |
+ ? collection_->names()->GetFormatted( |
+ name_format_string, |
+ *String::cast(reference_name)->ToCString( |
+ DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL)) |
+ : collection_->names()->GetName(reference_name); |
filler_->SetNamedReference(type, |
parent_entry, |