0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-02-01 12:16:11 -05:00

feat(compile): show remote modules and metadata size when compiling (#27415)

Co-authored-by: David Sherret <dsherret@gmail.com>
This commit is contained in:
HasanAlrimawi 2025-01-23 18:55:50 +02:00 committed by GitHub
parent be703b7878
commit b70aba6bae
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 59 additions and 14 deletions

View file

@ -1,6 +1,7 @@
// Copyright 2018-2025 the Deno authors. MIT license.
use std::borrow::Cow;
use std::cell::Cell;
use std::collections::HashMap;
use std::collections::VecDeque;
use std::env;
@ -699,7 +700,7 @@ impl<'a> DenoCompileBinaryWriter<'a> {
vfs_case_sensitivity: vfs.case_sensitivity,
};
let data_section_bytes = serialize_binary_data_section(
let (data_section_bytes, section_sizes) = serialize_binary_data_section(
&metadata,
npm_snapshot.map(|s| s.into_serialized()),
&specifier_store.for_serialization(&root_dir_url),
@ -709,6 +710,22 @@ impl<'a> DenoCompileBinaryWriter<'a> {
)
.context("Serializing binary data section.")?;
log::info!(
"\n{} {}",
crate::colors::bold("Files:"),
crate::util::display::human_size(section_sizes.vfs as f64)
);
log::info!(
"{} {}",
crate::colors::bold("Metadata:"),
crate::util::display::human_size(section_sizes.metadata as f64)
);
log::info!(
"{} {}\n",
crate::colors::bold("Remote modules:"),
crate::util::display::human_size(section_sizes.remote_modules as f64)
);
write_binary_bytes(writer, original_bin, data_section_bytes, compile_flags)
.context("Writing binary bytes")
}
@ -912,6 +929,12 @@ fn write_binary_bytes(
Ok(())
}
struct BinaryDataSectionSizes {
metadata: usize,
remote_modules: usize,
vfs: usize,
}
/// Binary format:
/// * d3n0l4nd
/// * <metadata_len><metadata>
@ -930,12 +953,16 @@ fn serialize_binary_data_section(
redirects: &SpecifierDataStore<SpecifierId>,
remote_modules: &SpecifierDataStore<RemoteModuleEntry<'_>>,
vfs: &BuiltVfs,
) -> Result<Vec<u8>, AnyError> {
) -> Result<(Vec<u8>, BinaryDataSectionSizes), AnyError> {
let metadata = serde_json::to_string(metadata)?;
let npm_snapshot =
npm_snapshot.map(serialize_npm_snapshot).unwrap_or_default();
let serialized_vfs = serde_json::to_string(&vfs.entries)?;
let remote_modules_len = Cell::new(0);
let metadata_len = Cell::new(0);
let vfs_len = Cell::new(0);
let bytes = capacity_builder::BytesBuilder::build(|builder| {
builder.append(MAGIC_BYTES);
// 1. Metadata
@ -948,12 +975,14 @@ fn serialize_binary_data_section(
builder.append_le(npm_snapshot.len() as u64);
builder.append(&npm_snapshot);
}
metadata_len.set(builder.len());
// 3. Specifiers
builder.append(specifiers);
// 4. Redirects
redirects.serialize(builder);
// 5. Remote modules
remote_modules.serialize(builder);
remote_modules_len.set(builder.len() - metadata_len.get());
// 6. VFS
{
builder.append_le(serialized_vfs.len() as u64);
@ -964,13 +993,21 @@ fn serialize_binary_data_section(
builder.append(file);
}
}
vfs_len.set(builder.len() - remote_modules_len.get());
// write the magic bytes at the end so we can use it
// to make sure we've deserialized correctly
builder.append(MAGIC_BYTES);
})?;
Ok(bytes)
Ok((
bytes,
BinaryDataSectionSizes {
metadata: metadata_len.get(),
remote_modules: remote_modules_len.get(),
vfs: vfs_len.get(),
},
))
}
fn serialize_npm_snapshot(

View file

@ -30,11 +30,7 @@ pub fn output_vfs(vfs: &BuiltVfs, executable_name: &str) {
let display_tree = vfs_as_display_tree(vfs, executable_name);
display_tree.print(&mut text).unwrap(); // unwrap ok because it's writing to a string
log::info!("\n{}\n", deno_terminal::colors::bold("Embedded Files"));
log::info!("{}\n", text.trim());
log::info!(
"Size: {}\n",
human_size(vfs.files.iter().map(|f| f.len() as f64).sum())
);
log::info!("{}", text.trim());
}
fn vfs_as_display_tree(

View file

@ -6,5 +6,7 @@ main[WILDLINE]
├── file.txt ([WILDLINE])
└── main.js ([WILDLINE])
Size: [WILDLINE]
Files: [WILDLINE]
Metadata: [WILDLINE]
Remote modules: [WILDLINE]

View file

@ -8,5 +8,7 @@ Embedded Files
out[WILDLINE]
└── main.ts ([WILDLINE])
Size: [WILDLINE]
Files: [WILDLINE]
Metadata: [WILDLINE]
Remote modules: [WILDLINE]

View file

@ -45,5 +45,7 @@ main[WILDLINE]
│ └── yargs-parser/18.1.3/* ([WILDLINE])
└── main.ts ([WILDLINE])
Size: [WILDLINE]
Files: [WILDLINE]
Metadata: [WILDLINE]
Remote modules: [WILDLINE]

View file

@ -7,5 +7,7 @@ main[WILDLINE]
├── link.js --> index.js
└── setup.js ([WILDLINE])
Size: [WILDLINE]
Files: [WILDLINE]
Metadata: [WILDLINE]
Remote modules: [WILDLINE]

View file

@ -6,5 +6,7 @@ main[WILDLINE]
├── main.ts ([WILDLINE])
└── node_modules/* ([WILDLINE])
Size: [WILDLINE]
Files: [WILDLINE]
Metadata: [WILDLINE]
Remote modules: [WILDLINE]

View file

@ -13,5 +13,7 @@ bin[WILDLINE]
│ └── node_modules/* ([WILDLINE])
└── some_folder/* ([WILDLINE])
Size: [WILDLINE]
Files: [WILDLINE]
Metadata: [WILDLINE]
Remote modules: [WILDLINE]