Index: src/compiler/wasm-compiler.cc |
diff --git a/src/compiler/wasm-compiler.cc b/src/compiler/wasm-compiler.cc |
index 06377336c864ba7c91f7aca69f7dcaababb96b9c..a1864c6aa06e32f52b4f9f5573bfd4f642cdc9eb 100644 |
--- a/src/compiler/wasm-compiler.cc |
+++ b/src/compiler/wasm-compiler.cc |
@@ -3937,24 +3937,27 @@ Vector<const char> GetDebugName(Zone* zone, wasm::WasmName name, int index) { |
WasmCompilationUnit::WasmCompilationUnit(Isolate* isolate, |
wasm::ModuleBytesEnv* module_env, |
- const wasm::WasmFunction* function) |
+ const wasm::WasmFunction* function, |
+ bool is_sync) |
: WasmCompilationUnit( |
isolate, &module_env->module_env, |
wasm::FunctionBody{ |
function->sig, module_env->wire_bytes.start(), |
module_env->wire_bytes.start() + function->code_start_offset, |
module_env->wire_bytes.start() + function->code_end_offset}, |
- module_env->wire_bytes.GetNameOrNull(function), |
- function->func_index) {} |
+ module_env->wire_bytes.GetNameOrNull(function), function->func_index, |
+ is_sync) {} |
WasmCompilationUnit::WasmCompilationUnit(Isolate* isolate, |
wasm::ModuleEnv* module_env, |
wasm::FunctionBody body, |
- wasm::WasmName name, int index) |
+ wasm::WasmName name, int index, |
+ bool is_sync) |
: isolate_(isolate), |
module_env_(module_env), |
func_body_(body), |
func_name_(name), |
+ is_sync_(is_sync), |
graph_zone_(new Zone(isolate->allocator(), ZONE_NAME)), |
jsgraph_(new (graph_zone()) JSGraph( |
isolate, new (graph_zone()) Graph(graph_zone()), |
@@ -3982,9 +3985,18 @@ void WasmCompilationUnit::InitializeHandles() { |
void WasmCompilationUnit::ExecuteCompilation() { |
DCHECK(handles_initialized_); |
- // TODO(ahaas): The counters are not thread-safe at the moment. |
- // HistogramTimerScope wasm_compile_function_time_scope( |
- // isolate_->counters()->wasm_compile_function_time()); |
+ if (is_sync_) { |
+ // TODO(karlschimpf): Make this work when asynchronous. |
+ // https://bugs.chromium.org/p/v8/issues/detail?id=6361 |
+ HistogramTimerScope wasm_compile_function_time_scope( |
+ isolate_->counters()->wasm_compile_function_time()); |
+ ExecuteCompilationInternal(); |
+ return; |
+ } |
+ ExecuteCompilationInternal(); |
+} |
+ |
+void WasmCompilationUnit::ExecuteCompilationInternal() { |
if (FLAG_trace_wasm_compiler) { |
if (func_name_.start() != nullptr) { |
PrintF("Compiling WASM function %d:'%.*s'\n\n", func_index(), |
@@ -4023,10 +4035,11 @@ void WasmCompilationUnit::ExecuteCompilation() { |
!module_env_->module->is_wasm())); |
ok_ = job_->ExecuteJob() == CompilationJob::SUCCEEDED; |
// TODO(bradnelson): Improve histogram handling of size_t. |
- // TODO(ahaas): The counters are not thread-safe at the moment. |
- // isolate_->counters()->wasm_compile_function_peak_memory_bytes() |
- // ->AddSample( |
- // static_cast<int>(jsgraph->graph()->zone()->allocation_size())); |
+ if (is_sync_) |
+ // TODO(karlschimpf): Make this work when asynchronous. |
+ // https://bugs.chromium.org/p/v8/issues/detail?id=6361 |
+ isolate_->counters()->wasm_compile_function_peak_memory_bytes()->AddSample( |
+ static_cast<int>(jsgraph_->graph()->zone()->allocation_size())); |
if (FLAG_trace_wasm_decode_time) { |
double pipeline_ms = pipeline_timer.Elapsed().InMillisecondsF(); |