pub struct PhaseRenderHandle {
pub exec_id: u64,
pub name: String,
pub labels: String,
pub activity_name: String,
pub metrics: Arc<ActivityMetrics>,
pub bodies: Arc<Vec<BakedBody>>,
pub memo: Arc<ArcSwap<String>>,
pub gutter: Arc<ArcSwapOption<GutterSpec>>,
pub status_metrics: Arc<[String]>,
pub concurrency: usize,
pub seq: Option<(usize, usize)>,
pub depth_indent: String,
}Expand description
SRD-100 P2 — the per-phase live render handle, attached to the
display fold’s ActivePhase exactly once (after the Activity and its
metrics exist — executor.rs creates the activity well after
phase_starting, so this cannot ride that callback). It carries
everything a display surface needs to re-derive this phase’s status
line at the consumer by folding the snapshot, replacing the retired
per-phase inline-status producer threads (SRD-100 §6).
Why a handle of live shared state rather than a pre-rendered string:
the consumer calls crate::readout_context::build_inline_refresh_context
verbatim against metrics and fires bodies, so single-run output is
byte-identical to the old producer path (SRD-100 §12 A1) by code
reuse — and §11 mandates that “each phase owns its Arc<ActivityMetrics>”.
BakedBody is Send + Sync (its Readout handles are), so the format
template rides the ArcSwap snapshot as pure data; only the !Sync
binder is kept out of the snapshot (the consumer fires bodies with
&self).
Fields§
§exec_id: u64Routing key — together with name+labels, selects the
ActivePhase slot to attach to (mirrors PhaseProgressUpdate).
name: String§labels: String§activity_name: StringThe activity’s display name (activity.config.name, which may carry
the leaf coord, e.g. "phase (k=10)"). Fed verbatim to
build_inline_refresh_context so the consumer’s render is
byte-identical to the retired producer thread’s.
metrics: Arc<ActivityMetrics>Live atomic counters for this phase (SRD-100 §11). Read lock-free at render time so the status stays fresh without a producer thread.
bodies: Arc<Vec<BakedBody>>Resolved on_update-slot render template (workload binding + CLI
override + built-in phase_status default). Immutable, fired with
&self by the consumer; shared, never cloned per render.
memo: Arc<ArcSwap<String>>Live memo header (the memo-wrapper before:/after: state),
snapshotted into the context each render.
gutter: Arc<ArcSwapOption<GutterSpec>>Live gutter-cell spec (the gutter-wrapper state). None in
the slot ⇒ the display derives the cell automatically.
status_metrics: Arc<[String]>status_metrics: selection for the per-phase status chips.
concurrency: usizeFiber count at attach time (the inline context’s concurrency).
seq: Option<(usize, usize)>(seq, total) pre-map coordinate, resolved from the dispatch-time
scene_node_id (NOT a racy by-name DFS match — SRD-100 P1c).
depth_indent: StringDepth indent string (" ".repeat(depth-1)), resolved from the
scene node at attach time.
Trait Implementations§
Source§impl Clone for PhaseRenderHandle
impl Clone for PhaseRenderHandle
Auto Trait Implementations§
impl !RefUnwindSafe for PhaseRenderHandle
impl !UnwindSafe for PhaseRenderHandle
impl Freeze for PhaseRenderHandle
impl Send for PhaseRenderHandle
impl Sync for PhaseRenderHandle
impl Unpin for PhaseRenderHandle
impl UnsafeUnpin for PhaseRenderHandle
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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