use std::time::{Duration, Instant};
const MIN_FRAME_INTERVAL: Duration = Duration::from_nanos(8_333_334);
#[derive(Debug, Default)]
pub struct FrameRateLimiter {
last_emitted_at: Option<Instant>,
}
impl FrameRateLimiter {
pub fn clamp_deadline(&self, requested: Instant) -> Instant {
let Some(last_emitted_at) = self.last_emitted_at else {
return requested;
};
let min_allowed = last_emitted_at
.checked_add(MIN_FRAME_INTERVAL)
.unwrap_or(last_emitted_at);
requested.max(min_allowed)
}
pub const fn mark_emitted(&mut self, emitted_at: Instant) {
self.last_emitted_at = Some(emitted_at);
}
}