Index: src/inspector/v8-profiler-agent-impl.cc |
diff --git a/src/inspector/v8-profiler-agent-impl.cc b/src/inspector/v8-profiler-agent-impl.cc |
index af13e7e81bf273dd013e30ae6d030ebfc52db73f..8aa55a34144024f3b6534d0c66888cce55c05096 100644 |
--- a/src/inspector/v8-profiler-agent-impl.cc |
+++ b/src/inspector/v8-profiler-agent-impl.cc |
@@ -23,6 +23,7 @@ static const char samplingInterval[] = "samplingInterval"; |
static const char userInitiatedProfiling[] = "userInitiatedProfiling"; |
static const char profilerEnabled[] = "profilerEnabled"; |
static const char preciseCoverageStarted[] = "preciseCoverageStarted"; |
+static const char preciseCoverageCallCount[] = "preciseCoverageCallCount"; |
} |
namespace { |
@@ -239,7 +240,9 @@ void V8ProfilerAgentImpl::restore() { |
} |
if (m_state->booleanProperty(ProfilerAgentState::preciseCoverageStarted, |
false)) { |
- startPreciseCoverage(); |
+ bool callCount = m_state->booleanProperty( |
+ ProfilerAgentState::preciseCoverageCallCount, false); |
+ startPreciseCoverage(Maybe<bool>(callCount)); |
} |
} |
@@ -270,31 +273,33 @@ Response V8ProfilerAgentImpl::stop( |
return Response::OK(); |
} |
-Response V8ProfilerAgentImpl::startPreciseCoverage() { |
+Response V8ProfilerAgentImpl::startPreciseCoverage(Maybe<bool> callCount) { |
if (!m_enabled) return Response::Error("Profiler is not enabled"); |
+ bool callCountValue = callCount.fromMaybe(false); |
m_state->setBoolean(ProfilerAgentState::preciseCoverageStarted, true); |
- v8::debug::Coverage::SelectMode(m_isolate, |
- v8::debug::Coverage::kPreciseCount); |
+ m_state->setBoolean(ProfilerAgentState::preciseCoverageCallCount, |
+ callCountValue); |
+ v8::debug::Coverage::SelectMode( |
+ m_isolate, callCountValue ? v8::debug::Coverage::kPreciseCount |
+ : v8::debug::Coverage::kPreciseBinary); |
return Response::OK(); |
} |
Response V8ProfilerAgentImpl::stopPreciseCoverage() { |
if (!m_enabled) return Response::Error("Profiler is not enabled"); |
m_state->setBoolean(ProfilerAgentState::preciseCoverageStarted, false); |
+ m_state->setBoolean(ProfilerAgentState::preciseCoverageCallCount, false); |
v8::debug::Coverage::SelectMode(m_isolate, v8::debug::Coverage::kBestEffort); |
return Response::OK(); |
} |
namespace { |
-Response takeCoverage( |
- v8::Isolate* isolate, bool reset_count, |
+Response coverageToProtocol( |
+ v8::Isolate* isolate, const v8::debug::Coverage& coverage, |
std::unique_ptr<protocol::Array<protocol::Profiler::ScriptCoverage>>* |
out_result) { |
std::unique_ptr<protocol::Array<protocol::Profiler::ScriptCoverage>> result = |
protocol::Array<protocol::Profiler::ScriptCoverage>::create(); |
- v8::HandleScope handle_scope(isolate); |
- v8::debug::Coverage coverage = |
- v8::debug::Coverage::Collect(isolate, reset_count); |
for (size_t i = 0; i < coverage.ScriptCount(); i++) { |
v8::debug::Coverage::ScriptData script_data = coverage.GetScriptData(i); |
v8::Local<v8::debug::Script> script = script_data.GetScript(); |
@@ -343,13 +348,18 @@ Response V8ProfilerAgentImpl::takePreciseCoverage( |
false)) { |
return Response::Error("Precise coverage has not been started."); |
} |
- return takeCoverage(m_isolate, true, out_result); |
+ v8::HandleScope handle_scope(m_isolate); |
+ v8::debug::Coverage coverage = v8::debug::Coverage::CollectPrecise(m_isolate); |
+ return coverageToProtocol(m_isolate, coverage, out_result); |
} |
Response V8ProfilerAgentImpl::getBestEffortCoverage( |
std::unique_ptr<protocol::Array<protocol::Profiler::ScriptCoverage>>* |
out_result) { |
- return takeCoverage(m_isolate, false, out_result); |
+ v8::HandleScope handle_scope(m_isolate); |
+ v8::debug::Coverage coverage = |
+ v8::debug::Coverage::CollectBestEffort(m_isolate); |
+ return coverageToProtocol(m_isolate, coverage, out_result); |
} |
String16 V8ProfilerAgentImpl::nextProfileId() { |