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

Side by Side Diff: src/source-position.cc

Issue 2561773002: Revert of Merged: [cpu-profiler] use new source position information for deoptimization in cpu profiler (Closed)
Patch Set: Created 4 years 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/source-position.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 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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/source-position.h" 5 #include "src/source-position.h"
6 #include "src/compilation-info.h" 6 #include "src/compilation-info.h"
7 #include "src/objects-inl.h" 7 #include "src/objects-inl.h"
8 8
9 namespace v8 { 9 namespace v8 {
10 namespace internal { 10 namespace internal {
11 11
12 std::ostream& operator<<(std::ostream& out, const SourcePositionInfo& pos) { 12 std::ostream& operator<<(std::ostream& out, const SourcePositionInfo& pos) {
13 Handle<SharedFunctionInfo> function(pos.function); 13 Handle<SharedFunctionInfo> function;
14 Handle<Script> script(Script::cast(function->script())); 14 if (pos.function.ToHandle(&function)) {
15 out << "<"; 15 Handle<Script> script(Script::cast(function->script()));
16 if (script->name()->IsString()) { 16 out << "<";
17 out << String::cast(script->name())->ToCString(DISALLOW_NULLS).get(); 17 if (script->name()->IsString()) {
18 out << String::cast(script->name())->ToCString(DISALLOW_NULLS).get();
19 } else {
20 out << "unknown";
21 }
22 out << ":" << pos.line + 1 << ":" << pos.column + 1 << ">";
18 } else { 23 } else {
19 out << "unknown"; 24 out << "<unknown:" << pos.position.ScriptOffset() << ">";
20 } 25 }
21 out << ":" << pos.line + 1 << ":" << pos.column + 1 << ">";
22 return out; 26 return out;
23 } 27 }
24 28
25 std::ostream& operator<<(std::ostream& out, 29 std::ostream& operator<<(std::ostream& out,
26 const std::vector<SourcePositionInfo>& stack) { 30 const std::vector<SourcePositionInfo>& stack) {
27 bool first = true; 31 out << stack.back();
28 for (const SourcePositionInfo& pos : stack) { 32 for (int i = static_cast<int>(stack.size()) - 2; i >= 0; --i) {
29 if (!first) out << " inlined at "; 33 out << " inlined at ";
30 out << pos; 34 out << stack[i];
31 first = false;
32 } 35 }
33 return out; 36 return out;
34 } 37 }
35 38
36 std::ostream& operator<<(std::ostream& out, const SourcePosition& pos) { 39 std::ostream& operator<<(std::ostream& out, const SourcePosition& pos) {
37 if (pos.isInlined()) { 40 if (pos.isInlined()) {
38 out << "<inlined(" << pos.InliningId() << "):"; 41 out << "<inlined(" << pos.InliningId() << "):";
39 } else { 42 } else {
40 out << "<not inlined:"; 43 out << "<not inlined:";
41 } 44 }
42 out << pos.ScriptOffset() << ">"; 45 out << pos.ScriptOffset() << ">";
43 return out; 46 return out;
44 } 47 }
45 48
46 SourcePositionInfo SourcePosition::Info( 49 SourcePositionInfo SourcePosition::Info(
47 Handle<SharedFunctionInfo> function) const { 50 Handle<SharedFunctionInfo> function) const {
48 SourcePositionInfo result(*this, function);
49 Handle<Script> script(Script::cast(function->script())); 51 Handle<Script> script(Script::cast(function->script()));
52 SourcePositionInfo result(*this);
50 Script::PositionInfo pos; 53 Script::PositionInfo pos;
51 if (Script::GetPositionInfo(script, ScriptOffset(), &pos, 54 if (Script::GetPositionInfo(script, ScriptOffset(), &pos,
52 Script::WITH_OFFSET)) { 55 Script::WITH_OFFSET)) {
53 result.line = pos.line; 56 result.line = pos.line;
54 result.column = pos.column; 57 result.column = pos.column;
55 } 58 }
59 result.function = function;
56 return result; 60 return result;
57 } 61 }
58 62
59 std::vector<SourcePositionInfo> SourcePosition::InliningStack( 63 std::vector<SourcePositionInfo> SourcePosition::InliningStack(
60 CompilationInfo* cinfo) const { 64 CompilationInfo* cinfo) const {
61 SourcePosition pos = *this; 65 if (!isInlined()) {
62 std::vector<SourcePositionInfo> stack; 66 return std::vector<SourcePositionInfo>{Info(cinfo->shared_info())};
63 while (pos.isInlined()) { 67 } else {
64 const auto& inl = cinfo->inlined_functions()[pos.InliningId()]; 68 InliningPosition inl = cinfo->inlined_functions()[InliningId()].position;
65 stack.push_back(pos.Info(inl.shared_info)); 69 std::vector<SourcePositionInfo> stack = inl.position.InliningStack(cinfo);
66 pos = inl.position.position; 70 stack.push_back(Info(cinfo->inlined_functions()[InliningId()].shared_info));
71 return stack;
67 } 72 }
68 stack.push_back(pos.Info(cinfo->shared_info()));
69 return stack;
70 } 73 }
71 74
72 std::vector<SourcePositionInfo> SourcePosition::InliningStack( 75 std::vector<SourcePositionInfo> SourcePosition::InliningStack(
73 Handle<Code> code) const { 76 Handle<Code> code) const {
74 Handle<DeoptimizationInputData> deopt_data( 77 Handle<DeoptimizationInputData> deopt_data(
75 DeoptimizationInputData::cast(code->deoptimization_data())); 78 DeoptimizationInputData::cast(code->deoptimization_data()));
76 SourcePosition pos = *this; 79 if (!isInlined()) {
77 std::vector<SourcePositionInfo> stack;
78 while (pos.isInlined()) {
79 InliningPosition inl =
80 deopt_data->InliningPositions()->get(pos.InliningId());
81 Handle<SharedFunctionInfo> function( 80 Handle<SharedFunctionInfo> function(
82 deopt_data->GetInlinedFunction(inl.inlined_function_id)); 81 SharedFunctionInfo::cast(deopt_data->SharedFunctionInfo()));
83 stack.push_back(pos.Info(function)); 82
84 pos = inl.position; 83 return std::vector<SourcePositionInfo>{Info(function)};
84 } else {
85 InliningPosition inl = deopt_data->InliningPositions()->get(InliningId());
86 std::vector<SourcePositionInfo> stack = inl.position.InliningStack(code);
87 if (inl.inlined_function_id == -1) {
88 stack.push_back(SourcePositionInfo(*this));
89 } else {
90 Handle<SharedFunctionInfo> function(SharedFunctionInfo::cast(
91 deopt_data->LiteralArray()->get(inl.inlined_function_id)));
92 stack.push_back(Info(function));
93 }
94 return stack;
85 } 95 }
86 Handle<SharedFunctionInfo> function(
87 SharedFunctionInfo::cast(deopt_data->SharedFunctionInfo()));
88 stack.push_back(pos.Info(function));
89 return stack;
90 } 96 }
91 97
92 void SourcePosition::Print(std::ostream& out, 98 void SourcePosition::Print(std::ostream& out,
93 SharedFunctionInfo* function) const { 99 SharedFunctionInfo* function) const {
94 Script* script = Script::cast(function->script()); 100 Script* script = Script::cast(function->script());
95 Object* source_name = script->name(); 101 Object* source_name = script->name();
96 Script::PositionInfo pos; 102 Script::PositionInfo pos;
97 script->GetPositionInfo(ScriptOffset(), &pos, Script::WITH_OFFSET); 103 script->GetPositionInfo(ScriptOffset(), &pos, Script::WITH_OFFSET);
98 out << "<"; 104 out << "<";
99 if (source_name->IsString()) { 105 if (source_name->IsString()) {
(...skipping 11 matching lines...) Expand all
111 DeoptimizationInputData::cast(code->deoptimization_data()); 117 DeoptimizationInputData::cast(code->deoptimization_data());
112 if (!isInlined()) { 118 if (!isInlined()) {
113 SharedFunctionInfo* function( 119 SharedFunctionInfo* function(
114 SharedFunctionInfo::cast(deopt_data->SharedFunctionInfo())); 120 SharedFunctionInfo::cast(deopt_data->SharedFunctionInfo()));
115 Print(out, function); 121 Print(out, function);
116 } else { 122 } else {
117 InliningPosition inl = deopt_data->InliningPositions()->get(InliningId()); 123 InliningPosition inl = deopt_data->InliningPositions()->get(InliningId());
118 if (inl.inlined_function_id == -1) { 124 if (inl.inlined_function_id == -1) {
119 out << *this; 125 out << *this;
120 } else { 126 } else {
121 SharedFunctionInfo* function = 127 SharedFunctionInfo* function = SharedFunctionInfo::cast(
122 deopt_data->GetInlinedFunction(inl.inlined_function_id); 128 deopt_data->LiteralArray()->get(inl.inlined_function_id));
123 Print(out, function); 129 Print(out, function);
124 } 130 }
125 out << " inlined at "; 131 out << " inlined at ";
126 inl.position.Print(out, code); 132 inl.position.Print(out, code);
127 } 133 }
128 } 134 }
129 135
130 } // namespace internal 136 } // namespace internal
131 } // namespace v8 137 } // namespace v8
OLDNEW
« no previous file with comments | « src/source-position.h ('k') | test/cctest/test-cpu-profiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698