From 5ec478b5fa6261e2b2d3c8daed3cba9e780730c7 Mon Sep 17 00:00:00 2001 From: Aaron O'Mullan Date: Fri, 30 Apr 2021 16:38:35 +0200 Subject: [PATCH] refactor(core): initialize extensions in runtime constructor (#10421) This ensures that provided extensions are all correctly setup and ready to use once the JsRuntime constructor returns Note: this will also initialize ops for to-be-snapshotted runtimes --- core/runtime.rs | 13 +++++++++---- op_crates/url/benches/url_ops.rs | 3 --- runtime/build.rs | 2 -- runtime/web_worker.rs | 2 -- runtime/worker.rs | 2 -- 5 files changed, 9 insertions(+), 13 deletions(-) diff --git a/core/runtime.rs b/core/runtime.rs index 4cfcad0ba4..7573dfb676 100644 --- a/core/runtime.rs +++ b/core/runtime.rs @@ -313,9 +313,16 @@ impl JsRuntime { extensions: options.extensions, }; + // TODO(@AaronO): diff extensions inited in snapshot and those provided + // for now we assume that snapshot and extensions always match if !has_startup_snapshot { js_runtime.js_init(); + js_runtime.init_extension_js().unwrap(); } + // Init extension ops + js_runtime.init_extension_ops().unwrap(); + js_runtime.sync_ops_cache(); + // Init async ops callback js_runtime.init_recv_cb(); js_runtime @@ -366,8 +373,7 @@ impl JsRuntime { } /// Initializes JS of provided Extensions - // NOTE: this will probably change when streamlining snapshot flow - pub fn init_extension_js(&mut self) -> Result<(), AnyError> { + fn init_extension_js(&mut self) -> Result<(), AnyError> { // Take extensions to avoid double-borrow let mut extensions: Vec = std::mem::take(&mut self.extensions); for m in extensions.iter_mut() { @@ -384,8 +390,7 @@ impl JsRuntime { } /// Initializes ops of provided Extensions - // NOTE: this will probably change when streamlining snapshot flow - pub fn init_extension_ops(&mut self) -> Result<(), AnyError> { + fn init_extension_ops(&mut self) -> Result<(), AnyError> { let op_state = self.op_state(); // Take extensions to avoid double-borrow let mut extensions: Vec = std::mem::take(&mut self.extensions); diff --git a/op_crates/url/benches/url_ops.rs b/op_crates/url/benches/url_ops.rs index 18b2f300e2..8b3cf27055 100644 --- a/op_crates/url/benches/url_ops.rs +++ b/op_crates/url/benches/url_ops.rs @@ -10,9 +10,6 @@ fn create_js_runtime() -> JsRuntime { ..Default::default() }); - runtime.init_extension_js().unwrap(); - runtime.init_extension_ops().unwrap(); - runtime .execute("setup", "const { URL } = globalThis.__bootstrap.url;") .unwrap(); diff --git a/runtime/build.rs b/runtime/build.rs index 591ebaab77..b6a9da582b 100644 --- a/runtime/build.rs +++ b/runtime/build.rs @@ -14,8 +14,6 @@ fn create_snapshot( snapshot_path: &Path, files: Vec, ) { - js_runtime.init_extension_js().unwrap(); - // TODO(nayeemrmn): https://github.com/rust-lang/cargo/issues/3946 to get the // workspace root. let display_root = Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap(); diff --git a/runtime/web_worker.rs b/runtime/web_worker.rs index 5feb0212ce..7f0a4885f8 100644 --- a/runtime/web_worker.rs +++ b/runtime/web_worker.rs @@ -253,8 +253,6 @@ impl WebWorker { }); } - js_runtime.init_extension_ops().unwrap(); - ops::web_worker::init(js_runtime, sender.clone(), handle); ops::runtime::init(js_runtime, main_module); ops::worker_host::init( diff --git a/runtime/worker.rs b/runtime/worker.rs index fddaf1f01d..c2e241169b 100644 --- a/runtime/worker.rs +++ b/runtime/worker.rs @@ -140,8 +140,6 @@ impl MainWorker { }); } - js_runtime.init_extension_ops().unwrap(); - ops::runtime::init(js_runtime, main_module); ops::worker_host::init( js_runtime,