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

Side by Side Diff: src/heap-profiler.cc

Issue 6696042: Adding 'isolates' argument to LOG to get rid of multiple TLS fetches in profiling. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/isolates
Patch Set: Created 9 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
OLDNEW
1 // Copyright 2009-2010 the V8 project authors. All rights reserved. 1 // Copyright 2009-2010 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 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 167
168 168
169 // A printer interface implementation for the Retainers profile. 169 // A printer interface implementation for the Retainers profile.
170 class RetainersPrinter : public RetainerHeapProfile::Printer { 170 class RetainersPrinter : public RetainerHeapProfile::Printer {
171 public: 171 public:
172 void PrintRetainers(const JSObjectsCluster& cluster, 172 void PrintRetainers(const JSObjectsCluster& cluster,
173 const StringStream& retainers) { 173 const StringStream& retainers) {
174 HeapStringAllocator allocator; 174 HeapStringAllocator allocator;
175 StringStream stream(&allocator); 175 StringStream stream(&allocator);
176 cluster.Print(&stream); 176 cluster.Print(&stream);
177 LOG(HeapSampleJSRetainersEvent( 177 LOG(ISOLATE,
178 HeapSampleJSRetainersEvent(
178 *(stream.ToCString()), *(retainers.ToCString()))); 179 *(stream.ToCString()), *(retainers.ToCString())));
179 } 180 }
180 }; 181 };
181 182
182 183
183 // Visitor for printing a cluster tree. 184 // Visitor for printing a cluster tree.
184 class ClusterTreePrinter BASE_EMBEDDED { 185 class ClusterTreePrinter BASE_EMBEDDED {
185 public: 186 public:
186 explicit ClusterTreePrinter(StringStream* stream) : stream_(stream) {} 187 explicit ClusterTreePrinter(StringStream* stream) : stream_(stream) {}
187 void Call(const JSObjectsCluster& cluster, 188 void Call(const JSObjectsCluster& cluster,
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 ConstructorHeapProfile::ConstructorHeapProfile() 443 ConstructorHeapProfile::ConstructorHeapProfile()
443 : zscope_(DELETE_ON_EXIT) { 444 : zscope_(DELETE_ON_EXIT) {
444 } 445 }
445 446
446 447
447 void ConstructorHeapProfile::Call(const JSObjectsCluster& cluster, 448 void ConstructorHeapProfile::Call(const JSObjectsCluster& cluster,
448 const NumberAndSizeInfo& number_and_size) { 449 const NumberAndSizeInfo& number_and_size) {
449 HeapStringAllocator allocator; 450 HeapStringAllocator allocator;
450 StringStream stream(&allocator); 451 StringStream stream(&allocator);
451 cluster.Print(&stream); 452 cluster.Print(&stream);
452 LOG(HeapSampleJSConstructorEvent(*(stream.ToCString()), 453 LOG(ISOLATE,
454 HeapSampleJSConstructorEvent(*(stream.ToCString()),
453 number_and_size.number(), 455 number_and_size.number(),
454 number_and_size.bytes())); 456 number_and_size.bytes()));
455 } 457 }
456 458
457 459
458 void ConstructorHeapProfile::CollectStats(HeapObject* obj) { 460 void ConstructorHeapProfile::CollectStats(HeapObject* obj) {
459 Clusterizer::InsertIntoTree(&js_objects_info_tree_, obj, false); 461 Clusterizer::InsertIntoTree(&js_objects_info_tree_, obj, false);
460 } 462 }
461 463
462 464
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
731 DeleteArray(static_cast<Address*>(trace)); 733 DeleteArray(static_cast<Address*>(trace));
732 object.Dispose(); 734 object.Dispose();
733 } 735 }
734 736
735 737
736 static void PrintProducerStackTrace(Object* obj, void* trace) { 738 static void PrintProducerStackTrace(Object* obj, void* trace) {
737 if (!obj->IsJSObject()) return; 739 if (!obj->IsJSObject()) return;
738 String* constructor = GetConstructorNameForHeapProfile(JSObject::cast(obj)); 740 String* constructor = GetConstructorNameForHeapProfile(JSObject::cast(obj));
739 SmartPointer<char> s_name( 741 SmartPointer<char> s_name(
740 constructor->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL)); 742 constructor->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL));
741 LOG(HeapSampleJSProducerEvent(GetConstructorName(*s_name), 743 LOG(ISOLATE,
744 HeapSampleJSProducerEvent(GetConstructorName(*s_name),
742 reinterpret_cast<Address*>(trace))); 745 reinterpret_cast<Address*>(trace)));
743 } 746 }
744 747
745 748
746 void HeapProfiler::WriteSample() { 749 void HeapProfiler::WriteSample() {
747 Isolate* isolate = Isolate::Current(); 750 Isolate* isolate = Isolate::Current();
748 LOG(HeapSampleBeginEvent("Heap", "allocated")); 751 LOG(isolate, HeapSampleBeginEvent("Heap", "allocated"));
749 LOG(HeapSampleStats( 752 LOG(isolate,
750 "Heap", "allocated", HEAP->CommittedMemory(), HEAP->SizeOfObjects())); 753 HeapSampleStats(
754 "Heap", "allocated", HEAP->CommittedMemory(), HEAP->SizeOfObjects()));
751 755
752 AggregatedHeapSnapshot snapshot; 756 AggregatedHeapSnapshot snapshot;
753 AggregatedHeapSnapshotGenerator generator(&snapshot); 757 AggregatedHeapSnapshotGenerator generator(&snapshot);
754 generator.GenerateSnapshot(); 758 generator.GenerateSnapshot();
755 759
756 HistogramInfo* info = snapshot.info(); 760 HistogramInfo* info = snapshot.info();
757 for (int i = FIRST_NONSTRING_TYPE; 761 for (int i = FIRST_NONSTRING_TYPE;
758 i <= AggregatedHeapSnapshotGenerator::kAllStringsType; 762 i <= AggregatedHeapSnapshotGenerator::kAllStringsType;
759 ++i) { 763 ++i) {
760 if (info[i].bytes() > 0) { 764 if (info[i].bytes() > 0) {
761 LOG(HeapSampleItemEvent(info[i].name(), info[i].number(), 765 LOG(isolate,
766 HeapSampleItemEvent(info[i].name(), info[i].number(),
762 info[i].bytes())); 767 info[i].bytes()));
763 } 768 }
764 } 769 }
765 770
766 snapshot.js_cons_profile()->PrintStats(); 771 snapshot.js_cons_profile()->PrintStats();
767 snapshot.js_retainer_profile()->PrintStats(); 772 snapshot.js_retainer_profile()->PrintStats();
768 773
769 isolate->global_handles()->IterateWeakRoots(PrintProducerStackTrace, 774 isolate->global_handles()->IterateWeakRoots(PrintProducerStackTrace,
770 StackWeakReferenceCallback); 775 StackWeakReferenceCallback);
771 776
772 LOG(HeapSampleEndEvent("Heap", "allocated")); 777 LOG(isolate, HeapSampleEndEvent("Heap", "allocated"));
773 } 778 }
774 779
775 780
776 AggregatedHeapSnapshot::AggregatedHeapSnapshot() 781 AggregatedHeapSnapshot::AggregatedHeapSnapshot()
777 : info_(NewArray<HistogramInfo>( 782 : info_(NewArray<HistogramInfo>(
778 AggregatedHeapSnapshotGenerator::kAllStringsType + 1)) { 783 AggregatedHeapSnapshotGenerator::kAllStringsType + 1)) {
779 #define DEF_TYPE_NAME(name) info_[name].set_name(#name); 784 #define DEF_TYPE_NAME(name) info_[name].set_name(#name);
780 INSTANCE_TYPE_LIST(DEF_TYPE_NAME); 785 INSTANCE_TYPE_LIST(DEF_TYPE_NAME);
781 #undef DEF_TYPE_NAME 786 #undef DEF_TYPE_NAME
782 info_[AggregatedHeapSnapshotGenerator::kAllStringsType].set_name( 787 info_[AggregatedHeapSnapshotGenerator::kAllStringsType].set_name(
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
1124 isolate_->global_handles()->MakeWeak(handle.location(), 1129 isolate_->global_handles()->MakeWeak(handle.location(),
1125 static_cast<void*>(stack.start()), 1130 static_cast<void*>(stack.start()),
1126 StackWeakReferenceCallback); 1131 StackWeakReferenceCallback);
1127 } 1132 }
1128 1133
1129 1134
1130 #endif // ENABLE_LOGGING_AND_PROFILING 1135 #endif // ENABLE_LOGGING_AND_PROFILING
1131 1136
1132 1137
1133 } } // namespace v8::internal 1138 } } // namespace v8::internal
OLDNEW
« src/compiler.cc ('K') | « src/heap.cc ('k') | src/ia32/assembler-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698