Skip to main content

proteus_lib/playback/engine/
state.rs

1//! Shared playback state and metrics structures.
2
3/// Buffering configuration for the playback engine.
4#[derive(Debug, Clone, Copy)]
5pub struct PlaybackBufferSettings {
6    pub start_buffer_ms: f32,
7    pub track_eos_ms: f32,
8    pub start_sink_chunks: usize,
9    pub startup_silence_ms: f32,
10    pub startup_fade_ms: f32,
11    pub append_jitter_log_ms: f32,
12    pub effect_boundary_log: bool,
13}
14
15impl PlaybackBufferSettings {
16    /// Create new buffer settings with a given start buffer size (ms).
17    pub fn new(start_buffer_ms: f32) -> Self {
18        Self {
19            start_buffer_ms: start_buffer_ms.max(0.0),
20            track_eos_ms: 1000.0,
21            start_sink_chunks: 0,
22            startup_silence_ms: 0.0,
23            startup_fade_ms: 150.0,
24            append_jitter_log_ms: 0.0,
25            effect_boundary_log: false,
26        }
27    }
28}
29
30/// Aggregated DSP chain performance metrics used by debug UI.
31#[derive(Debug, Clone, Copy, Default)]
32pub struct DspChainMetrics {
33    pub dsp_time_ms: f64,
34    pub audio_time_ms: f64,
35    pub rt_factor: f64,
36    pub overrun: bool,
37    pub overrun_ms: f64,
38    pub avg_overrun_ms: f64,
39    pub max_overrun_ms: f64,
40    pub avg_dsp_ms: f64,
41    pub avg_audio_ms: f64,
42    pub avg_rt_factor: f64,
43    pub min_rt_factor: f64,
44    pub max_rt_factor: f64,
45    pub track_key_count: usize,
46    pub finished_track_count: usize,
47    pub prot_key_count: usize,
48    pub chain_ksps: f64,
49    pub avg_chain_ksps: f64,
50    pub min_chain_ksps: f64,
51    pub max_chain_ksps: f64,
52    pub underrun_count: u64,
53    pub underrun_active: bool,
54    pub pop_count: u64,
55    pub clip_count: u64,
56    pub nan_count: u64,
57    pub append_delay_ms: f64,
58    pub avg_append_delay_ms: f64,
59    pub max_append_delay_ms: f64,
60    pub late_append_count: u64,
61    pub late_append_active: bool,
62}