mirror of
https://github.com/denoland/deno.git
synced 2025-03-11 06:37:12 -04:00
chore(ext/webidl): Add dictionary converter microbenchmark (#17435)
This commits add a `webidl.createDictionaryConverter` converter microbenchmark. There are 2 PRs currently open that need a microbenchmark for webidl dictionary converter. See https://github.com/denoland/deno/pull/16594 and https://github.com/denoland/deno/pull/16407 Closes https://github.com/denoland/deno/issues/17436
This commit is contained in:
parent
1a0638032e
commit
7f65a5d58a
4 changed files with 85 additions and 0 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -1284,6 +1284,7 @@ dependencies = [
|
||||||
name = "deno_webidl"
|
name = "deno_webidl"
|
||||||
version = "0.84.0"
|
version = "0.84.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"deno_bench_util",
|
||||||
"deno_core",
|
"deno_core",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -15,3 +15,10 @@ path = "lib.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
deno_core.workspace = true
|
deno_core.workspace = true
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
deno_bench_util.workspace = true
|
||||||
|
|
||||||
|
[[bench]]
|
||||||
|
name = "dict"
|
||||||
|
harness = false
|
||||||
|
|
35
ext/webidl/benches/dict.js
Normal file
35
ext/webidl/benches/dict.js
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
||||||
|
|
||||||
|
// deno-lint-ignore-file
|
||||||
|
|
||||||
|
const { createDictionaryConverter, converters } = globalThis.__bootstrap.webidl;
|
||||||
|
|
||||||
|
const TextDecodeOptions = createDictionaryConverter(
|
||||||
|
"TextDecodeOptions",
|
||||||
|
[
|
||||||
|
{
|
||||||
|
key: "stream",
|
||||||
|
converter: converters.boolean,
|
||||||
|
defaultValue: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
// Sanity check
|
||||||
|
{
|
||||||
|
const o = TextDecodeOptions(undefined);
|
||||||
|
if (o.stream !== false) {
|
||||||
|
throw new Error("Unexpected stream value");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function handwrittenConverter(V) {
|
||||||
|
const defaultValue = { stream: false };
|
||||||
|
if (V === undefined || V === null) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
if (V.stream !== undefined) {
|
||||||
|
defaultValue.stream = !!V.stream;
|
||||||
|
}
|
||||||
|
return defaultValue;
|
||||||
|
}
|
42
ext/webidl/benches/dict.rs
Normal file
42
ext/webidl/benches/dict.rs
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
||||||
|
|
||||||
|
use deno_bench_util::bench_js_sync;
|
||||||
|
use deno_bench_util::bench_or_profile;
|
||||||
|
use deno_bench_util::bencher::benchmark_group;
|
||||||
|
use deno_bench_util::bencher::Bencher;
|
||||||
|
|
||||||
|
use deno_core::Extension;
|
||||||
|
|
||||||
|
fn setup() -> Vec<Extension> {
|
||||||
|
vec![
|
||||||
|
deno_webidl::init(),
|
||||||
|
Extension::builder("deno_webidl_bench")
|
||||||
|
.js(vec![("setup", include_str!("dict.js"))])
|
||||||
|
.build(),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn converter_undefined(b: &mut Bencher) {
|
||||||
|
bench_js_sync(b, r#"TextDecodeOptions(undefined);"#, setup);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn handwritten_baseline_undefined(b: &mut Bencher) {
|
||||||
|
bench_js_sync(b, r#"handwrittenConverter(undefined)"#, setup);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn converter_object(b: &mut Bencher) {
|
||||||
|
bench_js_sync(b, r#"TextDecodeOptions({});"#, setup);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn handwritten_baseline_object(b: &mut Bencher) {
|
||||||
|
bench_js_sync(b, r#"handwrittenConverter({})"#, setup);
|
||||||
|
}
|
||||||
|
|
||||||
|
benchmark_group!(
|
||||||
|
benches,
|
||||||
|
converter_undefined,
|
||||||
|
handwritten_baseline_undefined,
|
||||||
|
converter_object,
|
||||||
|
handwritten_baseline_object,
|
||||||
|
);
|
||||||
|
bench_or_profile!(benches);
|
Loading…
Add table
Reference in a new issue