pub struct Provenance {
pub stages: Vec<StageProvenance>,
pub view_provenance: ViewProvenance,
pub frame_receive_ts: MonotonicTs,
pub pipeline_complete_ts: MonotonicTs,
pub total_latency: Duration,
pub frame_age: Option<Duration>,
pub queue_hold_time: Duration,
pub frame_included: bool,
}Expand description
Full provenance for one processed frame.
Every output carries this, making production debugging tractable.
§Timing semantics
All timestamps are MonotonicTs values — they share the same monotonic
clock domain as FrameEnvelope::ts().
frame_receive_ts— when the frame was dequeued from the bounded queue.pipeline_complete_ts— when all stages finished and output was constructed.- Per-stage
start_ts/end_ts— real wall-clock offsets converted to monotonic nanoseconds from the pipeline epoch for ordering consistency.
Fields§
§stages: Vec<StageProvenance>Per-stage provenance records, in execution order.
view_provenance: ViewProvenanceView-system provenance for this frame.
frame_receive_ts: MonotonicTsTimestamp when the frame was dequeued from the bounded queue (start of pipeline processing for this frame).
pipeline_complete_ts: MonotonicTsTimestamp when the pipeline completed processing this frame.
total_latency: DurationTotal pipeline latency (receive → complete).
frame_age: Option<Duration>Wall-clock age of the frame at processing time.
Computed as WallTs::now() - frame.wall_ts() when the frame
enters pipeline processing. A large value indicates the frame
was stale before the executor even touched it — typically due
to buffer-pool starvation, TCP backlog, or slow decode.
None if wall-clock age could not be determined (e.g., if the
frame’s wall timestamp is in the future due to clock skew).
queue_hold_time: DurationTime the frame spent waiting in the bounded queue.
Measured from push() to pop() using Instant. A
consistently low value combined with high frame_age proves
that staleness originates upstream of the queue (e.g., in the
decoder or TCP receive buffer), not from queue backlog.
frame_included: boolWhether this output includes the source frame.
Always true for FrameInclusion::Always, always false for
FrameInclusion::Never, and periodic for
FrameInclusion::Sampled.
Trait Implementations§
Source§impl Clone for Provenance
impl Clone for Provenance
Source§fn clone(&self) -> Provenance
fn clone(&self) -> Provenance
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for Provenance
impl RefUnwindSafe for Provenance
impl Send for Provenance
impl Sync for Provenance
impl Unpin for Provenance
impl UnsafeUnpin for Provenance
impl UnwindSafe for Provenance
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> 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