#[derive(Default)]
pub struct LatencyTracker {
pub max_latency_ms: f64,
pub avg_latency_ms: f64,
history: Vec<f64>,
}
impl LatencyTracker {
pub fn new() -> Self {
Self {
max_latency_ms: 0.0,
avg_latency_ms: 0.0,
history: Vec::new(),
}
}
pub fn record_input_latency(&mut self, input_timestamp: f64, processing_start_time: f64) {
let latency = (processing_start_time - input_timestamp).max(0.0);
self.history.push(latency);
if self.history.len() > 60 {
self.history.remove(0);
}
self.avg_latency_ms = self.history.iter().sum::<f64>() / self.history.len() as f64;
self.max_latency_ms = self.history.iter().fold(0.0f64, |a, &b| a.max(b));
}
}