madsim_real_tokio/runtime/
dump.rs

1//! Snapshots of runtime state.
2//!
3//! See [Handle::dump][crate::runtime::Handle::dump].
4
5use crate::task::Id;
6use std::fmt;
7
8/// A snapshot of a runtime's state.
9///
10/// See [Handle::dump][crate::runtime::Handle::dump].
11#[derive(Debug)]
12pub struct Dump {
13    tasks: Tasks,
14}
15
16/// Snapshots of tasks.
17///
18/// See [Handle::dump][crate::runtime::Handle::dump].
19#[derive(Debug)]
20pub struct Tasks {
21    tasks: Vec<Task>,
22}
23
24/// A snapshot of a task.
25///
26/// See [Handle::dump][crate::runtime::Handle::dump].
27#[derive(Debug)]
28pub struct Task {
29    id: Id,
30    trace: Trace,
31}
32
33/// An execution trace of a task's last poll.
34///
35/// See [Handle::dump][crate::runtime::Handle::dump].
36#[derive(Debug)]
37pub struct Trace {
38    inner: super::task::trace::Trace,
39}
40
41impl Dump {
42    pub(crate) fn new(tasks: Vec<Task>) -> Self {
43        Self {
44            tasks: Tasks { tasks },
45        }
46    }
47
48    /// Tasks in this snapshot.
49    pub fn tasks(&self) -> &Tasks {
50        &self.tasks
51    }
52}
53
54impl Tasks {
55    /// Iterate over tasks.
56    pub fn iter(&self) -> impl Iterator<Item = &Task> {
57        self.tasks.iter()
58    }
59}
60
61impl Task {
62    pub(crate) fn new(id: Id, trace: super::task::trace::Trace) -> Self {
63        Self {
64            id,
65            trace: Trace { inner: trace },
66        }
67    }
68
69    /// Returns a [task ID] that uniquely identifies this task relative to other
70    /// tasks spawned at the time of the dump.
71    ///
72    /// **Note**: This is an [unstable API][unstable]. The public API of this type
73    /// may break in 1.x releases. See [the documentation on unstable
74    /// features][unstable] for details.
75    ///
76    /// [task ID]: crate::task::Id
77    /// [unstable]: crate#unstable-features
78    #[cfg(tokio_unstable)]
79    #[cfg_attr(docsrs, doc(cfg(tokio_unstable)))]
80    pub fn id(&self) -> Id {
81        self.id
82    }
83
84    /// A trace of this task's state.
85    pub fn trace(&self) -> &Trace {
86        &self.trace
87    }
88}
89
90impl fmt::Display for Trace {
91    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
92        self.inner.fmt(f)
93    }
94}