• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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