summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.cargo/config.toml2
-rwxr-xr-x.github/workflows/ci.generate.ts3
-rw-r--r--.github/workflows/ci.yml7
-rw-r--r--Cargo.lock13
-rw-r--r--Cargo.toml1
-rw-r--r--cli/main.rs5
-rw-r--r--runtime/Cargo.toml1
-rw-r--r--runtime/tokio_util.rs49
8 files changed, 73 insertions, 8 deletions
diff --git a/.cargo/config.toml b/.cargo/config.toml
index 10e4b295c..ed50de084 100644
--- a/.cargo/config.toml
+++ b/.cargo/config.toml
@@ -23,4 +23,6 @@ rustflags = [
"clippy::missing_safety_doc",
"-D",
"clippy::undocumented_unsafe_blocks",
+ "--cfg",
+ "tokio_unstable",
]
diff --git a/.github/workflows/ci.generate.ts b/.github/workflows/ci.generate.ts
index 6b1089e03..e6a5b1289 100755
--- a/.github/workflows/ci.generate.ts
+++ b/.github/workflows/ci.generate.ts
@@ -5,7 +5,7 @@ import * as yaml from "https://deno.land/std@0.173.0/encoding/yaml.ts";
// Bump this number when you want to purge the cache.
// Note: the tools/release/01_bump_crate_versions.ts script will update this version
// automatically via regex, so ensure that this line maintains this format.
-const cacheVersion = 37;
+const cacheVersion = 38;
const Runners = (() => {
const ubuntuRunner = "ubuntu-22.04";
@@ -85,6 +85,7 @@ RUSTFLAGS<<__1
-C link-arg=-Wl,--allow-shlib-undefined
-C link-arg=-Wl,--thinlto-cache-dir=$(pwd)/target/release/lto-cache
-C link-arg=-Wl,--thinlto-cache-policy,cache_size_bytes=700m
+ --cfg tokio_unstable
\${{ env.RUSTFLAGS }}
__1
RUSTDOCFLAGS<<__1
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 00660ea6e..e63154417 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -260,6 +260,7 @@ jobs:
-C link-arg=-Wl,--allow-shlib-undefined
-C link-arg=-Wl,--thinlto-cache-dir=$(pwd)/target/release/lto-cache
-C link-arg=-Wl,--thinlto-cache-policy,cache_size_bytes=700m
+ --cfg tokio_unstable
${{ env.RUSTFLAGS }}
__1
RUSTDOCFLAGS<<__1
@@ -298,7 +299,7 @@ jobs:
~/.cargo/registry/index
~/.cargo/registry/cache
~/.cargo/git/db
- key: '37-cargo-home-${{ matrix.os }}-${{ hashFiles(''Cargo.lock'') }}'
+ key: '38-cargo-home-${{ matrix.os }}-${{ hashFiles(''Cargo.lock'') }}'
if: '!(github.event_name == ''pull_request'' && matrix.skip_pr)'
- name: Restore cache build output (PR)
uses: actions/cache/restore@v3
@@ -310,7 +311,7 @@ jobs:
!./target/*/*.zip
!./target/*/*.tar.gz
key: never_saved
- restore-keys: '37-cargo-target-${{ matrix.os }}-${{ matrix.profile }}-${{ matrix.job }}-'
+ restore-keys: '38-cargo-target-${{ matrix.os }}-${{ matrix.profile }}-${{ matrix.job }}-'
- name: Apply and update mtime cache
if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (!startsWith(github.ref, ''refs/tags/''))'
uses: ./.github/mtime_cache
@@ -600,7 +601,7 @@ jobs:
!./target/*/gn_out
!./target/*/*.zip
!./target/*/*.tar.gz
- key: '37-cargo-target-${{ matrix.os }}-${{ matrix.profile }}-${{ matrix.job }}-${{ github.sha }}'
+ key: '38-cargo-target-${{ matrix.os }}-${{ matrix.profile }}-${{ matrix.job }}-${{ github.sha }}'
publish-canary:
name: publish canary
runs-on: ubuntu-22.04
diff --git a/Cargo.lock b/Cargo.lock
index c18e1a503..9593dafa4 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1315,6 +1315,7 @@ dependencies = [
"termcolor",
"test_util",
"tokio",
+ "tokio-metrics",
"uuid",
"winapi",
"winres",
@@ -5250,6 +5251,18 @@ dependencies = [
]
[[package]]
+name = "tokio-metrics"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b60ac6224d622f71d0b80546558eedf8ff6c2d3817517a9d3ed87ce24fccf6a6"
+dependencies = [
+ "futures-util",
+ "pin-project-lite",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
name = "tokio-rustls"
version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/Cargo.toml b/Cargo.toml
index 86b2518ad..47a416d2e 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -135,6 +135,7 @@ tar = "=0.4.38"
tempfile = "3.4.0"
thiserror = "1.0.40"
tokio = { version = "1.28.1", features = ["full"] }
+tokio-metrics = { version = "0.2.2", features = ["rt"] }
tokio-rustls = "0.24.0"
tokio-util = "0.7.4"
tower-lsp = { version = "=0.17.0", features = ["proposed"] }
diff --git a/cli/main.rs b/cli/main.rs
index 73820cb93..27dd4bcd8 100644
--- a/cli/main.rs
+++ b/cli/main.rs
@@ -41,7 +41,7 @@ use deno_core::futures::FutureExt;
use deno_core::task::JoinHandle;
use deno_runtime::colors;
use deno_runtime::fmt_errors::format_js_error;
-use deno_runtime::tokio_util::create_and_run_current_thread;
+use deno_runtime::tokio_util::create_and_run_current_thread_with_maybe_metrics;
use factory::CliFactory;
use std::env;
use std::env::current_exe;
@@ -308,7 +308,8 @@ pub fn main() {
run_subcommand(flags).await
};
- let exit_code = unwrap_or_exit(create_and_run_current_thread(future));
+ let exit_code =
+ unwrap_or_exit(create_and_run_current_thread_with_maybe_metrics(future));
std::process::exit(exit_code);
}
diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml
index 3e7e57141..77571b210 100644
--- a/runtime/Cargo.toml
+++ b/runtime/Cargo.toml
@@ -105,6 +105,7 @@ serde.workspace = true
signal-hook-registry = "1.4.0"
termcolor = "1.1.3"
tokio.workspace = true
+tokio-metrics.workspace = true
uuid.workspace = true
[target.'cfg(windows)'.dependencies]
diff --git a/runtime/tokio_util.rs b/runtime/tokio_util.rs
index 1245a5b8e..204b928f4 100644
--- a/runtime/tokio_util.rs
+++ b/runtime/tokio_util.rs
@@ -3,6 +3,7 @@ use std::fmt::Debug;
use std::str::FromStr;
use deno_core::task::MaskFutureAsSend;
+use tokio_metrics::RuntimeMonitor;
/// Default configuration for tokio. In the future, this method may have different defaults
/// depending on the platform and/or CPU layout.
@@ -47,7 +48,10 @@ pub fn create_basic_runtime() -> tokio::runtime::Runtime {
}
#[inline(always)]
-pub fn create_and_run_current_thread<F, R>(future: F) -> R
+fn create_and_run_current_thread_inner<F, R>(
+ future: F,
+ metrics_enabled: bool,
+) -> R
where
F: std::future::Future<Output = R> + 'static,
R: Send + 'static,
@@ -66,6 +70,47 @@ where
// SAFETY: this this is guaranteed to be running on a current-thread executor
let future = unsafe { MaskFutureAsSend::new(future) };
- let join_handle = rt.spawn(future);
+ let join_handle = if metrics_enabled {
+ rt.spawn(async move {
+ let metrics_interval: u64 = std::env::var("DENO_TOKIO_METRICS_INTERVAL")
+ .ok()
+ .and_then(|val| val.parse().ok())
+ .unwrap_or(1000);
+ let handle = tokio::runtime::Handle::current();
+ let runtime_monitor = RuntimeMonitor::new(&handle);
+ tokio::spawn(async move {
+ for interval in runtime_monitor.intervals() {
+ println!("{:#?}", interval);
+ // wait 500ms
+ tokio::time::sleep(std::time::Duration::from_millis(
+ metrics_interval,
+ ))
+ .await;
+ }
+ });
+ future.await
+ })
+ } else {
+ rt.spawn(future)
+ };
rt.block_on(join_handle).unwrap().into_inner()
}
+
+#[inline(always)]
+pub fn create_and_run_current_thread<F, R>(future: F) -> R
+where
+ F: std::future::Future<Output = R> + 'static,
+ R: Send + 'static,
+{
+ create_and_run_current_thread_inner(future, false)
+}
+
+#[inline(always)]
+pub fn create_and_run_current_thread_with_maybe_metrics<F, R>(future: F) -> R
+where
+ F: std::future::Future<Output = R> + 'static,
+ R: Send + 'static,
+{
+ let metrics_enabled = std::env::var("DENO_TOKIO_METRICS").ok().is_some();
+ create_and_run_current_thread_inner(future, metrics_enabled)
+}