Skip to content
Closed
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/proxy-wasm/v8.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

namespace proxy_wasm {

bool initV8Engine();
std::unique_ptr<WasmVm> createV8Vm();

} // namespace proxy_wasm
1 change: 1 addition & 0 deletions include/proxy-wasm/wamr.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

namespace proxy_wasm {

bool initWamrEngine();
std::unique_ptr<WasmVm> createWamrVm();

} // namespace proxy_wasm
1 change: 1 addition & 0 deletions include/proxy-wasm/wasmtime.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

namespace proxy_wasm {

bool initWasmtimeEngine();
std::unique_ptr<WasmVm> createWasmtimeVm();

} // namespace proxy_wasm
2 changes: 2 additions & 0 deletions src/v8/v8.cc
Original file line number Diff line number Diff line change
Expand Up @@ -709,6 +709,8 @@ std::string V8::getFailMessage(std::string_view function_name, wasm::own<wasm::T

} // namespace v8

bool initV8Engine() { return v8::engine() != nullptr; }

std::unique_ptr<WasmVm> createV8Vm() { return std::make_unique<v8::V8>(); }

} // namespace proxy_wasm
2 changes: 2 additions & 0 deletions src/wamr/wamr.cc
Original file line number Diff line number Diff line change
Expand Up @@ -644,6 +644,8 @@ void Wamr::getModuleFunctionImpl(std::string_view function_name,

} // namespace wamr

bool initWamrEngine() { return wamr::engine() != nullptr; }

std::unique_ptr<WasmVm> createWamrVm() { return std::make_unique<wamr::Wamr>(); }

} // namespace proxy_wasm
2 changes: 2 additions & 0 deletions src/wasmtime/wasmtime.cc
Original file line number Diff line number Diff line change
Expand Up @@ -694,6 +694,8 @@ void Wasmtime::getModuleFunctionImpl(std::string_view function_name,

} // namespace wasmtime

bool initWasmtimeEngine() { return wasmtime::engine() != nullptr; }

std::unique_ptr<WasmVm> createWasmtimeVm() { return std::make_unique<wasmtime::Wasmtime>(); }

} // namespace proxy_wasm
40 changes: 40 additions & 0 deletions test/wasm_vm_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,46 @@ INSTANTIATE_TEST_SUITE_P(WasmEngines, TestVm, testing::ValuesIn(getWasmEngines()
return info.param;
});

TEST_P(TestVm, Init) {
std::chrono::time_point<std::chrono::steady_clock> 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;
}
auto time3 = std::chrono::steady_clock::now();

auto cold = std::chrono::duration_cast<std::chrono::nanoseconds>(time2 - time1).count();
auto warm = std::chrono::duration_cast<std::chrono::nanoseconds>(time3 - time2).count();

std::cout << "\"cold\" engine time: " << cold << "ns" << std::endl;
std::cout << "\"warm\" engine time: " << warm << "ns" << std::endl;

// Verify that getting a "warm" engine takes less than 10us.
EXPECT_LE(warm, 10000);

// Verify that getting a "warm" engine takes at least 50x less time than getting a "cold" one.
EXPECT_LE(warm * 50, cold);
}

TEST_P(TestVm, Basic) {
if (engine_ == "wamr") {
EXPECT_EQ(vm_->cloneable(), proxy_wasm::Cloneable::NotCloneable);
Expand Down