From df73088a3f408d930cf0faf1db7da300103f86bf Mon Sep 17 00:00:00 2001 From: Piotr Sikora Date: Fri, 2 Apr 2021 08:08:31 +0000 Subject: [PATCH] v8: avoid unnecessary log level checks. It's mostly a pedantic change, but it slightly improves performance in microbenchmarks. Benchmark Diff -------------------------------------------------------------------- WasmSpeedTest_empty -0.0891 WasmSpeedTest_get_current_time -0.0424 WasmSpeedTest_small_string -0.0507 WasmSpeedTest_small_string1000 -0.0118 WasmSpeedTest_small_string_check_compiler -0.0556 WasmSpeedTest_small_string_check_compiler1000 +0.0041 WasmSpeedTest_large_string -0.0322 WasmSpeedTest_large_string1000 -0.0311 WasmSpeedTest_get_property -0.0173 WasmSpeedTest_grpc_service -0.0558 WasmSpeedTest_grpc_service1000 -0.0021 WasmSpeedTest_modify_metadata +0.0410 WasmSpeedTest_modify_metadata1000 -0.0298 WasmSpeedTest_json_serialize +0.0009 WasmSpeedTest_json_deserialize +0.0028 WasmSpeedTest_json_deserialize_empty -0.0028 WasmSpeedTest_convert_to_filter_state -0.0172 Signed-off-by: Piotr Sikora --- src/v8/v8.cc | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/v8/v8.cc b/src/v8/v8.cc index e83351a9d..986ce10f1 100644 --- a/src/v8/v8.cc +++ b/src/v8/v8.cc @@ -649,7 +649,8 @@ void V8::registerHostFunctionImpl(std::string_view module_name, std::string_view store_.get(), type.get(), [](void *data, const wasm::Val params[], wasm::Val[]) -> wasm::own { auto func_data = reinterpret_cast(data); - if (func_data->vm_->cmpLogLevel(LogLevel::trace)) { + const bool log = func_data->vm_->cmpLogLevel(LogLevel::trace); + if (log) { func_data->vm_->integration()->trace("[vm->host] " + func_data->name_ + "(" + printValues(params, sizeof...(Args)) + ")"); } @@ -657,7 +658,7 @@ void V8::registerHostFunctionImpl(std::string_view module_name, std::string_view auto args = std::tuple_cat(std::make_tuple(current_context_), args_tuple); auto function = reinterpret_cast(func_data->raw_func_); std::apply(function, args); - if (func_data->vm_->cmpLogLevel(LogLevel::trace)) { + if (log) { func_data->vm_->integration()->trace("[vm<-host] " + func_data->name_ + " return: void"); } return nullptr; @@ -682,7 +683,8 @@ void V8::registerHostFunctionImpl(std::string_view module_name, std::string_view store_.get(), type.get(), [](void *data, const wasm::Val params[], wasm::Val results[]) -> wasm::own { auto func_data = reinterpret_cast(data); - if (func_data->vm_->cmpLogLevel(LogLevel::trace)) { + const bool log = func_data->vm_->cmpLogLevel(LogLevel::trace); + if (log) { func_data->vm_->integration()->trace("[vm->host] " + func_data->name_ + "(" + printValues(params, sizeof...(Args)) + ")"); } @@ -691,7 +693,7 @@ void V8::registerHostFunctionImpl(std::string_view module_name, std::string_view auto function = reinterpret_cast(func_data->raw_func_); R rvalue = std::apply(function, args); results[0] = makeVal(rvalue); - if (func_data->vm_->cmpLogLevel(LogLevel::trace)) { + if (log) { func_data->vm_->integration()->trace("[vm<-host] " + func_data->name_ + " return: " + std::to_string(rvalue)); } @@ -729,17 +731,18 @@ void V8::getModuleFunctionImpl(std::string_view function_name, } *function = [func, function_name, this](ContextBase *context, Args... args) -> void { wasm::Val params[] = {makeVal(args)...}; - SaveRestoreContext saved_context(context); - if (cmpLogLevel(LogLevel::trace)) { + const bool log = cmpLogLevel(LogLevel::trace); + if (log) { integration()->trace("[host->vm] " + std::string(function_name) + "(" + printValues(params, sizeof...(Args)) + ")"); } + SaveRestoreContext saved_context(context); auto trap = func->call(params, nullptr); if (trap) { fail(FailState::RuntimeError, getFailMessage(std::string(function_name), std::move(trap))); return; } - if (cmpLogLevel(LogLevel::trace)) { + if (log) { integration()->trace("[host<-vm] " + std::string(function_name) + " return: void"); } }; @@ -769,18 +772,19 @@ void V8::getModuleFunctionImpl(std::string_view function_name, *function = [func, function_name, this](ContextBase *context, Args... args) -> R { wasm::Val params[] = {makeVal(args)...}; wasm::Val results[1]; - SaveRestoreContext saved_context(context); - if (cmpLogLevel(LogLevel::trace)) { + const bool log = cmpLogLevel(LogLevel::trace); + if (log) { integration()->trace("[host->vm] " + std::string(function_name) + "(" + printValues(params, sizeof...(Args)) + ")"); } + SaveRestoreContext saved_context(context); auto trap = func->call(params, results); if (trap) { fail(FailState::RuntimeError, getFailMessage(std::string(function_name), std::move(trap))); return R{}; } R rvalue = results[0].get::type>(); - if (cmpLogLevel(LogLevel::trace)) { + if (log) { integration()->trace("[host<-vm] " + std::string(function_name) + " return: " + std::to_string(rvalue)); }