pub struct TaskIdRegistry { /* private fields */ }Expand description
Task registry for managing task metadata
Implementations§
Source§impl TaskIdRegistry
impl TaskIdRegistry
Sourcepub fn task_stats_from_events(
events: &[MemoryEvent],
) -> BTreeMap<u64, TaskLedgerStats>
pub fn task_stats_from_events( events: &[MemoryEvent], ) -> BTreeMap<u64, TaskLedgerStats>
Aggregate a fixed event cut by binding identity and allocating task.
Live bytes stay with the origin task; allocation/release activity belongs to the task performing the operation. Unattributed bindings are still indexed so a later task can release them without consuming another generation.
Sourcepub fn task_accounting_from_events(
events: &[MemoryEvent],
) -> TaskAccountingSnapshot
pub fn task_accounting_from_events( events: &[MemoryEvent], ) -> TaskAccountingSnapshot
Replay metrics and lifecycle gaps together, preserving cross-task ownership.
Source§impl TaskIdRegistry
impl TaskIdRegistry
Sourcepub fn charge_quality_from_events(
events: &[MemoryEvent],
) -> (ChargeQuality, BTreeMap<u64, ChargeQuality>)
pub fn charge_quality_from_events( events: &[MemoryEvent], ) -> (ChargeQuality, BTreeMap<u64, ChargeQuality>)
Project window and per-task charge quality from one immutable event cut.
Reallocations and annotations do not make another registry charge attempt. Legacy allocation events without an outcome remain readable, but cannot certify completeness.
Source§impl TaskIdRegistry
impl TaskIdRegistry
Sourcepub fn task_scope(&self, name: &str) -> TaskGuard
pub fn task_scope(&self, name: &str) -> TaskGuard
Create a task scope with automatic lifecycle management
This is the simplified API - just call this and the task is automatically completed when the guard is dropped.
§Arguments
name- Task name
§Returns
A TaskGuard that automatically completes the task when dropped
§Example
let registry = global_registry();
{
let _main = registry.task_scope("main_process");
let data = vec![1, 2, 3]; // Automatically attributed to main_process
{
let _worker = registry.task_scope("worker"); // Parent is automatically main_process
let more_data = vec![4, 5, 6]; // Automatically attributed to worker
} // worker automatically completed
} // main automatically completed
let graph = registry.export_graph();Sourcepub fn register_explicit_task(&self, task_id: u64, name: &str)
pub fn register_explicit_task(&self, task_id: u64, name: &str)
Register an explicitly-tracked task.
The parent is inferred from the current thread-local task, and
CURRENT_TASK_ID is set so that subsequent track! calls on the
same thread are attributed to this task. This preserves the original
contract for existing callers that rely on “register then track”
semantics.
§Arguments
task_id- Externally-generated task IDname- Task name
Sourcepub fn register_explicit_task_with_parent(
&self,
task_id: u64,
name: &str,
parent_id: Option<u64>,
)
pub fn register_explicit_task_with_parent( &self, task_id: u64, name: &str, parent_id: Option<u64>, )
Register an explicitly-tracked task with a known parent ID.
Unlike [register_explicit_task], this method does NOT read or write
CURRENT_TASK_ID. The caller provides the parent ID directly (which
should be captured at spawn time, not at first-poll time). The
poll-level wrapper (ContextualFuture) handles context installation.
§Arguments
task_id- Externally-generated task IDname- Task nameparent_id- Parent task ID (None for root tasks)
Sourcepub fn unregister_task(&self, task_id: u64)
pub fn unregister_task(&self, task_id: u64)
Mark a registered task as completed.
The thread-local slot is only cleared when it still holds this task: another task (or a parent scope) may be current on this thread.
Sourcepub fn record_allocation(&self, size: usize)
pub fn record_allocation(&self, size: usize)
Sourcepub fn try_record_allocation(&self, size: usize) -> ChargeOutcome
pub fn try_record_allocation(&self, size: usize) -> ChargeOutcome
Charge an allocation without ever blocking on the registry lock.
The global allocator callback runs while other code may hold the registry read
lock (and allocate inside it). Taking the write lock there self-deadlocks, so this
uses try_write and reports ChargeOutcome::Deferred instead of waiting; the
attempt and its bytes are counted so a report can mark the task metrics as a lower
bound of this capture window.
Sourcepub fn deferred_tasks(&self) -> HashMap<u64, (u64, u64)>
pub fn deferred_tasks(&self) -> HashMap<u64, (u64, u64)>
Per-task deferred charges: task_id -> (count, bytes).
A task present here has accounting that is a lower bound for this capture window.
Sourcepub fn charge_quality(&self) -> ChargeQuality
pub fn charge_quality(&self) -> ChargeQuality
Completeness of the task accounting observed so far.
pub fn current_task_id() -> Option<u64>
Sourcepub fn set_current_task_id(&self, task_id: u64)
pub fn set_current_task_id(&self, task_id: u64)
Set the current task ID on the calling thread’s TLS.
Used by the poll-level wrapper to install the task context
for each poll() invocation.
Sourcepub fn set_current_task_id_opt(&self, task_id: Option<u64>)
pub fn set_current_task_id_opt(&self, task_id: Option<u64>)
Set or clear the current task ID on the calling thread’s TLS.
Used by the poll-level wrapper to restore the previous value
after a poll() returns.
Sourcepub fn get_all_tasks(&self) -> Vec<TaskMeta>
pub fn get_all_tasks(&self) -> Vec<TaskMeta>
Get all tasks
Sourcepub fn get_children(&self, parent_id: u64) -> Vec<u64>
pub fn get_children(&self, parent_id: u64) -> Vec<u64>
Sourcepub fn get_parent(&self, task_id: u64) -> Option<u64>
pub fn get_parent(&self, task_id: u64) -> Option<u64>
Sourcepub fn export_graph(&self) -> TaskGraph
pub fn export_graph(&self) -> TaskGraph
Sourcepub fn get_stats(&self) -> TaskRegistryStats
pub fn get_stats(&self) -> TaskRegistryStats
Get task statistics
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for TaskIdRegistry
impl !RefUnwindSafe for TaskIdRegistry
impl Forget for TaskIdRegistry
impl Send for TaskIdRegistry
impl Sync for TaskIdRegistry
impl Unpin for TaskIdRegistry
impl UnsafeUnpin for TaskIdRegistry
impl UnwindSafe for TaskIdRegistry
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more