diff --git a/src/lib.rs b/src/lib.rs index bfd9a187a04c568ac4b2e69eb7e4239d41e420ce..c1874273db15ef23c3995b118785ca6dd5c3546e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -26,6 +26,7 @@ impl<T, I: Iterator<Item = T>> PreemptiveIterator for I { let react_us = reactivity.as_micros(); loop { let start = Instant::now(); + let mut total_block = 0; let mut time = Duration::from_micros(0); while time < reactivity { acc = self.by_ref().take(n_iters - 1).fold(acc, &mut f); @@ -38,12 +39,13 @@ impl<T, I: Iterator<Item = T>> PreemptiveIterator for I { return acc; } time = start.elapsed(); + total_block += n_iters; n_iters *= 2; } let time_us = time.as_micros(); // forced to pass by percent value to avoid floats for adjusting iteration let percent = ((100 * (time_us - react_us)) / react_us) as usize; - n_iters = n_iters.saturating_sub(((n_iters - 1) * percent) / 100); + n_iters = total_block.saturating_sub(((total_block - 1) * percent) / 100); yield_now().await; } }