aboutsummaryrefslogtreecommitdiff
path: root/embassy-executor/src/raw/trace.rs
diff options
context:
space:
mode:
authorKat Perez <[email protected]>2025-05-08 11:20:22 -0400
committerKat Perez <[email protected]>2025-05-08 11:29:44 -0400
commit8a8deb704fdd58cecf463f033cd3c3d1cc3534c7 (patch)
tree1ba3015e547b582cff15ecb7e92508a59c5ed6ef /embassy-executor/src/raw/trace.rs
parent56b5e35c60743d65aacee753d1db391c3cbeae16 (diff)
move spawn_named into trace.rs through TraceExt trait
Diffstat (limited to 'embassy-executor/src/raw/trace.rs')
-rw-r--r--embassy-executor/src/raw/trace.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/embassy-executor/src/raw/trace.rs b/embassy-executor/src/raw/trace.rs
index fec3a4834..eb960f721 100644
--- a/embassy-executor/src/raw/trace.rs
+++ b/embassy-executor/src/raw/trace.rs
@@ -87,6 +87,49 @@ use core::sync::atomic::{AtomicUsize, Ordering};
87use rtos_trace::TaskInfo; 87use rtos_trace::TaskInfo;
88 88
89use crate::raw::{SyncExecutor, TaskHeader, TaskRef, TaskTracker}; 89use crate::raw::{SyncExecutor, TaskHeader, TaskRef, TaskTracker};
90use crate::spawner::{SpawnError, SpawnToken, Spawner};
91
92/// Extension trait adding tracing capabilities to the Spawner
93pub trait TraceExt {
94 /// Spawns a new task with a specified name.
95 ///
96 /// # Arguments
97 /// * `name` - Static string name to associate with the task
98 /// * `token` - Token representing the task to spawn
99 ///
100 /// # Returns
101 /// Result indicating whether the spawn was successful
102 fn spawn_named<S>(&self, name: &'static str, token: SpawnToken<S>) -> Result<(), SpawnError>;
103}
104
105#[cfg(feature = "trace")]
106impl TraceExt for Spawner {
107 fn spawn_named<S>(&self, name: &'static str, token: SpawnToken<S>) -> Result<(), SpawnError> {
108 let task = token.raw_task;
109 core::mem::forget(token);
110
111 match task {
112 Some(task) => {
113 task.set_name(Some(name));
114 let task_id = task.as_ptr() as u32;
115 task.set_id(task_id);
116
117 unsafe { self.executor.spawn(task) };
118 Ok(())
119 }
120 None => Err(SpawnError::Busy),
121 }
122 }
123}
124
125/// When trace is disabled, spawn_named falls back to regular spawn.
126/// This maintains API compatibility while optimizing out the name parameter.
127#[cfg(not(feature = "trace"))]
128impl TraceExt for Spawner {
129 fn spawn_named<S>(&self, _name: &'static str, token: SpawnToken<S>) -> Result<(), SpawnError> {
130 self.spawn(token)
131 }
132}
90 133
91/// Global task tracker instance 134/// Global task tracker instance
92/// 135///