1 use crate::loom::sync::atomic::{AtomicU64, Ordering::Relaxed}; 2 3 /// Retrieves metrics from the Tokio runtime. 4 /// 5 /// **Note**: This is an [unstable API][unstable]. The public API of this type 6 /// may break in 1.x releases. See [the documentation on unstable 7 /// features][unstable] for details. 8 /// 9 /// [unstable]: crate#unstable-features 10 #[derive(Debug)] 11 pub(crate) struct SchedulerMetrics { 12 /// Number of tasks that are scheduled from outside the runtime. 13 pub(super) remote_schedule_count: AtomicU64, 14 pub(super) budget_forced_yield_count: AtomicU64, 15 } 16 17 impl SchedulerMetrics { new() -> SchedulerMetrics18 pub(crate) fn new() -> SchedulerMetrics { 19 SchedulerMetrics { 20 remote_schedule_count: AtomicU64::new(0), 21 budget_forced_yield_count: AtomicU64::new(0), 22 } 23 } 24 25 /// Increment the number of tasks scheduled externally inc_remote_schedule_count(&self)26 pub(crate) fn inc_remote_schedule_count(&self) { 27 self.remote_schedule_count.fetch_add(1, Relaxed); 28 } 29 30 /// Increment the number of tasks forced to yield due to budget exhaustion inc_budget_forced_yield_count(&self)31 pub(crate) fn inc_budget_forced_yield_count(&self) { 32 self.budget_forced_yield_count.fetch_add(1, Relaxed); 33 } 34 } 35