mirror of
https://github.com/denoland/deno.git
synced 2024-12-18 13:22:55 -05:00
chore: reduce allocations in a few places (#27288)
Probably doesn't have much impact. I didn't measure any of these, but reducing allocations should always be good.
This commit is contained in:
parent
1c0f236923
commit
d99b2d6f7d
7 changed files with 54 additions and 26 deletions
14
Cargo.lock
generated
14
Cargo.lock
generated
|
@ -668,6 +668,15 @@ version = "0.2.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1bf2a5fb3207c12b5d208ebc145f967fea5cac41a021c37417ccc31ba40f39ee"
|
checksum = "1bf2a5fb3207c12b5d208ebc145f967fea5cac41a021c37417ccc31ba40f39ee"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "capacity_builder"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a2c0f637033edd76ceb881faaee372868a383f0ed7a4a59e8fdf90db2502f3d3"
|
||||||
|
dependencies = [
|
||||||
|
"itoa",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "caseless"
|
name = "caseless"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
|
@ -2088,6 +2097,7 @@ dependencies = [
|
||||||
name = "deno_permissions"
|
name = "deno_permissions"
|
||||||
version = "0.41.0"
|
version = "0.41.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"capacity_builder",
|
||||||
"deno_core",
|
"deno_core",
|
||||||
"deno_path_util",
|
"deno_path_util",
|
||||||
"deno_terminal 0.2.0",
|
"deno_terminal 0.2.0",
|
||||||
|
@ -4375,9 +4385,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itoa"
|
name = "itoa"
|
||||||
version = "1.0.11"
|
version = "1.0.14"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
|
checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "jni-sys"
|
name = "jni-sys"
|
||||||
|
|
|
@ -108,6 +108,7 @@ boxed_error = "0.2.2"
|
||||||
brotli = "6.0.0"
|
brotli = "6.0.0"
|
||||||
bytes = "1.4.0"
|
bytes = "1.4.0"
|
||||||
cache_control = "=0.2.0"
|
cache_control = "=0.2.0"
|
||||||
|
capacity_builder = "0.1.0"
|
||||||
cbc = { version = "=0.1.2", features = ["alloc"] }
|
cbc = { version = "=0.1.2", features = ["alloc"] }
|
||||||
# Note: Do not use the "clock" feature of chrono, as it links us to CoreFoundation on macOS.
|
# Note: Do not use the "clock" feature of chrono, as it links us to CoreFoundation on macOS.
|
||||||
# Instead use util::time::utc_now()
|
# Instead use util::time::utc_now()
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
||||||
|
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
|
use std::fmt::Write;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
@ -58,8 +59,8 @@ pub fn get_atomic_file_path(file_path: &Path) -> PathBuf {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn gen_rand_path_component() -> String {
|
fn gen_rand_path_component() -> String {
|
||||||
(0..4).fold(String::new(), |mut output, _| {
|
(0..4).fold(String::with_capacity(8), |mut output, _| {
|
||||||
output.push_str(&format!("{:02x}", rand::random::<u8>()));
|
write!(&mut output, "{:02x}", rand::random::<u8>()).unwrap();
|
||||||
output
|
output
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
||||||
|
|
||||||
|
use std::fmt::Write;
|
||||||
use std::sync::atomic::AtomicUsize;
|
use std::sync::atomic::AtomicUsize;
|
||||||
use std::sync::atomic::Ordering;
|
use std::sync::atomic::Ordering;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
@ -81,12 +82,14 @@ impl ProgressBarRenderer for BarProgressBarRenderer {
|
||||||
let elapsed_text = get_elapsed_text(data.duration);
|
let elapsed_text = get_elapsed_text(data.duration);
|
||||||
let mut text = String::new();
|
let mut text = String::new();
|
||||||
if !display_entry.message.is_empty() {
|
if !display_entry.message.is_empty() {
|
||||||
text.push_str(&format!(
|
writeln!(
|
||||||
"{} {}{}\n",
|
&mut text,
|
||||||
|
"{} {}{}",
|
||||||
colors::green("Download"),
|
colors::green("Download"),
|
||||||
display_entry.message,
|
display_entry.message,
|
||||||
bytes_text,
|
bytes_text,
|
||||||
));
|
)
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
text.push_str(&elapsed_text);
|
text.push_str(&elapsed_text);
|
||||||
let max_width = (data.terminal_width as i32 - 5).clamp(10, 75) as usize;
|
let max_width = (data.terminal_width as i32 - 5).clamp(10, 75) as usize;
|
||||||
|
|
|
@ -219,8 +219,9 @@ fn get_atomic_dir_path(file_path: &Path) -> PathBuf {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn gen_rand_path_component() -> String {
|
fn gen_rand_path_component() -> String {
|
||||||
(0..4).fold(String::new(), |mut output, _| {
|
use std::fmt::Write;
|
||||||
output.push_str(&format!("{:02x}", rand::random::<u8>()));
|
(0..4).fold(String::with_capacity(8), |mut output, _| {
|
||||||
|
write!(&mut output, "{:02x}", rand::random::<u8>()).unwrap();
|
||||||
output
|
output
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ name = "deno_permissions"
|
||||||
path = "lib.rs"
|
path = "lib.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
capacity_builder.workspace = true
|
||||||
deno_core.workspace = true
|
deno_core.workspace = true
|
||||||
deno_path_util.workspace = true
|
deno_path_util.workspace = true
|
||||||
deno_terminal.workspace = true
|
deno_terminal.workspace = true
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
||||||
|
|
||||||
|
use capacity_builder::StringBuilder;
|
||||||
use deno_core::parking_lot::Mutex;
|
use deno_core::parking_lot::Mutex;
|
||||||
use deno_core::serde::de;
|
use deno_core::serde::de;
|
||||||
use deno_core::serde::Deserialize;
|
use deno_core::serde::Deserialize;
|
||||||
|
@ -179,13 +180,18 @@ impl PermissionState {
|
||||||
(Ok(()), false, false)
|
(Ok(()), false, false)
|
||||||
}
|
}
|
||||||
PermissionState::Prompt if prompt => {
|
PermissionState::Prompt if prompt => {
|
||||||
let msg = format!(
|
let msg = {
|
||||||
"{} access{}",
|
let info = info();
|
||||||
name,
|
StringBuilder::build(|builder| {
|
||||||
info()
|
builder.append(name);
|
||||||
.map(|info| { format!(" to {info}") })
|
builder.append(" access");
|
||||||
.unwrap_or_default(),
|
if let Some(info) = &info {
|
||||||
);
|
builder.append(" to ");
|
||||||
|
builder.append(info);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.unwrap()
|
||||||
|
};
|
||||||
match permission_prompt(&msg, name, api_name, true) {
|
match permission_prompt(&msg, name, api_name, true) {
|
||||||
PromptResponse::Allow => {
|
PromptResponse::Allow => {
|
||||||
Self::log_perm_access(name, info);
|
Self::log_perm_access(name, info);
|
||||||
|
@ -344,11 +350,11 @@ pub trait QueryDescriptor: Debug {
|
||||||
fn overlaps_deny(&self, other: &Self::DenyDesc) -> bool;
|
fn overlaps_deny(&self, other: &Self::DenyDesc) -> bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn format_display_name(display_name: Cow<str>) -> String {
|
fn format_display_name(display_name: Cow<str>) -> Cow<str> {
|
||||||
if display_name.starts_with('<') && display_name.ends_with('>') {
|
if display_name.starts_with('<') && display_name.ends_with('>') {
|
||||||
display_name.into_owned()
|
display_name
|
||||||
} else {
|
} else {
|
||||||
format!("\"{}\"", display_name)
|
Cow::Owned(format!("\"{}\"", display_name))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -424,7 +430,7 @@ impl<TQuery: QueryDescriptor> UnaryPermission<TQuery> {
|
||||||
.check2(
|
.check2(
|
||||||
TQuery::flag_name(),
|
TQuery::flag_name(),
|
||||||
api_name,
|
api_name,
|
||||||
|| desc.map(|d| format_display_name(d.display_name())),
|
|| desc.map(|d| format_display_name(d.display_name()).into_owned()),
|
||||||
self.prompt,
|
self.prompt,
|
||||||
);
|
);
|
||||||
if prompted {
|
if prompted {
|
||||||
|
@ -487,12 +493,17 @@ impl<TQuery: QueryDescriptor> UnaryPermission<TQuery> {
|
||||||
if !self.prompt {
|
if !self.prompt {
|
||||||
return PermissionState::Denied;
|
return PermissionState::Denied;
|
||||||
}
|
}
|
||||||
let mut message = String::with_capacity(40);
|
let maybe_formatted_display_name =
|
||||||
message.push_str(&format!("{} access", TQuery::flag_name()));
|
desc.map(|d| format_display_name(d.display_name()));
|
||||||
if let Some(desc) = desc {
|
let message = StringBuilder::build(|builder| {
|
||||||
message
|
builder.append(TQuery::flag_name());
|
||||||
.push_str(&format!(" to {}", format_display_name(desc.display_name())));
|
builder.append(" access");
|
||||||
}
|
if let Some(display_name) = &maybe_formatted_display_name {
|
||||||
|
builder.append(" to ");
|
||||||
|
builder.append(display_name)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.unwrap();
|
||||||
match permission_prompt(
|
match permission_prompt(
|
||||||
&message,
|
&message,
|
||||||
TQuery::flag_name(),
|
TQuery::flag_name(),
|
||||||
|
|
Loading…
Reference in a new issue