pub enum YieldReason {
BudgetExceeded,
Ring0Priority,
QueueEmpty,
ShutdownRequested,
Interrupted,
CheckpointBarrier,
Backpressure,
FairScheduling,
}Expand description
Reason Ring 1 yielded control.
Ring 1 background tasks cooperatively yield to ensure Ring 0 hot path operations are not delayed. This enum captures why the yield occurred for metrics and debugging.
§Example
use laminar_core::budget::{TaskBudget, YieldReason};
fn process_background_work(&mut self) -> YieldReason {
let budget = TaskBudget::ring1_chunk();
while !budget.exceeded() {
// Check if Ring 0 needs attention (priority)
if self.ring0_has_pending() {
return YieldReason::Ring0Priority;
}
// Get next work item
match self.background_queue.pop() {
Some(work) => self.process_work_item(work),
None => return YieldReason::QueueEmpty,
}
}
YieldReason::BudgetExceeded
}Variants§
BudgetExceeded
Budget exceeded, need to give Ring 0 a chance.
The Ring 1 task has used its entire time budget (typically 1ms) and must yield to avoid blocking Ring 0 operations.
Ring0Priority
Ring 0 has pending events (priority yield).
Even if budget remains, Ring 0 events take priority over Ring 1 background work. This ensures latency SLAs.
QueueEmpty
No more work in queue.
The background work queue is empty. The task can sleep or wait for new work to arrive.
ShutdownRequested
Shutdown has been requested.
The task should stop processing and allow graceful shutdown.
Interrupted
External interrupt (e.g., signal).
An external event has interrupted processing.
CheckpointBarrier
Yielded to allow checkpoint coordination.
During checkpointing, tasks may need to yield to ensure consistent state snapshots.
Backpressure
Yielded due to backpressure.
Downstream cannot accept more outputs, so the task yields to avoid buffering too much data.
FairScheduling
Yielded to allow other Ring 1 tasks to run.
Fair scheduling among multiple Ring 1 tasks.
Implementations§
Source§impl YieldReason
impl YieldReason
Sourcepub fn should_stop(&self) -> bool
pub fn should_stop(&self) -> bool
Returns true if this yield reason indicates the task should stop.
Sourcepub fn has_more_work(&self) -> bool
pub fn has_more_work(&self) -> bool
Returns true if this yield reason indicates work is available.
Sourcepub fn can_resume_immediately(&self) -> bool
pub fn can_resume_immediately(&self) -> bool
Returns true if the task can immediately resume after yield.
Sourcepub fn is_ring0_priority(&self) -> bool
pub fn is_ring0_priority(&self) -> bool
Returns true if this yield is due to Ring 0 priority.
Returns true if this yield is due to budget constraints.
Sourcepub fn metric_label(&self) -> &'static str
pub fn metric_label(&self) -> &'static str
Get metric label for this yield reason.
Trait Implementations§
Source§impl Clone for YieldReason
impl Clone for YieldReason
Source§fn clone(&self) -> YieldReason
fn clone(&self) -> YieldReason
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for YieldReason
impl Debug for YieldReason
Source§impl Display for YieldReason
impl Display for YieldReason
Source§impl Hash for YieldReason
impl Hash for YieldReason
Source§impl PartialEq for YieldReason
impl PartialEq for YieldReason
impl Copy for YieldReason
impl Eq for YieldReason
impl StructuralPartialEq for YieldReason
Auto Trait Implementations§
impl Freeze for YieldReason
impl RefUnwindSafe for YieldReason
impl Send for YieldReason
impl Sync for YieldReason
impl Unpin for YieldReason
impl UnwindSafe for YieldReason
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.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> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.