summaryrefslogtreecommitdiff
path: root/core/snapshot_util.rs
diff options
context:
space:
mode:
authorBartek Iwańczuk <biwanczuk@gmail.com>2023-06-14 00:36:16 +0200
committerGitHub <noreply@github.com>2023-06-13 22:36:16 +0000
commit60bf79c18410fd332b6b9b7c222e6d3d62bfe3f8 (patch)
tree070934eb82d906ee341d1ad4d1390f0b75860529 /core/snapshot_util.rs
parent82dd90f98d6817caadcb9b6bd81aba80b2ee848d (diff)
Revert "refactor(core): cleanup feature flags for js source inclusion… (#19490)
… (#19463)" This reverts commit ceb03cfb037cf7024a5048b17b508ddda59cfa05. This is being reverted because it causes 3.5Mb increase in the binary size, due to runtime JS code being included in the binary, even though it's already snapshotted. CC @nayeemrmn
Diffstat (limited to 'core/snapshot_util.rs')
-rw-r--r--core/snapshot_util.rs30
1 files changed, 29 insertions, 1 deletions
diff --git a/core/snapshot_util.rs b/core/snapshot_util.rs
index 200a81d15..88c273147 100644
--- a/core/snapshot_util.rs
+++ b/core/snapshot_util.rs
@@ -22,7 +22,16 @@ pub struct CreateSnapshotOptions {
pub snapshot_module_load_cb: Option<ExtModuleLoaderCb>,
}
-pub fn create_snapshot(create_snapshot_options: CreateSnapshotOptions) {
+pub struct CreateSnapshotOutput {
+ /// Any files marked as LoadedFromFsDuringSnapshot are collected here and should be
+ /// printed as 'cargo:rerun-if-changed' lines from your build script.
+ pub files_loaded_during_snapshot: Vec<PathBuf>,
+}
+
+#[must_use = "The files listed by create_snapshot should be printed as 'cargo:rerun-if-changed' lines"]
+pub fn create_snapshot(
+ create_snapshot_options: CreateSnapshotOptions,
+) -> CreateSnapshotOutput {
let mut mark = Instant::now();
let js_runtime = JsRuntimeForSnapshot::new(
@@ -42,6 +51,22 @@ pub fn create_snapshot(create_snapshot_options: CreateSnapshotOptions) {
);
mark = Instant::now();
+ let mut files_loaded_during_snapshot = vec![];
+ for source in js_runtime
+ .extensions()
+ .iter()
+ .flat_map(|e| vec![e.get_esm_sources(), e.get_js_sources()])
+ .flatten()
+ .flatten()
+ {
+ use crate::ExtensionFileSourceCode;
+ if let ExtensionFileSourceCode::LoadedFromFsDuringSnapshot(path) =
+ &source.code
+ {
+ files_loaded_during_snapshot.push(path.clone());
+ }
+ }
+
let snapshot = js_runtime.snapshot();
let snapshot_slice: &[u8] = &snapshot;
println!(
@@ -87,6 +112,9 @@ pub fn create_snapshot(create_snapshot_options: CreateSnapshotOptions) {
Instant::now().saturating_duration_since(mark),
create_snapshot_options.snapshot_path.display(),
);
+ CreateSnapshotOutput {
+ files_loaded_during_snapshot,
+ }
}
pub type FilterFn = Box<dyn Fn(&PathBuf) -> bool>;