summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock21
-rw-r--r--bench_util/Cargo.toml8
-rw-r--r--bench_util/benches/op_baseline.rs47
-rw-r--r--core/Cargo.toml5
-rw-r--r--core/benches/op_baseline.rs88
-rw-r--r--extensions/url/Cargo.toml2
-rw-r--r--extensions/url/benches/url_ops.rs37
7 files changed, 79 insertions, 129 deletions
diff --git a/Cargo.lock b/Cargo.lock
index b82c58ffa..70eaa1004 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -194,15 +194,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
[[package]]
-name = "bench_util"
-version = "0.0.0"
-dependencies = [
- "bencher",
- "deno_core",
- "tokio",
-]
-
-[[package]]
name = "bencher"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -592,6 +583,15 @@ dependencies = [
]
[[package]]
+name = "deno_bench_util"
+version = "0.1.0"
+dependencies = [
+ "bencher",
+ "deno_core",
+ "tokio",
+]
+
+[[package]]
name = "deno_console"
version = "0.7.0"
dependencies = [
@@ -603,7 +603,6 @@ name = "deno_core"
version = "0.88.0"
dependencies = [
"anyhow",
- "bencher",
"futures",
"indexmap",
"lazy_static",
@@ -747,7 +746,7 @@ dependencies = [
name = "deno_url"
version = "0.7.0"
dependencies = [
- "bencher",
+ "deno_bench_util",
"deno_core",
"idna",
"percent-encoding",
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);
diff --git a/core/Cargo.toml b/core/Cargo.toml
index 0f2968e61..6ad8ea67e 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -34,8 +34,3 @@ path = "examples/http_bench_json_ops.rs"
# These dependencies are only used for the 'http_bench_*_ops' examples.
[dev-dependencies]
tokio = { version = "1.6.0", features = ["full"] }
-bencher = "0.1"
-
-[[bench]]
-name = "op_baseline"
-harness = false
diff --git a/core/benches/op_baseline.rs b/core/benches/op_baseline.rs
deleted file mode 100644
index ecac4ca26..000000000
--- a/core/benches/op_baseline.rs
+++ /dev/null
@@ -1,88 +0,0 @@
-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 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, _| {
- Op::Sync(serialize_op_result(Ok(9), state))
- });
- runtime.sync_ops_cache();
-
- runtime
-}
-
-// this is a function since async closures aren't stable
-async fn op_pi_async(
- _: Rc<RefCell<OpState>>,
- _: (),
- _: (),
-) -> Result<i64, AnyError> {
- Ok(314159)
-}
-
-pub fn bench_runtime_js(b: &mut Bencher, src: &str) {
- let mut runtime = create_js_runtime();
- let scope = &mut runtime.handle_scope();
- 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);
- }"#,
- );
-}
-
-fn bench_op_nop(b: &mut Bencher) {
- bench_runtime_js(
- b,
- r#"for(let i=0; i < 1e3; i++) {
- Deno.core.opSync("nop", null, null, null);
- }"#,
- );
-}
-
-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);
- }"#,
- );
-}
-
-benchmark_group!(benches, bench_op_pi_json, bench_op_nop, bench_op_async);
-benchmark_main!(benches);
diff --git a/extensions/url/Cargo.toml b/extensions/url/Cargo.toml
index 70a880e0d..19d8a113d 100644
--- a/extensions/url/Cargo.toml
+++ b/extensions/url/Cargo.toml
@@ -20,7 +20,7 @@ percent-encoding = "2.1.0"
serde = { version = "1.0.125", features = ["derive"] }
[dev-dependencies]
-bencher = "0.1"
+deno_bench_util = { version = "0.1.0", path = "../../bench_util" }
[[bench]]
name = "url_ops"
diff --git a/extensions/url/benches/url_ops.rs b/extensions/url/benches/url_ops.rs
index 8b3cf2705..b901939e0 100644
--- a/extensions/url/benches/url_ops.rs
+++ b/extensions/url/benches/url_ops.rs
@@ -1,35 +1,28 @@
-use bencher::{benchmark_group, benchmark_main, Bencher};
+use deno_bench_util::bench_js_sync;
+use deno_bench_util::bench_or_profile;
+use deno_bench_util::bencher::{benchmark_group, Bencher};
-use deno_core::v8;
use deno_core::JsRuntime;
-use deno_core::RuntimeOptions;
-fn create_js_runtime() -> JsRuntime {
- let mut runtime = JsRuntime::new(RuntimeOptions {
- extensions: vec![deno_url::init()],
- ..Default::default()
- });
+fn setup(runtime: &mut JsRuntime) {
+ // TODO(@AaronO): support caller provided extensions in deno_bench_util
+ let mut ext = deno_url::init();
+
+ for (name, op_fn) in ext.init_ops().unwrap() {
+ runtime.register_op(name, op_fn);
+ }
+ for (filename, src) in ext.init_js() {
+ runtime.execute(filename, src).unwrap();
+ }
runtime
.execute("setup", "const { URL } = globalThis.__bootstrap.url;")
.unwrap();
-
- runtime
-}
-
-pub fn bench_runtime_js(b: &mut Bencher, src: &str) {
- let mut runtime = create_js_runtime();
- let scope = &mut runtime.handle_scope();
- let code = v8::String::new(scope, src).unwrap();
- let script = v8::Script::compile(scope, code, None).unwrap();
- b.iter(|| {
- script.run(scope).unwrap();
- });
}
fn bench_url_parse(b: &mut Bencher) {
- bench_runtime_js(b, r#"new URL(`http://www.google.com/`);"#);
+ bench_js_sync(b, r#"new URL(`http://www.google.com/`);"#, setup);
}
benchmark_group!(benches, bench_url_parse,);
-benchmark_main!(benches);
+bench_or_profile!(benches);