From 9bd8a7ba02d19f8edc50fb01f38cfcdecd2649cf Mon Sep 17 00:00:00 2001 From: Valentin Trophime <valentin.trophime@inria.fr> Date: Wed, 2 Oct 2024 17:57:19 +0200 Subject: [PATCH] fix(reactivity): change block size finer grain --- src/lib.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index bfd9a18..c187427 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; } } -- GitLab