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