Skip to content

Commit ca7ec41

Browse files
authored
v8: avoid unnecessary log level checks. (#146)
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 <[email protected]>
1 parent 2b55995 commit ca7ec41

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

src/v8/v8.cc

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -649,15 +649,16 @@ void V8::registerHostFunctionImpl(std::string_view module_name, std::string_view
649649
store_.get(), type.get(),
650650
[](void *data, const wasm::Val params[], wasm::Val[]) -> wasm::own<wasm::Trap> {
651651
auto func_data = reinterpret_cast<FuncData *>(data);
652-
if (func_data->vm_->cmpLogLevel(LogLevel::trace)) {
652+
const bool log = func_data->vm_->cmpLogLevel(LogLevel::trace);
653+
if (log) {
653654
func_data->vm_->integration()->trace("[vm->host] " + func_data->name_ + "(" +
654655
printValues(params, sizeof...(Args)) + ")");
655656
}
656657
auto args_tuple = convertValTypesToArgsTuple<std::tuple<Args...>>(params);
657658
auto args = std::tuple_cat(std::make_tuple(current_context_), args_tuple);
658659
auto function = reinterpret_cast<void (*)(void *, Args...)>(func_data->raw_func_);
659660
std::apply(function, args);
660-
if (func_data->vm_->cmpLogLevel(LogLevel::trace)) {
661+
if (log) {
661662
func_data->vm_->integration()->trace("[vm<-host] " + func_data->name_ + " return: void");
662663
}
663664
return nullptr;
@@ -682,7 +683,8 @@ void V8::registerHostFunctionImpl(std::string_view module_name, std::string_view
682683
store_.get(), type.get(),
683684
[](void *data, const wasm::Val params[], wasm::Val results[]) -> wasm::own<wasm::Trap> {
684685
auto func_data = reinterpret_cast<FuncData *>(data);
685-
if (func_data->vm_->cmpLogLevel(LogLevel::trace)) {
686+
const bool log = func_data->vm_->cmpLogLevel(LogLevel::trace);
687+
if (log) {
686688
func_data->vm_->integration()->trace("[vm->host] " + func_data->name_ + "(" +
687689
printValues(params, sizeof...(Args)) + ")");
688690
}
@@ -691,7 +693,7 @@ void V8::registerHostFunctionImpl(std::string_view module_name, std::string_view
691693
auto function = reinterpret_cast<R (*)(void *, Args...)>(func_data->raw_func_);
692694
R rvalue = std::apply(function, args);
693695
results[0] = makeVal(rvalue);
694-
if (func_data->vm_->cmpLogLevel(LogLevel::trace)) {
696+
if (log) {
695697
func_data->vm_->integration()->trace("[vm<-host] " + func_data->name_ +
696698
" return: " + std::to_string(rvalue));
697699
}
@@ -729,17 +731,18 @@ void V8::getModuleFunctionImpl(std::string_view function_name,
729731
}
730732
*function = [func, function_name, this](ContextBase *context, Args... args) -> void {
731733
wasm::Val params[] = {makeVal(args)...};
732-
SaveRestoreContext saved_context(context);
733-
if (cmpLogLevel(LogLevel::trace)) {
734+
const bool log = cmpLogLevel(LogLevel::trace);
735+
if (log) {
734736
integration()->trace("[host->vm] " + std::string(function_name) + "(" +
735737
printValues(params, sizeof...(Args)) + ")");
736738
}
739+
SaveRestoreContext saved_context(context);
737740
auto trap = func->call(params, nullptr);
738741
if (trap) {
739742
fail(FailState::RuntimeError, getFailMessage(std::string(function_name), std::move(trap)));
740743
return;
741744
}
742-
if (cmpLogLevel(LogLevel::trace)) {
745+
if (log) {
743746
integration()->trace("[host<-vm] " + std::string(function_name) + " return: void");
744747
}
745748
};
@@ -769,18 +772,19 @@ void V8::getModuleFunctionImpl(std::string_view function_name,
769772
*function = [func, function_name, this](ContextBase *context, Args... args) -> R {
770773
wasm::Val params[] = {makeVal(args)...};
771774
wasm::Val results[1];
772-
SaveRestoreContext saved_context(context);
773-
if (cmpLogLevel(LogLevel::trace)) {
775+
const bool log = cmpLogLevel(LogLevel::trace);
776+
if (log) {
774777
integration()->trace("[host->vm] " + std::string(function_name) + "(" +
775778
printValues(params, sizeof...(Args)) + ")");
776779
}
780+
SaveRestoreContext saved_context(context);
777781
auto trap = func->call(params, results);
778782
if (trap) {
779783
fail(FailState::RuntimeError, getFailMessage(std::string(function_name), std::move(trap)));
780784
return R{};
781785
}
782786
R rvalue = results[0].get<typename ConvertWordTypeToUint32<R>::type>();
783-
if (cmpLogLevel(LogLevel::trace)) {
787+
if (log) {
784788
integration()->trace("[host<-vm] " + std::string(function_name) +
785789
" return: " + std::to_string(rvalue));
786790
}

0 commit comments

Comments
 (0)