From 4b6305f4f25fc76f974bbdcc9cdb139d5ab8f5f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Sat, 18 Mar 2023 07:51:21 -0400 Subject: 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 --- cli/build.rs | 3 +-- cli/lsp/tsc.rs | 3 +++ cli/ops/bench.rs | 3 +++ cli/ops/mod.rs | 3 +++ cli/ops/testing.rs | 3 +++ cli/tsc/mod.rs | 11 ++++++++++- 6 files changed, 23 insertions(+), 3 deletions(-) (limited to 'cli') 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, 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 { .unwrap(), )); }, + customizer = |ext: &mut deno_core::ExtensionBuilder| { + ext.force_op_registration(); + }, ); let startup_source = "globalThis.startup({ legacyFlag: false })"; -- cgit v1.2.3