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

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

Issue 1045753002: CpuProfiler: public API for deopt info in cpu profiler. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: unnecessary typedef was removed Created 5 years, 8 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
« no previous file with comments | « src/profile-generator.h ('k') | test/cctest/test-cpu-profiler.cc » ('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 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/profile-generator-inl.h" 7 #include "src/profile-generator-inl.h"
8 8
9 #include "src/compiler.h" 9 #include "src/compiler.h"
10 #include "src/debug.h" 10 #include "src/debug.h"
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 105
106 void CodeEntry::FillFunctionInfo(SharedFunctionInfo* shared) { 106 void CodeEntry::FillFunctionInfo(SharedFunctionInfo* shared) {
107 if (!shared->script()->IsScript()) return; 107 if (!shared->script()->IsScript()) return;
108 Script* script = Script::cast(shared->script()); 108 Script* script = Script::cast(shared->script());
109 set_script_id(script->id()->value()); 109 set_script_id(script->id()->value());
110 set_position(shared->start_position()); 110 set_position(shared->start_position());
111 set_bailout_reason(GetBailoutReason(shared->disable_optimization_reason())); 111 set_bailout_reason(GetBailoutReason(shared->disable_optimization_reason()));
112 } 112 }
113 113
114 114
115 DeoptInfo CodeEntry::GetDeoptInfo() { 115 CpuProfileDeoptInfo CodeEntry::GetDeoptInfo() {
116 DCHECK(has_deopt_info()); 116 DCHECK(has_deopt_info());
117 117
118 DeoptInfo info; 118 CpuProfileDeoptInfo info;
119 info.deopt_reason = deopt_reason_; 119 info.deopt_reason = deopt_reason_;
120 if (inlined_function_infos_.empty()) { 120 if (inlined_function_infos_.empty()) {
121 info.stack.push_back(DeoptInfo::Frame( 121 info.stack.push_back(CpuProfileDeoptFrame(
122 {script_id_, 122 {script_id_, position_ + deopt_position_.position()}));
123 static_cast<int>(position_ + deopt_position_.position())}));
124 return info; 123 return info;
125 } 124 }
126 // Copy the only branch from the inlining tree where the deopt happened. 125 // Copy the only branch from the inlining tree where the deopt happened.
127 SourcePosition position = deopt_position_; 126 SourcePosition position = deopt_position_;
128 int inlining_id = InlinedFunctionInfo::kNoParentId; 127 int inlining_id = InlinedFunctionInfo::kNoParentId;
129 for (size_t i = 0; i < inlined_function_infos_.size(); ++i) { 128 for (size_t i = 0; i < inlined_function_infos_.size(); ++i) {
130 InlinedFunctionInfo& current_info = inlined_function_infos_.at(i); 129 InlinedFunctionInfo& current_info = inlined_function_infos_.at(i);
131 if (std::binary_search(current_info.deopt_pc_offsets.begin(), 130 if (std::binary_search(current_info.deopt_pc_offsets.begin(),
132 current_info.deopt_pc_offsets.end(), pc_offset_)) { 131 current_info.deopt_pc_offsets.end(), pc_offset_)) {
133 inlining_id = static_cast<int>(i); 132 inlining_id = static_cast<int>(i);
134 break; 133 break;
135 } 134 }
136 } 135 }
137 while (inlining_id != InlinedFunctionInfo::kNoParentId) { 136 while (inlining_id != InlinedFunctionInfo::kNoParentId) {
138 InlinedFunctionInfo& inlined_info = inlined_function_infos_.at(inlining_id); 137 InlinedFunctionInfo& inlined_info = inlined_function_infos_.at(inlining_id);
139 info.stack.push_back(DeoptInfo::Frame( 138 info.stack.push_back(
140 {inlined_info.script_id, 139 CpuProfileDeoptFrame({inlined_info.script_id,
141 static_cast<int>(inlined_info.start_position + position.raw())})); 140 inlined_info.start_position + position.raw()}));
142 position = inlined_info.inline_position; 141 position = inlined_info.inline_position;
143 inlining_id = inlined_info.parent_id; 142 inlining_id = inlined_info.parent_id;
144 } 143 }
145 return info; 144 return info;
146 } 145 }
147 146
148 147
149 void ProfileNode::CollectDeoptInfo(CodeEntry* entry) { 148 void ProfileNode::CollectDeoptInfo(CodeEntry* entry) {
150 deopt_infos_.push_back(entry->GetDeoptInfo()); 149 deopt_infos_.push_back(entry->GetDeoptInfo());
151 entry->clear_deopt_info(); 150 entry->clear_deopt_info();
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 208
210 209
211 void ProfileNode::Print(int indent) { 210 void ProfileNode::Print(int indent) {
212 base::OS::Print("%5u %*s %s%s %d #%d", self_ticks_, indent, "", 211 base::OS::Print("%5u %*s %s%s %d #%d", self_ticks_, indent, "",
213 entry_->name_prefix(), entry_->name(), entry_->script_id(), 212 entry_->name_prefix(), entry_->name(), entry_->script_id(),
214 id()); 213 id());
215 if (entry_->resource_name()[0] != '\0') 214 if (entry_->resource_name()[0] != '\0')
216 base::OS::Print(" %s:%d", entry_->resource_name(), entry_->line_number()); 215 base::OS::Print(" %s:%d", entry_->resource_name(), entry_->line_number());
217 base::OS::Print("\n"); 216 base::OS::Print("\n");
218 for (size_t i = 0; i < deopt_infos_.size(); ++i) { 217 for (size_t i = 0; i < deopt_infos_.size(); ++i) {
219 DeoptInfo& info = deopt_infos_[i]; 218 CpuProfileDeoptInfo& info = deopt_infos_[i];
220 base::OS::Print( 219 base::OS::Print(
221 "%*s;;; deopted at script_id: %d position: %d with reason '%s'.\n", 220 "%*s;;; deopted at script_id: %d position: %d with reason '%s'.\n",
222 indent + 10, "", info.stack[0].script_id, info.stack[0].position, 221 indent + 10, "", info.stack[0].script_id, info.stack[0].position,
223 info.deopt_reason); 222 info.deopt_reason);
224 for (size_t index = 1; index < info.stack.size(); ++index) { 223 for (size_t index = 1; index < info.stack.size(); ++index) {
225 base::OS::Print("%*s;;; Inline point: script_id %d position: %d.\n", 224 base::OS::Print("%*s;;; Inline point: script_id %d position: %d.\n",
226 indent + 10, "", info.stack[index].script_id, 225 indent + 10, "", info.stack[index].script_id,
227 info.stack[index].position); 226 info.stack[index].position);
228 } 227 }
229 } 228 }
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 case OTHER: 691 case OTHER:
693 case EXTERNAL: 692 case EXTERNAL:
694 return program_entry_; 693 return program_entry_;
695 case IDLE: 694 case IDLE:
696 return idle_entry_; 695 return idle_entry_;
697 default: return NULL; 696 default: return NULL;
698 } 697 }
699 } 698 }
700 699
701 } } // namespace v8::internal 700 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/profile-generator.h ('k') | test/cctest/test-cpu-profiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698