diff --git a/src/progress_bar.rs b/src/progress_bar.rs index 8c1c1335..2b36d719 100644 --- a/src/progress_bar.rs +++ b/src/progress_bar.rs @@ -191,9 +191,13 @@ impl ProgressBar { /// /// This automatically happens on any other change to a progress bar. pub fn tick(&self) { + self.tick_inner(Instant::now()); + } + + fn tick_inner(&self, now: Instant) { // Only tick if a `Ticker` isn't installed if self.ticker.lock().unwrap().is_none() { - self.state().tick(Instant::now()) + self.state().tick(now) } } @@ -202,7 +206,7 @@ impl ProgressBar { self.pos.inc(delta); let now = Instant::now(); if self.pos.allow(now) { - self.state().tick(now); + self.tick_inner(now); } } @@ -233,7 +237,8 @@ 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 @@ -241,7 +246,7 @@ impl ProgressBar { self.pos.set(pos); let now = Instant::now(); if self.pos.allow(now) { - self.state().tick(now); + self.tick_inner(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); }