Commit daf07998 authored by Clemens Backes's avatar Clemens Backes Committed by Commit Bot

[wasm] Add tiers to default tracing

The current tracing (in the "v8.wasm" category) has no indication about
the compilation tiers, which makes it hard to see when baseline
compilation finished and how long top tier compilation takes. The
disabled-by-default "v8.wasm.detailed" category on the other hand is
much too detailed for bigger modules, such that we run into a tracing
buffer overflow pretty quickly, and lose subsequent events.

This CL adds general trace events for baseline compilation and top tier
compilation, which are not per-unit but per-thread. Hence their number
is much lower than the number of events in "v8.wasm.detailed". Because
the events for baseline compilation and top tier compilation have
different colors, it's pretty easy to see whether baseline compilation
or top-tier compilation happens.

R=ahaas@chromium.org

Change-Id: Ic581a335f74018681fa552d14b81c48217b5a80c
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2502337Reviewed-by: 's avatarAndreas Haas <ahaas@chromium.org>
Commit-Queue: Clemens Backes <clemensb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#70832}
parent cf1fbe70
......@@ -1232,24 +1232,29 @@ CompilationExecutionResult ExecuteCompilationUnits(
TRACE_COMPILE("ExecuteCompilationUnits (task id %d)\n", task_id);
std::vector<WasmCompilationResult> results_to_publish;
bool compilation_failed = false;
while (true) {
// (asynchronous): Execute the compilation.
WasmCompilationResult result = unit->ExecuteCompilation(
wasm_engine, &env.value(), wire_bytes, counters, &detected_features);
results_to_publish.emplace_back(std::move(result));
bool yield = delegate && delegate->ShouldYield();
// (synchronized): Publish the compilation result and get the next unit.
{
ExecutionTier current_tier = unit->tier();
const char* event_name = current_tier == ExecutionTier::kLiftoff
? "wasm.BaselineCompilation"
: current_tier == ExecutionTier::kTurbofan
? "wasm.TopTierCompilation"
: "wasm.OtherCompilation";
TRACE_EVENT0("v8.wasm", event_name);
while (unit->tier() == current_tier) {
// (asynchronous): Execute the compilation.
WasmCompilationResult result = unit->ExecuteCompilation(
wasm_engine, &env.value(), wire_bytes, counters, &detected_features);
results_to_publish.emplace_back(std::move(result));
bool yield = delegate && delegate->ShouldYield();
// (synchronized): Publish the compilation result and get the next unit.
BackgroundCompileScope compile_scope(native_module);
if (compile_scope.cancelled()) return kNoMoreUnits;
if (!results_to_publish.back().succeeded()) {
compilation_failed = true;
compile_scope.compilation_state()->SetError();
break;
return kNoMoreUnits;
}
// Yield or get next unit.
......@@ -1284,10 +1289,7 @@ CompilationExecutionResult ExecuteCompilationUnits(
}
}
}
// We only get here if compilation failed. Other exits return directly.
DCHECK(compilation_failed);
USE(compilation_failed);
return kNoMoreUnits;
UNREACHABLE();
}
using JSToWasmWrapperKey = std::pair<bool, FunctionSig>;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment