add executer tracing for debug

This commit is contained in:
2026-08-30 20:57:35 +02:00
parent a77b7761cd
commit 290758d203
3 changed files with 69 additions and 1 deletions
+66
View File
@@ -12,3 +12,69 @@ pub mod navigation;
pub mod network;
pub mod peripherals;
pub mod views;
#[unsafe(no_mangle)]
pub extern "Rust" fn _embassy_trace_poll_start(executor_id: u32) {}
/// This callback is called AFTER a task is initialized/allocated, and BEFORE
/// it is enqueued to run for the first time. If the task ends (and does not
/// loop "forever"), there will be a matching call to `_embassy_trace_task_end`.
///
/// Tasks start life in the SPAWNED state.
#[unsafe(no_mangle)]
pub extern "Rust" fn _embassy_trace_task_new(executor_id: u32, task_id: u32) {
log::debug!("Started new task on executer 0x{executor_id:x} with id 0x{task_id:x}")
}
/// This callback is called AFTER a task is destructed/freed. This will always
/// have a prior matching call to `_embassy_trace_task_new`.
#[unsafe(no_mangle)]
pub extern "Rust" fn _embassy_trace_task_end(executor_id: u32, task_id: u32) {
log::debug!("Ended task on executer 0x{executor_id:x} with id 0x{task_id:x}")
}
/// This callback is called AFTER a task has been dequeued from the runqueue,
/// and BEFORE the task is polled. There will always be a matching call to
/// `_embassy_trace_task_exec_end`.
///
/// This marks the TASK state transition from WAITING -> RUNNING
/// This marks the EXECUTOR state transition from SCHEDULING -> POLLING
#[unsafe(no_mangle)]
pub extern "Rust" fn _embassy_trace_task_exec_begin(executor_id: u32, task_id: u32) {}
/// This callback is called AFTER a task has completed polling. There will
/// always be a matching call to `_embassy_trace_task_exec_begin`.
///
/// This marks the TASK state transition from either:
/// * RUNNING -> IDLE - if there were no `_embassy_trace_task_ready_begin` events
/// for this task since the last `_embassy_trace_task_exec_begin` for THIS task
/// * RUNNING -> WAITING - if there WAS a `_embassy_trace_task_ready_begin` event
/// for this task since the last `_embassy_trace_task_exec_begin` for THIS task
///
/// This marks the EXECUTOR state transition from POLLING -> SCHEDULING
#[unsafe(no_mangle)]
pub extern "Rust" fn _embassy_trace_task_exec_end(excutor_id: u32, task_id: u32) {}
/// This callback is called AFTER the waker for a task is awoken, and BEFORE it
/// is added to the run queue.
///
/// If the given task is currently RUNNING, this marks no state change, BUT the
/// RUNNING task will then move to the WAITING stage when polling is complete.
///
/// If the given task is currently IDLE, this marks the TASK state transition
/// from IDLE -> WAITING.
///
/// NOTE: This may be called from an interrupt, outside the contpub ext of the current
/// task or executor.
#[unsafe(no_mangle)]
pub extern "Rust" fn _embassy_trace_task_ready_begin(executor_id: u32, task_id: u32) {}
/// This callback is called AFTER all dequeued tasks in a single call to poll
/// have been processed. This will always be paired with a call to
/// `_embassy_trace_executor_idle`.
///
///
/// This marks the EXECUTOR state transition from SCHEDULING -> IDLE
///
#[unsafe(no_mangle)]
pub extern "Rust" fn _embassy_trace_executor_idle(executor_id: u32) {}