Skip to main content

BatchTimer

Struct BatchTimer 

Source
pub struct BatchTimer<'a> { /* private fields */ }
Expand description

Accumulates work time at a granularity the broker can actually resolve.

Publishes on drop, so an early return or a ? still records what was done, and so the tail of a batch is never lost.

§Construct one per batch

The timer measures wall time between publishes, so anything that happens while it is alive is charged as work. Constructing it inside the per-batch callback is what keeps blocking out of the measurement: the callback is entered only once a filled buffer is in hand, so the wait for that buffer falls between two timers rather than inside one. A timer hoisted to thread scope would charge every fill to the consumer’s busy time — and busy time that includes blocking is exactly the wall-time measurement this crate exists to avoid.

Implementations§

Source§

impl<'a> BatchTimer<'a>

Source

pub fn single_writer_progress_counter(self, counter: &'a AtomicU64) -> Self

Publish item progress to a single-writer caller-owned counter.

A consumer with several hot workers can give each worker a cache-padded counter and sum those counters in Consumer::work. Busy time remains in this meter, while fine progress uses a relaxed cumulative store rather than a contended atomic read-modify-write. No other writer may update counter; it must remain cumulative across successive timers.

Source

pub fn flush_every(self, n: u64) -> Self

Publish both progress and busy time every n items instead of the default.

Prefer Self::progress_every when only the completed-item signal needs finer resolution. That avoids adding clock reads to a hot record loop.

Source

pub fn progress_every(self, n: u64) -> Self

Publish completed-item progress every n items.

This cadence is independent of busy-time publication: making throughput visible to short controller windows therefore costs one relaxed counter update per interval, without forcing an Instant::now() at that cadence.

Source

pub fn time_every(self, n: u64) -> Self

Publish accumulated busy time every n items.

Most consumers should retain DEFAULT_FLUSH_EVERY. This separate control primarily lets a converged freeze policy disable all in-batch measurement for new callbacks.

Source

pub fn tick(&mut self)

Call once per item processed.

The count is only ever compared against itself over time, so any consistent unit will do; it plays no part in sizing the split.

Source

pub fn completed_item(&mut self) -> CompletedItem<'_, 'a>

Count one item when the returned guard leaves scope.

Use this when a loop has early exits and throughput must mean completed, rather than started, items. Construct the guard at the top of an iteration; normal completion, continue, and ? all publish the item only after that iteration’s work has finished.

Trait Implementations§

Source§

impl Drop for BatchTimer<'_>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for BatchTimer<'a>

§

impl<'a> RefUnwindSafe for BatchTimer<'a>

§

impl<'a> Send for BatchTimer<'a>

§

impl<'a> Sync for BatchTimer<'a>

§

impl<'a> Unpin for BatchTimer<'a>

§

impl<'a> UnsafeUnpin for BatchTimer<'a>

§

impl<'a> UnwindSafe for BatchTimer<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more