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