aboutsummaryrefslogtreecommitdiffstats
path: root/components/net/async_runtime.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/net/async_runtime.rs')
-rw-r--r--components/net/async_runtime.rs30
1 files changed, 26 insertions, 4 deletions
diff --git a/components/net/async_runtime.rs b/components/net/async_runtime.rs
index 144f4262835..7d1fb9daeaa 100644
--- a/components/net/async_runtime.rs
+++ b/components/net/async_runtime.rs
@@ -1,10 +1,32 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-
+use std::cmp::Ord;
+use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::{LazyLock, Mutex};
+use std::thread;
-use tokio::runtime::Runtime;
+use tokio::runtime::{Builder, Runtime};
-pub static HANDLE: LazyLock<Mutex<Option<Runtime>>> =
- LazyLock::new(|| Mutex::new(Some(Runtime::new().unwrap())));
+pub static HANDLE: LazyLock<Mutex<Option<Runtime>>> = LazyLock::new(|| {
+ Mutex::new(Some(
+ Builder::new_multi_thread()
+ .thread_name_fn(|| {
+ static ATOMIC_ID: AtomicUsize = AtomicUsize::new(0);
+ let id = ATOMIC_ID.fetch_add(1, Ordering::Relaxed);
+ format!("tokio-runtime-{}", id)
+ })
+ .worker_threads(
+ thread::available_parallelism()
+ .map(|i| i.get())
+ .unwrap_or(servo_config::pref!(threadpools.fallback_worker_num) as usize)
+ .min(
+ servo_config::pref!(threadpools.async_runtime_workers.max).max(1) as usize,
+ ),
+ )
+ .enable_io()
+ .enable_time()
+ .build()
+ .unwrap(),
+ ))
+});