const HEAVY_PASSES: u32 = 8;
const LIGHT_RESETS: u8 = 4;
#[derive(Debug, Default)]
pub(super) struct PoolTrim {
passes: u32,
peak: u32,
light: u8,
}
impl PoolTrim {
pub(super) fn begin_render_pass(&mut self) {
self.passes = self.passes.saturating_add(1);
}
pub(super) fn reset(&mut self) -> bool {
let used = core::mem::take(&mut self.passes);
if self.peak < HEAVY_PASSES || used.saturating_mul(2) >= self.peak {
self.light = 0;
self.peak = self.peak.max(used);
return false;
}
self.light += 1;
if self.light < LIGHT_RESETS {
return false;
}
self.light = 0;
self.peak = used;
true
}
}
#[cfg(test)]
#[path = "tests/pool_trim_tests.rs"]
mod tests;