pub struct RefreshLedgerEvidence {
pub throughput: Vec<RefreshThroughputProfile>,
pub phase_share: Vec<RefreshPhaseShare>,
pub dominant_phase: Option<RefreshPhase>,
pub aggregate_items_processed: u64,
pub aggregate_duration_ms: u64,
pub aggregate_items_per_second: Option<f64>,
}Expand description
Single-shot derived evidence summary suitable for benchmark
comparison and operator dashboards. Computed from a RefreshLedger
in O(phases) time with zero allocations beyond the output structs.
Comparing two RefreshLedgerEvidence values across runs is the
intended consumer pattern: regression gates assert that
aggregate_items_per_second did not drop more than X%, that
dominant_phase did not migrate, etc.
Fields§
§throughput: Vec<RefreshThroughputProfile>Per-phase throughput. Excludes phases with items_processed == 0
to keep the output focused on phases that actually moved data.
Per-phase wall-clock share. Includes ALL phases that ran (even zero-item phases like a brief Recovery) so the shares sum transparently.
dominant_phase: Option<RefreshPhase>Phase consuming the largest share of wall time, or None when
no phases ran. The “where to optimize next” pointer.
aggregate_items_processed: u64Total items processed across every phase.
aggregate_duration_ms: u64Total wall-clock duration in milliseconds (mirrors
RefreshLedger.total_duration_ms for ergonomic single-struct
access).
aggregate_items_per_second: Option<f64>Aggregate items/second across the whole refresh; None when
aggregate_duration_ms == 0.
Implementations§
Source§impl RefreshLedgerEvidence
impl RefreshLedgerEvidence
Sourcepub fn compare_to(&self, baseline: &Self) -> RefreshLedgerEvidenceComparison
pub fn compare_to(&self, baseline: &Self) -> RefreshLedgerEvidenceComparison
Compare this evidence summary against a baseline and return
a structured regression report. Pure (no I/O); runs in
O(phases_baseline + phases_current).
Direction convention: positive duration_delta_pct ⇒ slower
in self; positive throughput_delta_pct ⇒ faster in self.
Picking these signs (not the opposite) makes the JSON read
naturally for benchmark CI (“PR #123 added +12.5% to publish
duration”).
Trait Implementations§
Source§impl Clone for RefreshLedgerEvidence
impl Clone for RefreshLedgerEvidence
Source§fn clone(&self) -> RefreshLedgerEvidence
fn clone(&self) -> RefreshLedgerEvidence
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RefreshLedgerEvidence
impl Debug for RefreshLedgerEvidence
Source§impl<'de> Deserialize<'de> for RefreshLedgerEvidence
impl<'de> Deserialize<'de> for RefreshLedgerEvidence
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for RefreshLedgerEvidence
impl PartialEq for RefreshLedgerEvidence
Source§fn eq(&self, other: &RefreshLedgerEvidence) -> bool
fn eq(&self, other: &RefreshLedgerEvidence) -> bool
self and other values to be equal, and is used by ==.Source§impl Serialize for RefreshLedgerEvidence
impl Serialize for RefreshLedgerEvidence
impl StructuralPartialEq for RefreshLedgerEvidence
Auto Trait Implementations§
impl Freeze for RefreshLedgerEvidence
impl RefUnwindSafe for RefreshLedgerEvidence
impl Send for RefreshLedgerEvidence
impl Sync for RefreshLedgerEvidence
impl Unpin for RefreshLedgerEvidence
impl UnsafeUnpin for RefreshLedgerEvidence
impl UnwindSafe for RefreshLedgerEvidence
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for 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> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, _span: NoopSpan) -> Self
fn instrument(self, _span: NoopSpan) -> Self
Source§fn in_current_span(self) -> Self
fn in_current_span(self) -> 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