Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1118)

Side by Side Diff: src/profile-generator.cc

Issue 12330012: ES6 symbols: Allow symbols as property names (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Platform ports Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/profile-generator.h ('k') | src/profile-generator-inl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 if (len == -1) { 147 if (len == -1) {
148 DeleteArray(str.start()); 148 DeleteArray(str.start());
149 return format; 149 return format;
150 } 150 }
151 uint32_t hash = StringHasher::HashSequentialString( 151 uint32_t hash = StringHasher::HashSequentialString(
152 str.start(), len, HEAP->HashSeed()); 152 str.start(), len, HEAP->HashSeed());
153 return AddOrDisposeString(str.start(), hash); 153 return AddOrDisposeString(str.start(), hash);
154 } 154 }
155 155
156 156
157 const char* StringsStorage::GetName(String* name) { 157 const char* StringsStorage::GetName(Name* name) {
158 if (name->IsString()) { 158 if (name->IsString()) {
159 int length = Min(kMaxNameSize, name->length()); 159 String* str = String::cast(name);
160 int length = Min(kMaxNameSize, str->length());
160 SmartArrayPointer<char> data = 161 SmartArrayPointer<char> data =
161 name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL, 0, length); 162 str->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL, 0, length);
162 uint32_t hash = StringHasher::HashSequentialString( 163 uint32_t hash = StringHasher::HashSequentialString(
163 *data, length, name->GetHeap()->HashSeed()); 164 *data, length, name->GetHeap()->HashSeed());
164 return AddOrDisposeString(data.Detach(), hash); 165 return AddOrDisposeString(data.Detach(), hash);
166 } else if (name->IsSymbol()) {
167 return "<symbol>";
165 } 168 }
166 return ""; 169 return "";
167 } 170 }
168 171
169 172
170 const char* StringsStorage::GetName(int index) { 173 const char* StringsStorage::GetName(int index) {
171 return GetFormatted("%d", index); 174 return GetFormatted("%d", index);
172 } 175 }
173 176
174 177
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 for (int i = 0; i < current_count; ++i) { 779 for (int i = 0; i < current_count; ++i) {
777 if (list->at(i) == NULL) { 780 if (list->at(i) == NULL) {
778 (*list)[i] = unabridged_list->at(i)->FilteredClone(security_token_id); 781 (*list)[i] = unabridged_list->at(i)->FilteredClone(security_token_id);
779 } 782 }
780 } 783 }
781 return list; 784 return list;
782 } 785 }
783 786
784 787
785 CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag, 788 CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag,
786 String* name, 789 Name* name,
787 String* resource_name, 790 String* resource_name,
788 int line_number) { 791 int line_number) {
789 CodeEntry* entry = new CodeEntry(tag, 792 CodeEntry* entry = new CodeEntry(tag,
790 CodeEntry::kEmptyNamePrefix, 793 CodeEntry::kEmptyNamePrefix,
791 GetFunctionName(name), 794 GetFunctionName(name),
792 GetName(resource_name), 795 GetName(resource_name),
793 line_number, 796 line_number,
794 TokenEnumerator::kNoSecurityToken); 797 TokenEnumerator::kNoSecurityToken);
795 code_entries_.Add(entry); 798 code_entries_.Add(entry);
796 return entry; 799 return entry;
797 } 800 }
798 801
799 802
800 CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag, 803 CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag,
801 const char* name) { 804 const char* name) {
802 CodeEntry* entry = new CodeEntry(tag, 805 CodeEntry* entry = new CodeEntry(tag,
803 CodeEntry::kEmptyNamePrefix, 806 CodeEntry::kEmptyNamePrefix,
804 GetFunctionName(name), 807 GetFunctionName(name),
805 "", 808 "",
806 v8::CpuProfileNode::kNoLineNumberInfo, 809 v8::CpuProfileNode::kNoLineNumberInfo,
807 TokenEnumerator::kNoSecurityToken); 810 TokenEnumerator::kNoSecurityToken);
808 code_entries_.Add(entry); 811 code_entries_.Add(entry);
809 return entry; 812 return entry;
810 } 813 }
811 814
812 815
813 CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag, 816 CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag,
814 const char* name_prefix, 817 const char* name_prefix,
815 String* name) { 818 Name* name) {
816 CodeEntry* entry = new CodeEntry(tag, 819 CodeEntry* entry = new CodeEntry(tag,
817 name_prefix, 820 name_prefix,
818 GetName(name), 821 GetName(name),
819 "", 822 "",
820 v8::CpuProfileNode::kNoLineNumberInfo, 823 v8::CpuProfileNode::kNoLineNumberInfo,
821 TokenEnumerator::kInheritsSecurityToken); 824 TokenEnumerator::kInheritsSecurityToken);
822 code_entries_.Add(entry); 825 code_entries_.Add(entry);
823 return entry; 826 return entry;
824 } 827 }
825 828
(...skipping 1380 matching lines...) Expand 10 before | Expand all | Expand 10 after
2206 void V8HeapExplorer::ExtractPropertyReferences(JSObject* js_obj, int entry) { 2209 void V8HeapExplorer::ExtractPropertyReferences(JSObject* js_obj, int entry) {
2207 if (js_obj->HasFastProperties()) { 2210 if (js_obj->HasFastProperties()) {
2208 DescriptorArray* descs = js_obj->map()->instance_descriptors(); 2211 DescriptorArray* descs = js_obj->map()->instance_descriptors();
2209 int real_size = js_obj->map()->NumberOfOwnDescriptors(); 2212 int real_size = js_obj->map()->NumberOfOwnDescriptors();
2210 for (int i = 0; i < descs->number_of_descriptors(); i++) { 2213 for (int i = 0; i < descs->number_of_descriptors(); i++) {
2211 if (descs->GetDetails(i).descriptor_index() > real_size) continue; 2214 if (descs->GetDetails(i).descriptor_index() > real_size) continue;
2212 switch (descs->GetType(i)) { 2215 switch (descs->GetType(i)) {
2213 case FIELD: { 2216 case FIELD: {
2214 int index = descs->GetFieldIndex(i); 2217 int index = descs->GetFieldIndex(i);
2215 2218
2216 String* k = descs->GetKey(i); 2219 Name* k = descs->GetKey(i);
2217 if (index < js_obj->map()->inobject_properties()) { 2220 if (index < js_obj->map()->inobject_properties()) {
2218 Object* value = js_obj->InObjectPropertyAt(index); 2221 Object* value = js_obj->InObjectPropertyAt(index);
2219 if (k != heap_->hidden_string()) { 2222 if (k != heap_->hidden_string()) {
2220 SetPropertyReference( 2223 SetPropertyReference(
2221 js_obj, entry, 2224 js_obj, entry,
2222 k, value, 2225 k, value,
2223 NULL, 2226 NULL,
2224 js_obj->GetInObjectPropertyOffset(index)); 2227 js_obj->GetInObjectPropertyOffset(index));
2225 } else { 2228 } else {
2226 TagObject(value, "(hidden properties)"); 2229 TagObject(value, "(hidden properties)");
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2264 case HANDLER: // only in lookup results, not in descriptors 2267 case HANDLER: // only in lookup results, not in descriptors
2265 case INTERCEPTOR: // only in lookup results, not in descriptors 2268 case INTERCEPTOR: // only in lookup results, not in descriptors
2266 break; 2269 break;
2267 case TRANSITION: 2270 case TRANSITION:
2268 case NONEXISTENT: 2271 case NONEXISTENT:
2269 UNREACHABLE(); 2272 UNREACHABLE();
2270 break; 2273 break;
2271 } 2274 }
2272 } 2275 }
2273 } else { 2276 } else {
2274 StringDictionary* dictionary = js_obj->property_dictionary(); 2277 NameDictionary* dictionary = js_obj->property_dictionary();
2275 int length = dictionary->Capacity(); 2278 int length = dictionary->Capacity();
2276 for (int i = 0; i < length; ++i) { 2279 for (int i = 0; i < length; ++i) {
2277 Object* k = dictionary->KeyAt(i); 2280 Object* k = dictionary->KeyAt(i);
2278 if (dictionary->IsKey(k)) { 2281 if (dictionary->IsKey(k)) {
2279 Object* target = dictionary->ValueAt(i); 2282 Object* target = dictionary->ValueAt(i);
2280 // We assume that global objects can only have slow properties. 2283 // We assume that global objects can only have slow properties.
2281 Object* value = target->IsJSGlobalPropertyCell() 2284 Object* value = target->IsJSGlobalPropertyCell()
2282 ? JSGlobalPropertyCell::cast(target)->value() 2285 ? JSGlobalPropertyCell::cast(target)->value()
2283 : target; 2286 : target;
2284 if (k != heap_->hidden_string()) { 2287 if (k != heap_->hidden_string()) {
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
2574 parent_entry, 2577 parent_entry,
2575 index, 2578 index,
2576 child_entry); 2579 child_entry);
2577 IndexedReferencesExtractor::MarkVisitedField(parent_obj, field_offset); 2580 IndexedReferencesExtractor::MarkVisitedField(parent_obj, field_offset);
2578 } 2581 }
2579 } 2582 }
2580 2583
2581 2584
2582 void V8HeapExplorer::SetPropertyReference(HeapObject* parent_obj, 2585 void V8HeapExplorer::SetPropertyReference(HeapObject* parent_obj,
2583 int parent_entry, 2586 int parent_entry,
2584 String* reference_name, 2587 Name* reference_name,
2585 Object* child_obj, 2588 Object* child_obj,
2586 const char* name_format_string, 2589 const char* name_format_string,
2587 int field_offset) { 2590 int field_offset) {
2588 HeapEntry* child_entry = GetEntry(child_obj); 2591 HeapEntry* child_entry = GetEntry(child_obj);
2589 if (child_entry != NULL) { 2592 if (child_entry != NULL) {
2590 HeapGraphEdge::Type type = reference_name->length() > 0 ? 2593 HeapGraphEdge::Type type =
2591 HeapGraphEdge::kProperty : HeapGraphEdge::kInternal; 2594 reference_name->IsSymbol() || String::cast(reference_name)->length() > 0
2592 const char* name = name_format_string != NULL ? 2595 ? HeapGraphEdge::kProperty : HeapGraphEdge::kInternal;
2593 collection_->names()->GetFormatted( 2596 const char* name = name_format_string != NULL && reference_name->IsString()
2594 name_format_string, 2597 ? collection_->names()->GetFormatted(
2595 *reference_name->ToCString(DISALLOW_NULLS, 2598 name_format_string,
2596 ROBUST_STRING_TRAVERSAL)) : 2599 *String::cast(reference_name)->ToCString(
2597 collection_->names()->GetName(reference_name); 2600 DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL))
2601 : collection_->names()->GetName(reference_name);
2598 2602
2599 filler_->SetNamedReference(type, 2603 filler_->SetNamedReference(type,
2600 parent_entry, 2604 parent_entry,
2601 name, 2605 name,
2602 child_entry); 2606 child_entry);
2603 IndexedReferencesExtractor::MarkVisitedField(parent_obj, field_offset); 2607 IndexedReferencesExtractor::MarkVisitedField(parent_obj, field_offset);
2604 } 2608 }
2605 } 2609 }
2606 2610
2607 2611
(...skipping 977 matching lines...) Expand 10 before | Expand all | Expand 10 after
3585 3589
3586 3590
3587 void HeapSnapshotJSONSerializer::SortHashMap( 3591 void HeapSnapshotJSONSerializer::SortHashMap(
3588 HashMap* map, List<HashMap::Entry*>* sorted_entries) { 3592 HashMap* map, List<HashMap::Entry*>* sorted_entries) {
3589 for (HashMap::Entry* p = map->Start(); p != NULL; p = map->Next(p)) 3593 for (HashMap::Entry* p = map->Start(); p != NULL; p = map->Next(p))
3590 sorted_entries->Add(p); 3594 sorted_entries->Add(p);
3591 sorted_entries->Sort(SortUsingEntryValue); 3595 sorted_entries->Sort(SortUsingEntryValue);
3592 } 3596 }
3593 3597
3594 } } // namespace v8::internal 3598 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/profile-generator.h ('k') | src/profile-generator-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698