| Index: src/inspector/v8-runtime-agent-impl.cc
|
| diff --git a/src/inspector/v8-runtime-agent-impl.cc b/src/inspector/v8-runtime-agent-impl.cc
|
| index b40f08ed065f366302cb196d4566e11f4acfc904..99dbbe0c8b67981824913e1b3f43e351aa3eed13 100644
|
| --- a/src/inspector/v8-runtime-agent-impl.cc
|
| +++ b/src/inspector/v8-runtime-agent-impl.cc
|
| @@ -30,6 +30,7 @@
|
|
|
| #include "src/inspector/v8-runtime-agent-impl.h"
|
|
|
| +#include "src/debug/debug-interface.h"
|
| #include "src/inspector/injected-script.h"
|
| #include "src/inspector/inspected-context.h"
|
| #include "src/inspector/protocol/Protocol.h"
|
| @@ -645,6 +646,62 @@ void V8RuntimeAgentImpl::runScript(
|
| std::move(callback));
|
| }
|
|
|
| +Response V8RuntimeAgentImpl::startPreciseCoverage() {
|
| + v8::debug::Coverage::TogglePrecise(m_inspector->isolate(), true);
|
| + return Response::OK();
|
| +}
|
| +
|
| +Response V8RuntimeAgentImpl::stopPreciseCoverage() {
|
| + v8::debug::Coverage::TogglePrecise(m_inspector->isolate(), false);
|
| + return Response::OK();
|
| +}
|
| +
|
| +namespace {
|
| +std::unique_ptr<protocol::Runtime::CoverageRange> CreateCoverageRange(
|
| + v8::debug::Coverage::Range range) {
|
| + std::unique_ptr<protocol::Array<protocol::Runtime::CoverageRange>> nested =
|
| + protocol::Array<protocol::Runtime::CoverageRange>::create();
|
| + for (size_t i = 0; i < range.NestedCount(); i++) {
|
| + nested->addItem(CreateCoverageRange(range.GetNested(i)));
|
| + }
|
| + return protocol::Runtime::CoverageRange::create()
|
| + .setFunctionName(
|
| + toProtocolString(range.Name().FromMaybe(v8::Local<v8::String>())))
|
| + .setStartLineNumber(range.Start().GetLineNumber())
|
| + .setStartColumnNumber(range.Start().GetColumnNumber())
|
| + .setEndLineNumber(range.End().GetLineNumber())
|
| + .setEndColumnNumber(range.End().GetColumnNumber())
|
| + .setNested(std::move(nested))
|
| + .setCount(range.Count())
|
| + .build();
|
| +}
|
| +} // anonymous namespace
|
| +
|
| +Response V8RuntimeAgentImpl::collectCoverage(
|
| + std::unique_ptr<protocol::Array<protocol::Runtime::ScriptCoverage>>*
|
| + out_result) {
|
| + std::unique_ptr<protocol::Array<protocol::Runtime::ScriptCoverage>> result =
|
| + protocol::Array<protocol::Runtime::ScriptCoverage>::create();
|
| + v8::HandleScope handle_scope(m_inspector->isolate());
|
| + v8::debug::Coverage coverage =
|
| + v8::debug::Coverage::Collect(m_inspector->isolate());
|
| + for (size_t i = 0; i < coverage.ScriptCount(); i++) {
|
| + v8::Local<v8::debug::Script> script = coverage.GetScript(i);
|
| + String16 url;
|
| + v8::Local<v8::String> name;
|
| + if (script->Name().ToLocal(&name) || script->SourceURL().ToLocal(&name)) {
|
| + url = toProtocolString(name);
|
| + }
|
| + result->addItem(protocol::Runtime::ScriptCoverage::create()
|
| + .setScriptId(String16::fromInteger(script->Id()))
|
| + .setUrl(url)
|
| + .setToplevel(CreateCoverageRange(coverage.GetRange(i)))
|
| + .build());
|
| + }
|
| + *out_result = std::move(result);
|
| + return Response::OK();
|
| +}
|
| +
|
| void V8RuntimeAgentImpl::restore() {
|
| if (!m_state->booleanProperty(V8RuntimeAgentImplState::runtimeEnabled, false))
|
| return;
|
|
|