diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2023-03-18 07:51:21 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-18 12:51:21 +0100 |
commit | 4b6305f4f25fc76f974bbdcc9cdb139d5ab8f5f4 (patch) | |
tree | 881e33653a99f51a29b4174362c5d19967600950 /cli | |
parent | 9bfa8dc90c5d1cf78abd9ee704295bc0bb2b643c (diff) |
perf(core): preserve ops between snapshots (#18080)
This commit changes the build process in a way that preserves already
registered ops in the snapshot. This allows us to skip creating hundreds of
"v8::String" on each startup, but sadly there is still some op registration
going on startup (however we're registering 49 ops instead of >200 ops).
This situation could be further improved, by moving some of the ops
from "runtime/" to a separate extension crates.
---------
Co-authored-by: Divy Srivastava <dj.srivastava23@gmail.com>
Diffstat (limited to 'cli')
-rw-r--r-- | cli/build.rs | 3 | ||||
-rw-r--r-- | cli/lsp/tsc.rs | 3 | ||||
-rw-r--r-- | cli/ops/bench.rs | 3 | ||||
-rw-r--r-- | cli/ops/mod.rs | 3 | ||||
-rw-r--r-- | cli/ops/testing.rs | 3 | ||||
-rw-r--r-- | cli/tsc/mod.rs | 11 |
6 files changed, 23 insertions, 3 deletions
diff --git a/cli/build.rs b/cli/build.rs index 9068723d4..d94fa7deb 100644 --- a/cli/build.rs +++ b/cli/build.rs @@ -5,7 +5,6 @@ use std::path::PathBuf; use deno_core::snapshot_util::*; use deno_core::Extension; -use deno_core::ExtensionBuilder; use deno_core::ExtensionFileSource; use deno_core::ExtensionFileSourceCode; use deno_runtime::deno_cache::SqliteBackedCache; @@ -318,7 +317,7 @@ deno_core::extension!( dir "js", "40_testing.js" ], - customizer = |ext: &mut ExtensionBuilder| { + customizer = |ext: &mut deno_core::ExtensionBuilder| { ext.esm(vec![ExtensionFileSource { specifier: "runtime/js/99_main.js".to_string(), code: ExtensionFileSourceCode::LoadedFromFsDuringSnapshot( diff --git a/cli/lsp/tsc.rs b/cli/lsp/tsc.rs index 91eb6e24b..c8d8103b9 100644 --- a/cli/lsp/tsc.rs +++ b/cli/lsp/tsc.rs @@ -2843,6 +2843,9 @@ deno_core::extension!(deno_tsc, options.performance, )); }, + customizer = |ext: &mut deno_core::ExtensionBuilder| { + ext.force_op_registration(); + }, ); /// Instruct a language server runtime to start the language server and provide diff --git a/cli/ops/bench.rs b/cli/ops/bench.rs index 6fa9edee8..86498cd7c 100644 --- a/cli/ops/bench.rs +++ b/cli/ops/bench.rs @@ -38,6 +38,9 @@ deno_core::extension!(deno_bench, state.put(options.sender); state.put(options.filter); }, + customizer = |ext: &mut deno_core::ExtensionBuilder| { + ext.force_op_registration(); + }, ); #[derive(Clone)] diff --git a/cli/ops/mod.rs b/cli/ops/mod.rs index c12409514..4d5595e09 100644 --- a/cli/ops/mod.rs +++ b/cli/ops/mod.rs @@ -21,6 +21,9 @@ deno_core::extension!(deno_cli, state = |state, options| { state.put(options.ps); }, + customizer = |ext: &mut deno_core::ExtensionBuilder| { + ext.force_op_registration(); + }, ); #[op] diff --git a/cli/ops/testing.rs b/cli/ops/testing.rs index 0849f1c7a..8b5c95fea 100644 --- a/cli/ops/testing.rs +++ b/cli/ops/testing.rs @@ -44,6 +44,9 @@ deno_core::extension!(deno_test, state.put(options.fail_fast_tracker); state.put(options.filter); }, + customizer = |ext: &mut deno_core::ExtensionBuilder| { + ext.force_op_registration(); + }, ); #[derive(Clone)] diff --git a/cli/tsc/mod.rs b/cli/tsc/mod.rs index 45589780f..48ab131fe 100644 --- a/cli/tsc/mod.rs +++ b/cli/tsc/mod.rs @@ -114,7 +114,13 @@ pub fn get_types_declaration_file_text(unstable: bool) -> String { } fn get_asset_texts_from_new_runtime() -> Result<Vec<AssetText>, AnyError> { - deno_core::extension!(deno_cli_tsc, ops_fn = deno_ops,); + deno_core::extension!( + deno_cli_tsc, + ops_fn = deno_ops, + customizer = |ext: &mut deno_core::ExtensionBuilder| { + ext.force_op_registration(); + }, + ); // the assets are stored within the typescript isolate, so take them out of there let mut runtime = JsRuntime::new(RuntimeOptions { @@ -846,6 +852,9 @@ pub fn exec(request: Request) -> Result<Response, AnyError> { .unwrap(), )); }, + customizer = |ext: &mut deno_core::ExtensionBuilder| { + ext.force_op_registration(); + }, ); let startup_source = "globalThis.startup({ legacyFlag: false })"; |