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); |
kozy
2017/02/16 16:47:19
We can be prepared for more then one runtime agent
Yang
2017/02/20 11:24:42
Done.
|
+ return Response::OK(); |
+} |
+ |
+Response V8RuntimeAgentImpl::stopPreciseCoverage() { |
+ v8::debug::Coverage::TogglePrecise(m_inspector->isolate(), false); |
kozy
2017/02/16 16:47:19
- please toggle precise off in V8RuntimeAgentImpl:
Yang
2017/02/20 11:24:42
Done.
|
+ return Response::OK(); |
+} |
+ |
+namespace { |
+std::unique_ptr<protocol::Runtime::CoverageRange> CreateCoverageRange( |
kozy
2017/02/16 16:47:19
We still use not V8 code style here, let's don't m
Yang
2017/02/20 11:24:42
Acknowledged.
|
+ 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; |