diff options
Diffstat (limited to 'bench_util')
| -rw-r--r-- | bench_util/Cargo.toml | 8 | ||||
| -rw-r--r-- | bench_util/benches/op_baseline.rs | 47 |
2 files changed, 53 insertions, 2 deletions
diff --git a/bench_util/Cargo.toml b/bench_util/Cargo.toml index f3e1140c8..80886d818 100644 --- a/bench_util/Cargo.toml +++ b/bench_util/Cargo.toml @@ -1,7 +1,7 @@ # Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. [package] -name = "bench_util" -version = "0.0.0" +name = "deno_bench_util" +version = "0.1.0" authors = ["the Deno authors"] edition = "2018" description = "Bench and profiling utilities for deno crates" @@ -16,3 +16,7 @@ publish = false bencher = "0.1" deno_core = { version = "0.88.0", path = "../core" } tokio = { version = "1.6.0", features = ["full"] } + +[[bench]] +name = "op_baseline" +harness = false diff --git a/bench_util/benches/op_baseline.rs b/bench_util/benches/op_baseline.rs new file mode 100644 index 000000000..ecce90bec --- /dev/null +++ b/bench_util/benches/op_baseline.rs @@ -0,0 +1,47 @@ +use deno_bench_util::bench_or_profile; +use deno_bench_util::bencher::{benchmark_group, Bencher}; +use deno_bench_util::{bench_js_async, bench_js_sync}; + +use deno_core::error::AnyError; +use deno_core::op_async; +use deno_core::op_sync; +use deno_core::serialize_op_result; +use deno_core::JsRuntime; +use deno_core::Op; +use deno_core::OpState; + +use std::cell::RefCell; +use std::rc::Rc; + +fn setup(runtime: &mut JsRuntime) { + runtime.register_op("pi_json", op_sync(|_, _: (), _: ()| Ok(314159))); + runtime.register_op("pi_async", op_async(op_pi_async)); + runtime.register_op("nop", |state, _| { + Op::Sync(serialize_op_result(Ok(9), state)) + }); + runtime.sync_ops_cache(); +} + +// this is a function since async closures aren't stable +async fn op_pi_async( + _: Rc<RefCell<OpState>>, + _: (), + _: (), +) -> Result<i64, AnyError> { + Ok(314159) +} + +fn bench_op_pi_json(b: &mut Bencher) { + bench_js_sync(b, r#"Deno.core.opSync("pi_json", null);"#, setup); +} + +fn bench_op_nop(b: &mut Bencher) { + bench_js_sync(b, r#"Deno.core.opSync("nop", null, null, null);"#, setup); +} + +fn bench_op_async(b: &mut Bencher) { + bench_js_async(b, r#"Deno.core.opAsync("pi_async", null);"#, setup); +} + +benchmark_group!(benches, bench_op_pi_json, bench_op_nop, bench_op_async); +bench_or_profile!(benches); |
