diff options
author | Matt Mastracci <matthew@mastracci.com> | 2023-03-17 16:15:27 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-17 22:15:27 +0000 |
commit | 3487fde236d0852a8b0672c293fa41a741f471e8 (patch) | |
tree | af466368147a08b787080446319a3a46a60ee37d /runtime | |
parent | e55b448730160a6e4df9815a268d4049ac89deab (diff) |
perf(core) Reduce copying and cloning in extension initialization (#18252)
Follow-up to #18210:
* we are passing the generated `cfg` object into the state function
rather than passing individual config fields
* reduce cloning dramatically by making the state_fn `FnOnce`
* `take` for `ExtensionBuilder` to avoid more unnecessary copies
* renamed `config` to `options`
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/build.rs | 6 | ||||
-rw-r--r-- | runtime/ops/os/mod.rs | 6 | ||||
-rw-r--r-- | runtime/ops/runtime.rs | 6 | ||||
-rw-r--r-- | runtime/ops/worker_host.rs | 12 | ||||
-rw-r--r-- | runtime/web_worker.rs | 12 | ||||
-rw-r--r-- | runtime/worker.rs | 13 |
6 files changed, 25 insertions, 30 deletions
diff --git a/runtime/build.rs b/runtime/build.rs index c1837de82..df5a0c299 100644 --- a/runtime/build.rs +++ b/runtime/build.rs @@ -17,9 +17,7 @@ mod startup_snapshot { use deno_core::snapshot_util::*; use deno_core::Extension; use deno_core::ExtensionFileSource; - use std::cell::RefCell; use std::path::Path; - use std::rc::Rc; fn transpile_ts_for_snapshotting( file_source: &ExtensionFileSource, @@ -292,9 +290,7 @@ mod startup_snapshot { deno_tls::deno_tls::init_ops_and_esm(), deno_napi::deno_napi::init_ops_and_esm::<Permissions>(), deno_http::deno_http::init_ops_and_esm(), - deno_io::deno_io::init_ops_and_esm(Rc::new(RefCell::new(Some( - Default::default(), - )))), + deno_io::deno_io::init_ops_and_esm(Default::default()), deno_fs::deno_fs::init_ops_and_esm::<Permissions>(false), deno_flash::deno_flash::init_ops_and_esm::<Permissions>(false), // No --unstable runtime::init_ops_and_esm(), diff --git a/runtime/ops/os/mod.rs b/runtime/ops/os/mod.rs index 87181654b..b34629395 100644 --- a/runtime/ops/os/mod.rs +++ b/runtime/ops/os/mod.rs @@ -42,11 +42,11 @@ deno_core::ops!( deno_core::extension!( deno_os, ops_fn = deno_ops, - config = { + options = { exit_code: ExitCode, }, - state = |state, exit_code| { - state.put::<ExitCode>(exit_code); + state = |state, options| { + state.put::<ExitCode>(options.exit_code); }, ); diff --git a/runtime/ops/runtime.rs b/runtime/ops/runtime.rs index 564d2279b..a77e888c8 100644 --- a/runtime/ops/runtime.rs +++ b/runtime/ops/runtime.rs @@ -9,9 +9,9 @@ use deno_core::OpState; deno_core::extension!( deno_runtime, ops = [op_main_module], - config = { main_module: ModuleSpecifier }, - state = |state, main_module| { - state.put::<ModuleSpecifier>(main_module); + options = { main_module: ModuleSpecifier }, + state = |state, options| { + state.put::<ModuleSpecifier>(options.main_module); } ); diff --git a/runtime/ops/worker_host.rs b/runtime/ops/worker_host.rs index de7e02e18..26c99efab 100644 --- a/runtime/ops/worker_host.rs +++ b/runtime/ops/worker_host.rs @@ -96,27 +96,27 @@ deno_core::extension!( op_host_recv_ctrl, op_host_recv_message, ], - config = { + options = { create_web_worker_cb: Arc<CreateWebWorkerCb>, preload_module_cb: Arc<WorkerEventCb>, pre_execute_module_cb: Arc<WorkerEventCb>, format_js_error_fn: Option<Arc<FormatJsErrorFn>>, }, - state = |state, create_web_worker_cb, preload_module_cb, pre_execute_module_cb, format_js_error_fn| { + state = |state, options| { state.put::<WorkersTable>(WorkersTable::default()); state.put::<WorkerId>(WorkerId::default()); let create_web_worker_cb_holder = - CreateWebWorkerCbHolder(create_web_worker_cb.clone()); + CreateWebWorkerCbHolder(options.create_web_worker_cb); state.put::<CreateWebWorkerCbHolder>(create_web_worker_cb_holder); let preload_module_cb_holder = - PreloadModuleCbHolder(preload_module_cb.clone()); + PreloadModuleCbHolder(options.preload_module_cb); state.put::<PreloadModuleCbHolder>(preload_module_cb_holder); let pre_execute_module_cb_holder = - PreExecuteModuleCbHolder(pre_execute_module_cb.clone()); + PreExecuteModuleCbHolder(options.pre_execute_module_cb); state.put::<PreExecuteModuleCbHolder>(pre_execute_module_cb_holder); let format_js_error_fn_holder = - FormatJsErrorFnHolder(format_js_error_fn.clone()); + FormatJsErrorFnHolder(options.format_js_error_fn); state.put::<FormatJsErrorFnHolder>(format_js_error_fn_holder); } ); diff --git a/runtime/web_worker.rs b/runtime/web_worker.rs index a78e7078b..1a8d02a1d 100644 --- a/runtime/web_worker.rs +++ b/runtime/web_worker.rs @@ -369,15 +369,15 @@ impl WebWorker { mut options: WebWorkerOptions, ) -> (Self, SendableWebWorkerHandle) { deno_core::extension!(deno_permissions_web_worker, - config = { + options = { permissions: PermissionsContainer, unstable: bool, enable_testing_features: bool, }, - state = |state, permissions, unstable, enable_testing_features| { - state.put::<PermissionsContainer>(permissions); - state.put(ops::UnstableChecker { unstable }); - state.put(ops::TestingFeaturesEnabled(enable_testing_features)); + state = |state, options| { + state.put::<PermissionsContainer>(options.permissions); + state.put(ops::UnstableChecker { unstable: options.unstable }); + state.put(ops::TestingFeaturesEnabled(options.enable_testing_features)); }, ); @@ -432,7 +432,7 @@ impl WebWorker { deno_tls::deno_tls::init_ops(), deno_napi::deno_napi::init_ops::<PermissionsContainer>(), deno_http::deno_http::init_ops(), - deno_io::deno_io::init_ops(Rc::new(RefCell::new(Some(options.stdio)))), + deno_io::deno_io::init_ops(Some(options.stdio)), deno_fs::deno_fs::init_ops::<PermissionsContainer>(unstable), deno_flash::deno_flash::init_ops::<PermissionsContainer>(unstable), deno_node::deno_node_loading::init_ops::<PermissionsContainer>( diff --git a/runtime/worker.rs b/runtime/worker.rs index 8a7f5711d..ed3478ff0 100644 --- a/runtime/worker.rs +++ b/runtime/worker.rs @@ -1,6 +1,5 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -use std::cell::RefCell; use std::pin::Pin; use std::rc::Rc; use std::sync::atomic::AtomicI32; @@ -189,15 +188,15 @@ impl MainWorker { mut options: WorkerOptions, ) -> Self { deno_core::extension!(deno_permissions_worker, - config = { + options = { permissions: PermissionsContainer, unstable: bool, enable_testing_features: bool, }, - state = |state, permissions, unstable, enable_testing_features| { - state.put::<PermissionsContainer>(permissions); - state.put(ops::UnstableChecker { unstable }); - state.put(ops::TestingFeaturesEnabled(enable_testing_features)); + state = |state, options| { + state.put::<PermissionsContainer>(options.permissions); + state.put(ops::UnstableChecker { unstable: options.unstable }); + state.put(ops::TestingFeaturesEnabled(options.enable_testing_features)); }, ); @@ -255,7 +254,7 @@ impl MainWorker { deno_tls::deno_tls::init_ops(), deno_napi::deno_napi::init_ops::<PermissionsContainer>(), deno_http::deno_http::init_ops(), - deno_io::deno_io::init_ops(Rc::new(RefCell::new(Some(options.stdio)))), + deno_io::deno_io::init_ops(Some(options.stdio)), deno_fs::deno_fs::init_ops::<PermissionsContainer>(unstable), deno_flash::deno_flash::init_ops::<PermissionsContainer>(unstable), deno_node::deno_node_loading::init_ops::<PermissionsContainer>( |