diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/Cargo.toml | 2 | ||||
-rw-r--r-- | core/benches/op_baseline.rs | 77 |
2 files changed, 15 insertions, 64 deletions
diff --git a/core/Cargo.toml b/core/Cargo.toml index 2fbe19254..deaa3e35f 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -34,7 +34,7 @@ path = "examples/http_bench_json_ops.rs" # These dependencies are only used for the 'http_bench_*_ops' examples. [dev-dependencies] tokio = { version = "1.4.0", features = ["full"] } -bencher = "0.1" +bench_util = { version = "0.0.0", path = "../bench_util" } [[bench]] name = "op_baseline" diff --git a/core/benches/op_baseline.rs b/core/benches/op_baseline.rs index 132d92f00..e930b009a 100644 --- a/core/benches/op_baseline.rs +++ b/core/benches/op_baseline.rs @@ -1,38 +1,25 @@ -use bencher::{benchmark_group, benchmark_main, Bencher}; - use deno_core::error::AnyError; use deno_core::op_async; use deno_core::op_sync; use deno_core::serialize_op_result; -use deno_core::v8; use deno_core::JsRuntime; use deno_core::Op; use deno_core::OpState; use deno_core::ZeroCopyBuf; +use bench_util::bench_or_profile; +use bench_util::bencher::{benchmark_group, Bencher}; +use bench_util::{bench_js_async, bench_js_sync}; + use std::cell::RefCell; use std::rc::Rc; -fn create_js_runtime() -> JsRuntime { - let mut runtime = JsRuntime::new(Default::default()); - runtime.register_op("pi_json", op_sync(|_, _: (), _| Ok(314159))); - runtime.register_op("pi_async", op_async(op_pi_async)); - runtime.register_op("nop", |state, _, _| { +fn setup(rt: &mut JsRuntime) { + rt.register_op("pi_json", op_sync(|_, _: (), _| Ok(314159))); + rt.register_op("pi_async", op_async(op_pi_async)); + rt.register_op("nop", |state, _, _| { Op::Sync(serialize_op_result(Ok(9), state)) }); - - // Init ops - runtime - .execute( - "init", - r#" - Deno.core.ops(); - Deno.core.registerErrorClass('Error', Error); - "#, - ) - .unwrap(); - - runtime } // this is a function since async closures aren't stable @@ -44,57 +31,21 @@ async fn op_pi_async( Ok(314159) } -pub fn bench_runtime_js(b: &mut Bencher, src: &str) { - let mut runtime = create_js_runtime(); - let context = runtime.global_context(); - let scope = &mut v8::HandleScope::with_context(runtime.v8_isolate(), context); - let code = v8::String::new(scope, src).unwrap(); - let script = v8::Script::compile(scope, code, None).unwrap(); - b.iter(|| { - script.run(scope).unwrap(); - }); -} - -pub fn bench_runtime_js_async(b: &mut Bencher, src: &str) { - let mut runtime = create_js_runtime(); - let tokio_runtime = tokio::runtime::Builder::new_current_thread() - .enable_all() - .build() - .unwrap(); - - b.iter(|| { - runtime.execute("inner_loop", src).unwrap(); - let future = runtime.run_event_loop(); - tokio_runtime.block_on(future).unwrap(); - }); -} - fn bench_op_pi_json(b: &mut Bencher) { - bench_runtime_js( - b, - r#"for(let i=0; i < 1e3; i++) { - Deno.core.opSync("pi_json", null); - }"#, - ); + bench_js_sync(b, r#"Deno.core.opSync("pi_json");"#, setup); } fn bench_op_nop(b: &mut Bencher) { - bench_runtime_js( + bench_js_sync( b, - r#"for(let i=0; i < 1e3; i++) { - Deno.core.dispatchByName("nop", null, null, null); - }"#, + r#"Deno.core.dispatchByName("nop", null, null, null);"#, + setup, ); } fn bench_op_async(b: &mut Bencher) { - bench_runtime_js_async( - b, - r#"for(let i=0; i < 1e3; i++) { - Deno.core.opAsync("pi_async", null); - }"#, - ); + bench_js_async(b, r#"Deno.core.opAsync("pi_async");"#, setup); } benchmark_group!(benches, bench_op_pi_json, bench_op_nop, bench_op_async); -benchmark_main!(benches); +bench_or_profile!(benches); |