mirror of
https://github.com/denoland/deno.git
synced 2024-11-28 16:20:57 -05: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
a4c98e3472
commit
8f321a8a39
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"
|
||||
version = "0.84.0"
|
||||
dependencies = [
|
||||
"deno_bench_util",
|
||||
"deno_core",
|
||||
]
|
||||
|
||||
|
|
|
@ -15,3 +15,10 @@ path = "lib.rs"
|
|||
|
||||
[dependencies]
|
||||
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…
Reference in a new issue