Struct MetricsRingBuffer
pub struct MetricsRingBuffer { /* private fields */ }Expand description
Single-producer single-consumer lock-free ring buffer for UiMetrics.
The audio thread writes metrics every ~128 samples (~375 writes/sec at 48kHz). The UI thread reads at 60fps. The buffer holds multiple frames so the UI always gets fresh data even if timing varies.
Implementations§
§impl MetricsRingBuffer
impl MetricsRingBuffer
pub fn new(min_capacity: usize) -> MetricsRingBuffer
pub fn new(min_capacity: usize) -> MetricsRingBuffer
Create a new ring buffer with the given capacity (rounded up to power of 2).
pub fn write(&self, metrics: UiMetrics)
pub fn write(&self, metrics: UiMetrics)
Write metrics to the buffer (audio thread).
Lock-free, wait-free. Never blocks.
pub fn read_latest(&self) -> UiMetrics
pub fn read_latest(&self) -> UiMetrics
Read the latest complete metrics (UI thread).
Lock-free. Returns the most recently written metrics frame.
pub fn frames_written(&self) -> usize
pub fn frames_written(&self) -> usize
Get the number of frames written (for debugging).
Trait Implementations§
impl Send for MetricsRingBuffer
impl Sync for MetricsRingBuffer
Auto Trait Implementations§
impl !Freeze for MetricsRingBuffer
impl RefUnwindSafe for MetricsRingBuffer
impl Unpin for MetricsRingBuffer
impl UnsafeUnpin for MetricsRingBuffer
impl UnwindSafe for MetricsRingBuffer
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
Mutably borrows from an owned value. Read more