summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2023-03-15 12:44:22 +0530
committerGitHub <noreply@github.com>2023-03-15 07:14:22 +0000
commit51649272bd388f14685a47cfe805bd9cdb602240 (patch)
tree86be1cd73d9c7a0d095d5ca82fc4fa756fe45b65
parent6f9c0a9b7a4afd0d73ab312347427e445c67f6c9 (diff)
perf: do not depend on iana-time-zone (#18088)
Chrono's `clock` feature pulls in `iana-time-zone` which links to macOS core_foundation. This PR itself is not enough to get rid of CoreFoundation. Removal depends on getting rid of security framework, see #18071
-rw-r--r--Cargo.lock85
-rw-r--r--cli/Cargo.toml2
-rw-r--r--cli/bench/main.rs5
-rw-r--r--cli/tools/upgrade.rs5
-rw-r--r--cli/util/mod.rs1
-rw-r--r--cli/util/time.rs22
6 files changed, 30 insertions, 90 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 90ec21ac7..6c9d8d2d3 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -442,10 +442,8 @@ version = "0.4.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1"
dependencies = [
- "iana-time-zone",
"num-integer",
"num-traits",
- "winapi",
]
[[package]]
@@ -700,50 +698,6 @@ dependencies = [
]
[[package]]
-name = "cxx"
-version = "1.0.89"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc831ee6a32dd495436e317595e639a587aa9907bef96fe6e6abc290ab6204e9"
-dependencies = [
- "cc",
- "cxxbridge-flags",
- "cxxbridge-macro",
- "link-cplusplus",
-]
-
-[[package]]
-name = "cxx-build"
-version = "1.0.89"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "94331d54f1b1a8895cd81049f7eaaaef9d05a7dcb4d1fd08bf3ff0806246789d"
-dependencies = [
- "cc",
- "codespan-reporting",
- "once_cell",
- "proc-macro2 1.0.51",
- "quote 1.0.23",
- "scratch",
- "syn 1.0.107",
-]
-
-[[package]]
-name = "cxxbridge-flags"
-version = "1.0.89"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48dcd35ba14ca9b40d6e4b4b39961f23d835dbb8eed74565ded361d93e1feb8a"
-
-[[package]]
-name = "cxxbridge-macro"
-version = "1.0.89"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81bbeb29798b407ccd82a3324ade1a7286e0d29851475990b612670f6f5124d2"
-dependencies = [
- "proc-macro2 1.0.51",
- "quote 1.0.23",
- "syn 1.0.107",
-]
-
-[[package]]
name = "d3d12"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2383,30 +2337,6 @@ dependencies = [
]
[[package]]
-name = "iana-time-zone"
-version = "0.1.53"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
-dependencies = [
- "android_system_properties",
- "core-foundation-sys",
- "iana-time-zone-haiku",
- "js-sys",
- "wasm-bindgen",
- "winapi",
-]
-
-[[package]]
-name = "iana-time-zone-haiku"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
-dependencies = [
- "cxx",
- "cxx-build",
-]
-
-[[package]]
name = "ident_case"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2785,15 +2715,6 @@ dependencies = [
]
[[package]]
-name = "link-cplusplus"
-version = "1.0.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
-dependencies = [
- "cc",
-]
-
-[[package]]
name = "linked-hash-map"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4035,12 +3956,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
-name = "scratch"
-version = "1.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2"
-
-[[package]]
name = "sct"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/cli/Cargo.toml b/cli/Cargo.toml
index e99596bcf..04642f828 100644
--- a/cli/Cargo.toml
+++ b/cli/Cargo.toml
@@ -58,7 +58,7 @@ atty.workspace = true
base32 = "=0.4.0"
base64.workspace = true
cache_control.workspace = true
-chrono = { version = "=0.4.22", default-features = false, features = ["clock"] }
+chrono = { version = "=0.4.22", default-features = false, features = ["std"] }
clap = "=3.1.12"
clap_complete = "=3.1.2"
clap_complete_fig = "=3.1.5"
diff --git a/cli/bench/main.rs b/cli/bench/main.rs
index 3bf73e78d..a16c65ed4 100644
--- a/cli/bench/main.rs
+++ b/cli/bench/main.rs
@@ -13,6 +13,8 @@ use std::process::Command;
use std::process::Stdio;
use std::time::SystemTime;
+include!("../util/time.rs");
+
mod http;
mod lsp;
@@ -436,8 +438,7 @@ async fn main() -> Result<()> {
env::set_current_dir(test_util::root_path())?;
let mut new_data = BenchResult {
- created_at: chrono::Utc::now()
- .to_rfc3339_opts(chrono::SecondsFormat::Secs, true),
+ created_at: utc_now().to_rfc3339_opts(chrono::SecondsFormat::Secs, true),
sha1: test_util::run_collect(
&["git", "rev-parse", "HEAD"],
None,
diff --git a/cli/tools/upgrade.rs b/cli/tools/upgrade.rs
index b56be5c57..039e00b00 100644
--- a/cli/tools/upgrade.rs
+++ b/cli/tools/upgrade.rs
@@ -9,6 +9,7 @@ use crate::http_util::HttpClient;
use crate::proc_state::ProcState;
use crate::util::progress_bar::ProgressBar;
use crate::util::progress_bar::ProgressBarStyle;
+use crate::util::time;
use crate::version;
use deno_core::anyhow::bail;
@@ -60,7 +61,7 @@ impl RealUpdateCheckerEnvironment {
http_client,
cache_file_path,
// cache the current time
- current_time: chrono::Utc::now(),
+ current_time: time::utc_now(),
}
}
}
@@ -702,7 +703,7 @@ mod test {
file_text: Default::default(),
current_version: Default::default(),
latest_version: Arc::new(Mutex::new(Ok("".to_string()))),
- time: Arc::new(Mutex::new(chrono::Utc::now())),
+ time: Arc::new(Mutex::new(crate::util::time::utc_now())),
}
}
diff --git a/cli/util/mod.rs b/cli/util/mod.rs
index 515bc64e9..c3133cc10 100644
--- a/cli/util/mod.rs
+++ b/cli/util/mod.rs
@@ -12,6 +12,7 @@ pub mod logger;
pub mod path;
pub mod progress_bar;
pub mod text_encoding;
+pub mod time;
pub mod unix;
pub mod v8;
pub mod windows;
diff --git a/cli/util/time.rs b/cli/util/time.rs
new file mode 100644
index 000000000..9c5b48b57
--- /dev/null
+++ b/cli/util/time.rs
@@ -0,0 +1,22 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+
+/// Identical to chrono::Utc::now() but without the system "clock"
+/// feature flag.
+///
+/// The "clock" feature flag pulls in the "iana-time-zone" crate
+/// which links to macOS's "CoreFoundation" framework which increases
+/// startup time for the CLI.
+///
+/// You can simply include this file in your project using
+/// `include!("path/to/cli/util/time.rs"))` and use it
+/// as a drop-in replacement for chrono::Utc::now().
+pub fn utc_now() -> chrono::DateTime<chrono::Utc> {
+ let now = std::time::SystemTime::now()
+ .duration_since(std::time::UNIX_EPOCH)
+ .expect("system time before Unix epoch");
+ let naive = chrono::NaiveDateTime::from_timestamp(
+ now.as_secs() as i64,
+ now.subsec_nanos(),
+ );
+ chrono::DateTime::from_utc(naive, chrono::Utc)
+}