Commit 77165eb4 authored by yangguo's avatar yangguo Committed by Commit bot

[debug] change coverage API to use offset instead of line/column.

R=caseq@chromium.org, pfeldman@chromium.org
BUG=v8:5808

Review-Url: https://codereview.chromium.org/2733783002
Cr-Commit-Position: refs/heads/master@{#43662}
parent 18f169d4
......@@ -9549,20 +9549,8 @@ Local<String> CpuProfileNode::GetFunctionName() const {
}
}
debug::Coverage::FunctionData::FunctionData(i::CoverageFunction* function,
Local<debug::Script> script)
: function_(function) {
i::Handle<i::Script> i_script = v8::Utils::OpenHandle(*script);
i::Script::PositionInfo start;
i::Script::PositionInfo end;
i::Script::GetPositionInfo(i_script, function->start, &start,
i::Script::WITH_OFFSET);
i::Script::GetPositionInfo(i_script, function->end, &end,
i::Script::WITH_OFFSET);
start_ = Location(start.line, start.column);
end_ = Location(end.line, end.column);
}
int debug::Coverage::FunctionData::StartOffset() { return function_->start; }
int debug::Coverage::FunctionData::EndOffset() { return function_->end; }
uint32_t debug::Coverage::FunctionData::Count() { return function_->count; }
MaybeLocal<String> debug::Coverage::FunctionData::Name() {
......@@ -9579,7 +9567,7 @@ size_t debug::Coverage::ScriptData::FunctionCount() {
debug::Coverage::FunctionData debug::Coverage::ScriptData::GetFunctionData(
size_t i) {
return FunctionData(&script_->functions.at(i), GetScript());
return FunctionData(&script_->functions.at(i));
}
debug::Coverage::~Coverage() { delete coverage_; }
......
......@@ -1713,8 +1713,12 @@ void Shell::WriteLcovData(v8::Isolate* isolate, const char* file) {
for (size_t j = 0; j < script_data.FunctionCount(); j++) {
debug::Coverage::FunctionData function_data =
script_data.GetFunctionData(j);
int start_line = function_data.Start().GetLineNumber();
int end_line = function_data.End().GetLineNumber();
debug::Location start =
script->GetSourceLocation(function_data.StartOffset());
debug::Location end =
script->GetSourceLocation(function_data.EndOffset());
int start_line = start.GetLineNumber();
int end_line = end.GetLineNumber();
uint32_t count = function_data.Count();
// Ensure space in the array.
lines.resize(std::max(static_cast<size_t>(end_line + 1), lines.size()),
......@@ -1732,7 +1736,7 @@ void Shell::WriteLcovData(v8::Isolate* isolate, const char* file) {
name_stream << ToSTLString(name);
} else {
name_stream << "<" << start_line + 1 << "-";
name_stream << function_data.Start().GetColumnNumber() << ">";
name_stream << start.GetColumnNumber() << ">";
}
sink << "FN:" << start_line + 1 << "," << name_stream.str() << std::endl;
sink << "FNDA:" << count << "," << name_stream.str() << std::endl;
......
......@@ -218,17 +218,15 @@ class V8_EXPORT_PRIVATE Coverage {
class V8_EXPORT_PRIVATE FunctionData {
public:
// 0-based line and colum numbers.
Location Start() { return start_; }
Location End() { return end_; }
int StartOffset();
int EndOffset();
uint32_t Count();
MaybeLocal<String> Name();
private:
FunctionData(i::CoverageFunction* function, Local<debug::Script> script);
explicit FunctionData(i::CoverageFunction* function)
: function_(function) {}
i::CoverageFunction* function_;
Location start_;
Location end_;
friend class v8::debug::Coverage::ScriptData;
};
......
......@@ -852,6 +852,8 @@
{ "name": "startColumnNumber", "type": "integer", "description": "JavaScript script column number (0-based) for the range start." },
{ "name": "endLineNumber", "type": "integer", "description": "JavaScript script line number (0-based) for the range end." },
{ "name": "endColumnNumber", "type": "integer", "description": "JavaScript script column number (0-based) for the range end." },
{ "name": "startOffset", "type": "integer", "description": "JavaScript script source offset for the range start." },
{ "name": "endOffset", "type": "integer", "description": "JavaScript script source offset for the range end." },
{ "name": "count", "type": "integer", "description": "Collected execution count of the source range." }
],
"experimental": true
......
......@@ -307,14 +307,19 @@ Response takeCoverage(
ranges = protocol::Array<protocol::Profiler::CoverageRange>::create();
// At this point we only have per-function coverage data, so there is
// only one range per function.
ranges->addItem(
protocol::Profiler::CoverageRange::create()
.setStartLineNumber(function_data.Start().GetLineNumber())
.setStartColumnNumber(function_data.Start().GetColumnNumber())
.setEndLineNumber(function_data.End().GetLineNumber())
.setEndColumnNumber(function_data.End().GetColumnNumber())
.setCount(function_data.Count())
.build());
v8::debug::Location start =
script->GetSourceLocation(function_data.StartOffset());
v8::debug::Location end =
script->GetSourceLocation(function_data.EndOffset());
ranges->addItem(protocol::Profiler::CoverageRange::create()
.setStartLineNumber(start.GetLineNumber())
.setStartColumnNumber(start.GetColumnNumber())
.setEndLineNumber(end.GetLineNumber())
.setEndColumnNumber(end.GetColumnNumber())
.setStartOffset(function_data.StartOffset())
.setEndOffset(function_data.EndOffset())
.setCount(function_data.Count())
.build());
functions->addItem(
protocol::Profiler::FunctionCoverage::create()
.setFunctionName(toProtocolString(
......
......@@ -6650,16 +6650,22 @@ TEST(DebugCoverage) {
CHECK_EQ(2u, script_data.FunctionCount());
v8::debug::Coverage::FunctionData function_data =
script_data.GetFunctionData(0);
CHECK_EQ(0, function_data.Start().GetLineNumber());
CHECK_EQ(0, function_data.Start().GetColumnNumber());
CHECK_EQ(3, function_data.End().GetLineNumber());
CHECK_EQ(4, function_data.End().GetColumnNumber());
v8::debug::Location start =
script->GetSourceLocation(function_data.StartOffset());
v8::debug::Location end =
script->GetSourceLocation(function_data.EndOffset());
CHECK_EQ(0, start.GetLineNumber());
CHECK_EQ(0, start.GetColumnNumber());
CHECK_EQ(3, end.GetLineNumber());
CHECK_EQ(4, end.GetColumnNumber());
CHECK_EQ(1, function_data.Count());
function_data = script_data.GetFunctionData(1);
CHECK_EQ(0, function_data.Start().GetLineNumber());
CHECK_EQ(0, function_data.Start().GetColumnNumber());
CHECK_EQ(1, function_data.End().GetLineNumber());
CHECK_EQ(1, function_data.End().GetColumnNumber());
start = script->GetSourceLocation(function_data.StartOffset());
end = script->GetSourceLocation(function_data.EndOffset());
CHECK_EQ(0, start.GetLineNumber());
CHECK_EQ(0, start.GetColumnNumber());
CHECK_EQ(1, end.GetLineNumber());
CHECK_EQ(1, end.GetColumnNumber());
CHECK_EQ(2, function_data.Count());
}
......@@ -14,8 +14,10 @@ Running test: testPreciseBaseline
count : 0
endColumnNumber : 1
endLineNumber : 4
endOffset : 73
startColumnNumber : 0
startLineNumber : 1
startOffset : 1
}
]
}
......@@ -39,8 +41,10 @@ Running test: testPreciseBaseline
count : 0
endColumnNumber : 1
endLineNumber : 4
endOffset : 73
startColumnNumber : 0
startLineNumber : 1
startOffset : 1
}
]
}
......@@ -71,8 +75,10 @@ Running test: testPreciseCoverage
count : 1
endColumnNumber : 0
endLineNumber : 9
endOffset : 119
startColumnNumber : 0
startLineNumber : 0
startOffset : 0
}
]
}
......@@ -83,8 +89,10 @@ Running test: testPreciseCoverage
count : 15
endColumnNumber : 1
endLineNumber : 4
endOffset : 73
startColumnNumber : 0
startLineNumber : 1
startOffset : 1
}
]
}
......@@ -95,8 +103,10 @@ Running test: testPreciseCoverage
count : 1
endColumnNumber : 1
endLineNumber : 7
endOffset : 106
startColumnNumber : 1
startLineNumber : 5
startOffset : 75
}
]
}
......@@ -113,8 +123,10 @@ Running test: testPreciseCoverage
count : 1
endColumnNumber : 11
endLineNumber : 0
endOffset : 11
startColumnNumber : 0
startLineNumber : 0
startOffset : 0
}
]
}
......@@ -138,8 +150,10 @@ Running test: testPreciseCoverage
count : 0
endColumnNumber : 0
endLineNumber : 9
endOffset : 119
startColumnNumber : 0
startLineNumber : 0
startOffset : 0
}
]
}
......@@ -150,8 +164,10 @@ Running test: testPreciseCoverage
count : 0
endColumnNumber : 1
endLineNumber : 4
endOffset : 73
startColumnNumber : 0
startLineNumber : 1
startOffset : 1
}
]
}
......@@ -162,8 +178,10 @@ Running test: testPreciseCoverage
count : 0
endColumnNumber : 1
endLineNumber : 7
endOffset : 106
startColumnNumber : 1
startLineNumber : 5
startOffset : 75
}
]
}
......@@ -180,8 +198,10 @@ Running test: testPreciseCoverage
count : 0
endColumnNumber : 11
endLineNumber : 0
endOffset : 11
startColumnNumber : 0
startLineNumber : 0
startOffset : 0
}
]
}
......@@ -262,8 +282,10 @@ Running test: testBestEffortCoveragePrecise
count : 1
endColumnNumber : 0
endLineNumber : 9
endOffset : 119
startColumnNumber : 0
startLineNumber : 0
startOffset : 0
}
]
}
......@@ -274,8 +296,10 @@ Running test: testBestEffortCoveragePrecise
count : 15
endColumnNumber : 1
endLineNumber : 4
endOffset : 73
startColumnNumber : 0
startLineNumber : 1
startOffset : 1
}
]
}
......@@ -286,8 +310,10 @@ Running test: testBestEffortCoveragePrecise
count : 1
endColumnNumber : 1
endLineNumber : 7
endOffset : 106
startColumnNumber : 1
startLineNumber : 5
startOffset : 75
}
]
}
......@@ -304,8 +330,10 @@ Running test: testBestEffortCoveragePrecise
count : 1
endColumnNumber : 11
endLineNumber : 0
endOffset : 11
startColumnNumber : 0
startLineNumber : 0
startOffset : 0
}
]
}
......@@ -329,8 +357,10 @@ Running test: testBestEffortCoveragePrecise
count : 1
endColumnNumber : 0
endLineNumber : 9
endOffset : 119
startColumnNumber : 0
startLineNumber : 0
startOffset : 0
}
]
}
......@@ -341,8 +371,10 @@ Running test: testBestEffortCoveragePrecise
count : 15
endColumnNumber : 1
endLineNumber : 4
endOffset : 73
startColumnNumber : 0
startLineNumber : 1
startOffset : 1
}
]
}
......@@ -353,8 +385,10 @@ Running test: testBestEffortCoveragePrecise
count : 1
endColumnNumber : 1
endLineNumber : 7
endOffset : 106
startColumnNumber : 1
startLineNumber : 5
startOffset : 75
}
]
}
......@@ -371,8 +405,10 @@ Running test: testBestEffortCoveragePrecise
count : 1
endColumnNumber : 11
endLineNumber : 0
endOffset : 11
startColumnNumber : 0
startLineNumber : 0
startOffset : 0
}
]
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment