summaryrefslogtreecommitdiff
path: root/benches/fibonacci.rs
diff options
context:
space:
mode:
authorHenry Gressmann <mail@henrygressmann.de>2024-01-27 02:40:08 +0100
committerHenry Gressmann <mail@henrygressmann.de>2024-01-27 02:40:08 +0100
commit9d30a1b0d93b45c05f86e61df77359303aab449d (patch)
treea2a0e84ff5e548143593c84396908e2745726d85 /benches/fibonacci.rs
parenta89f75ce42f83de09bad72c1baf697a007751b1b (diff)
pref: callstack/callframe improvements
Signed-off-by: Henry Gressmann <mail@henrygressmann.de>
Diffstat (limited to 'benches/fibonacci.rs')
-rw-r--r--benches/fibonacci.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/benches/fibonacci.rs b/benches/fibonacci.rs
new file mode 100644
index 0000000..b0a4834
--- /dev/null
+++ b/benches/fibonacci.rs
@@ -0,0 +1,42 @@
+mod util;
+use criterion::{criterion_group, criterion_main, Criterion};
+use tinywasm::types::TinyWasmModule;
+use util::tinywasm_module;
+
+fn run_tinywasm(module: TinyWasmModule) {
+ use tinywasm::*;
+ let module = Module::from(module);
+ let mut store = Store::default();
+ let imports = Imports::default();
+ let instance = ModuleInstance::instantiate(&mut store, module, Some(imports)).expect("instantiate");
+ let hello = instance.exported_func::<i32, i32>(&mut store, "fibonacci").expect("exported_func");
+ hello.call(&mut store, 28).expect("call");
+}
+
+fn run_wasmi() {
+ use wasmi::*;
+ let engine = Engine::default();
+ let module = wasmi::Module::new(&engine, FIBONACCI).expect("wasmi::Module::new");
+ let mut store = Store::new(&engine, ());
+ let linker = <Linker<()>>::new(&engine);
+ let instance = linker.instantiate(&mut store, &module).expect("instantiate").start(&mut store).expect("start");
+ let hello = instance.get_typed_func::<i32, i32>(&mut store, "fibonacci").expect("get_typed_func");
+ hello.call(&mut store, 28).expect("call");
+}
+
+const FIBONACCI: &[u8] = include_bytes!("../examples/rust/out/fibonacci.wasm");
+fn criterion_benchmark(c: &mut Criterion) {
+ let module = tinywasm_module(FIBONACCI);
+
+ let mut group = c.benchmark_group("fibonacci");
+ group.bench_function("tinywasm", |b| b.iter(|| run_tinywasm(module.clone())));
+ // group.bench_function("wasmi", |b| b.iter(|| run_wasmi()));
+}
+
+criterion_group!(
+ name = benches;
+ config = Criterion::default().sample_size(50).measurement_time(std::time::Duration::from_secs(5)).significance_level(0.1);
+ targets = criterion_benchmark
+);
+
+criterion_main!(benches);