1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-22 07:14:47 -05:00

cleanup(bench_util): use Extensions for setup (#10737)

This commit is contained in:
Aaron O'Mullan 2021-05-21 15:46:26 +02:00 committed by GitHub
parent f82e7d3bdf
commit ee00b7c897
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 35 deletions

View file

@ -6,20 +6,24 @@ 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::Extension;
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();
fn setup() -> Vec<Extension> {
vec![Extension::builder()
.ops(vec![
("pi_json", op_sync(|_, _: (), _: ()| Ok(314159))),
("pi_async", op_async(op_pi_async)),
(
"nop",
Box::new(|state, _| Op::Sync(serialize_op_result(Ok(9), state))),
),
])
.build()]
}
// this is a function since async closures aren't stable

View file

@ -1,20 +1,17 @@
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
use bencher::Bencher;
use deno_core::v8;
use deno_core::Extension;
use deno_core::JsRuntime;
use deno_core::RuntimeOptions;
use crate::profiling::is_profiling;
pub fn create_js_runtime(setup: impl FnOnce(&mut JsRuntime)) -> JsRuntime {
let mut rt = JsRuntime::new(Default::default());
// Caller provided setup
setup(&mut rt);
// Init ops
rt.sync_ops_cache();
rt
pub fn create_js_runtime(setup: impl FnOnce() -> Vec<Extension>) -> JsRuntime {
JsRuntime::new(RuntimeOptions {
extensions: setup(),
..Default::default()
})
}
fn loop_code(iters: u64, src: &str) -> String {
@ -24,7 +21,7 @@ fn loop_code(iters: u64, src: &str) -> String {
pub fn bench_js_sync(
b: &mut Bencher,
src: &str,
setup: impl FnOnce(&mut JsRuntime),
setup: impl FnOnce() -> Vec<Extension>,
) {
let mut runtime = create_js_runtime(setup);
let scope = &mut runtime.handle_scope();
@ -50,7 +47,7 @@ pub fn bench_js_sync(
pub fn bench_js_async(
b: &mut Bencher,
src: &str,
setup: impl FnOnce(&mut JsRuntime),
setup: impl FnOnce() -> Vec<Extension>,
) {
let mut runtime = create_js_runtime(setup);
let tokio_runtime = tokio::runtime::Builder::new_current_thread()

View file

@ -2,22 +2,18 @@ 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::JsRuntime;
use deno_core::Extension;
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();
fn setup() -> Vec<Extension> {
vec![
deno_url::init(),
Extension::builder()
.js(vec![(
"setup",
"const { URL } = globalThis.__bootstrap.url;",
)])
.build(),
]
}
fn bench_url_parse(b: &mut Bencher) {