diff --git a/include/proxy-wasm/v8.h b/include/proxy-wasm/v8.h index 5531f52c..73c91b95 100644 --- a/include/proxy-wasm/v8.h +++ b/include/proxy-wasm/v8.h @@ -21,7 +21,6 @@ namespace proxy_wasm { -bool initV8Engine(); std::unique_ptr createV8Vm(); } // namespace proxy_wasm diff --git a/include/proxy-wasm/wamr.h b/include/proxy-wasm/wamr.h index 32a05e94..98ff72e3 100644 --- a/include/proxy-wasm/wamr.h +++ b/include/proxy-wasm/wamr.h @@ -21,7 +21,6 @@ namespace proxy_wasm { -bool initWamrEngine(); std::unique_ptr createWamrVm(); } // namespace proxy_wasm diff --git a/include/proxy-wasm/wasmtime.h b/include/proxy-wasm/wasmtime.h index 11c4ae7a..e3fe4b48 100644 --- a/include/proxy-wasm/wasmtime.h +++ b/include/proxy-wasm/wasmtime.h @@ -18,7 +18,6 @@ namespace proxy_wasm { -bool initWasmtimeEngine(); std::unique_ptr createWasmtimeVm(); } // namespace proxy_wasm diff --git a/src/v8/v8.cc b/src/v8/v8.cc index 932a6004..f5a73b13 100644 --- a/src/v8/v8.cc +++ b/src/v8/v8.cc @@ -759,8 +759,6 @@ std::string V8::getFailMessage(std::string_view function_name, wasm::own createV8Vm() { return std::make_unique(); } } // namespace proxy_wasm diff --git a/src/wamr/wamr.cc b/src/wamr/wamr.cc index 88dc9f00..8eef7359 100644 --- a/src/wamr/wamr.cc +++ b/src/wamr/wamr.cc @@ -713,8 +713,6 @@ void Wamr::warm() { initStore(); } } // namespace wamr -bool initWamrEngine() { return wamr::engine() != nullptr; } - std::unique_ptr createWamrVm() { return std::make_unique(); } } // namespace proxy_wasm diff --git a/src/wasmedge/wasmedge.cc b/src/wasmedge/wasmedge.cc index 263ed188..30fe78f5 100644 --- a/src/wasmedge/wasmedge.cc +++ b/src/wasmedge/wasmedge.cc @@ -225,9 +225,6 @@ using HostModuleDataPtr = std::unique_ptr; class WasmEdge : public WasmVm { public: WasmEdge() { - loader_ = WasmEdge_LoaderCreate(nullptr); - validator_ = WasmEdge_ValidatorCreate(nullptr); - executor_ = WasmEdge_ExecutorCreate(nullptr, nullptr); store_ = nullptr; ast_module_ = nullptr; module_ = nullptr; @@ -305,6 +302,7 @@ class WasmEdge : public WasmVm { bool WasmEdge::load(std::string_view bytecode, std::string_view /*precompiled*/, const std::unordered_map & /*function_names*/) { + initStore(); WasmEdge_ASTModuleContext *mod = nullptr; WasmEdge_Result res = WasmEdge_LoaderParseFromBuffer( loader_.get(), &mod, reinterpret_cast(bytecode.data()), bytecode.size()); @@ -324,6 +322,9 @@ void WasmEdge::initStore() { if (store_ != nullptr) { return; } + loader_ = WasmEdge_LoaderCreate(nullptr); + validator_ = WasmEdge_ValidatorCreate(nullptr); + executor_ = WasmEdge_ExecutorCreate(nullptr, nullptr); store_ = WasmEdge_StoreCreate(); } diff --git a/src/wasmtime/wasmtime.cc b/src/wasmtime/wasmtime.cc index ac036162..a72a0361 100644 --- a/src/wasmtime/wasmtime.cc +++ b/src/wasmtime/wasmtime.cc @@ -710,8 +710,6 @@ void Wasmtime::warm() { initStore(); } } // namespace wasmtime -bool initWasmtimeEngine() { return wasmtime::engine() != nullptr; } - std::unique_ptr createWasmtimeVm() { return std::make_unique(); } } // namespace proxy_wasm diff --git a/test/wasm_vm_test.cc b/test/wasm_vm_test.cc index bb2bab19..346fe2a0 100644 --- a/test/wasm_vm_test.cc +++ b/test/wasm_vm_test.cc @@ -31,37 +31,17 @@ INSTANTIATE_TEST_SUITE_P(WasmEngines, TestVm, testing::ValuesIn(getWasmEngines() }); TEST_P(TestVm, Init) { - std::chrono::time_point time2; - auto time1 = std::chrono::steady_clock::now(); - if (engine_ == "v8") { -#if defined(PROXY_WASM_HOST_ENGINE_V8) - EXPECT_TRUE(proxy_wasm::initV8Engine()); - time2 = std::chrono::steady_clock::now(); - EXPECT_TRUE(proxy_wasm::initV8Engine()); -#endif - } else if (engine_ == "wamr") { -#if defined(PROXY_WASM_HOST_ENGINE_WAMR) - EXPECT_TRUE(proxy_wasm::initWamrEngine()); - time2 = std::chrono::steady_clock::now(); - EXPECT_TRUE(proxy_wasm::initWamrEngine()); -#endif - } else if (engine_ == "wasmtime") { -#if defined(PROXY_WASM_HOST_ENGINE_WASMTIME) - EXPECT_TRUE(proxy_wasm::initWasmtimeEngine()); - time2 = std::chrono::steady_clock::now(); - EXPECT_TRUE(proxy_wasm::initWasmtimeEngine()); -#endif - } else { - return; - } + vm_->warm(); + auto time2 = std::chrono::steady_clock::now(); + vm_->warm(); auto time3 = std::chrono::steady_clock::now(); auto cold = std::chrono::duration_cast(time2 - time1).count(); auto warm = std::chrono::duration_cast(time3 - time2).count(); - std::cout << "\"cold\" engine time: " << cold << "ns" << std::endl; - std::cout << "\"warm\" engine time: " << warm << "ns" << std::endl; + std::cout << "[" << engine_ << "] \"cold\" engine time: " << cold << "ns" << std::endl; + std::cout << "[" << engine_ << "] \"warm\" engine time: " << warm << "ns" << std::endl; // Default warm time in nanoseconds. int warm_time_ns_limit = 10000; @@ -75,6 +55,11 @@ TEST_P(TestVm, Init) { EXPECT_LE(warm, warm_time_ns_limit); // Verify that getting a "warm" engine takes at least 50x less time than getting a "cold" one. + // We skip NullVM because warm() is a noop. + if (engine_ == "null") { + std::cout << "Skipping warm() performance assertions for NullVM." << std::endl; + return; + } EXPECT_LE(warm * 50, cold); }