| 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..cc85120639ecd13436b0efc93cbb7f65ac1a7911 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 preciseCoverageBinary[] = "preciseCoverageBinary";
|
| }
|
|
|
| namespace {
|
| @@ -239,7 +240,9 @@ void V8ProfilerAgentImpl::restore() {
|
| }
|
| if (m_state->booleanProperty(ProfilerAgentState::preciseCoverageStarted,
|
| false)) {
|
| - startPreciseCoverage();
|
| + bool binary = m_state->booleanProperty(
|
| + ProfilerAgentState::preciseCoverageBinary, false);
|
| + startPreciseCoverage(Maybe<bool>(binary));
|
| }
|
| }
|
|
|
| @@ -270,31 +273,32 @@ Response V8ProfilerAgentImpl::stop(
|
| return Response::OK();
|
| }
|
|
|
| -Response V8ProfilerAgentImpl::startPreciseCoverage() {
|
| +Response V8ProfilerAgentImpl::startPreciseCoverage(Maybe<bool> binary) {
|
| if (!m_enabled) return Response::Error("Profiler is not enabled");
|
| + bool isBinary = binary.fromMaybe(false);
|
| m_state->setBoolean(ProfilerAgentState::preciseCoverageStarted, true);
|
| - v8::debug::Coverage::SelectMode(m_isolate,
|
| - v8::debug::Coverage::kPreciseCount);
|
| + m_state->setBoolean(ProfilerAgentState::preciseCoverageBinary, isBinary);
|
| + v8::debug::Coverage::SelectMode(
|
| + m_isolate, isBinary ? v8::debug::Coverage::kPreciseBinary
|
| + : v8::debug::Coverage::kPreciseCount);
|
| 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::preciseCoverageBinary, 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 +347,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() {
|
|
|