From d82a11d3b6ceddba27040c52361c78977119bef5 Mon Sep 17 00:00:00 2001 From: Dirkjan Ochtman Date: Wed, 3 Aug 2022 13:12:15 +0200 Subject: [PATCH] Only tick if the ticker is disabled --- src/progress_bar.rs | 7 ++++--- src/state.rs | 6 ++++-- tests/render.rs | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/progress_bar.rs b/src/progress_bar.rs index 8c1c1335..5db0fa09 100644 --- a/src/progress_bar.rs +++ b/src/progress_bar.rs @@ -201,7 +201,7 @@ impl ProgressBar { pub fn inc(&self, delta: u64) { self.pos.inc(delta); let now = Instant::now(); - if self.pos.allow(now) { + if self.pos.allow(now) && self.ticker.lock().unwrap().is_none() { self.state().tick(now); } } @@ -233,14 +233,15 @@ impl ProgressBar { /// Update the `ProgressBar`'s inner [`ProgressState`] pub fn update(&self, f: impl FnOnce(&mut ProgressState)) { - self.state().update(Instant::now(), f) + self.state() + .update(Instant::now(), f, self.ticker.lock().unwrap().is_none()) } /// Sets the position of the progress bar pub fn set_position(&self, pos: u64) { self.pos.set(pos); let now = Instant::now(); - if self.pos.allow(now) { + if self.pos.allow(now) && self.ticker.lock().unwrap().is_none() { self.state().tick(now); } } diff --git a/src/state.rs b/src/state.rs index 67aab13c..108cbb50 100644 --- a/src/state.rs +++ b/src/state.rs @@ -84,9 +84,11 @@ impl BarState { } } - pub(crate) fn update(&mut self, now: Instant, f: impl FnOnce(&mut ProgressState)) { + pub(crate) fn update(&mut self, now: Instant, f: impl FnOnce(&mut ProgressState), tick: bool) { f(&mut self.state); - self.tick(now); + if tick { + self.tick(now); + } } pub(crate) fn set_length(&mut self, now: Instant, len: u64) { diff --git a/tests/render.rs b/tests/render.rs index e696519d..c7d56e56 100644 --- a/tests/render.rs +++ b/tests/render.rs @@ -339,7 +339,7 @@ fn ticker_drop() { .with_finish(ProgressFinish::AndLeave) .with_message(format!("doing stuff {}", i)), ); - new_spinner.enable_steady_tick(Duration::from_millis(50)); + new_spinner.enable_steady_tick(Duration::from_millis(100)); spinner.replace(new_spinner); }