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

Unified Diff: src/inspector/v8-runtime-agent-impl.cc

Issue 2700743002: [inspector] extend protocol for code coverage. (Closed)
Patch Set: comments Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698