From d82a11d3b6ceddba27040c52361c78977119bef5 Mon Sep 17 00:00:00 2001 From: Dirkjan Ochtman Date: Wed, 3 Aug 2022 13:12:15 +0200 Subject: [PATCH 1/2] 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); } From 7251d362f93daf9ec8b5b1b1e275fc6540fd41dd Mon Sep 17 00:00:00 2001 From: Dirkjan Ochtman Date: Wed, 3 Aug 2022 14:09:33 +0200 Subject: [PATCH 2/2] Factor out a bit of duplicate code --- src/progress_bar.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/progress_bar.rs b/src/progress_bar.rs index 5db0fa09..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) } } @@ -201,8 +205,8 @@ impl ProgressBar { pub fn inc(&self, delta: u64) { self.pos.inc(delta); let now = Instant::now(); - if self.pos.allow(now) && self.ticker.lock().unwrap().is_none() { - self.state().tick(now); + if self.pos.allow(now) { + self.tick_inner(now); } } @@ -241,8 +245,8 @@ impl ProgressBar { pub fn set_position(&self, pos: u64) { self.pos.set(pos); let now = Instant::now(); - if self.pos.allow(now) && self.ticker.lock().unwrap().is_none() { - self.state().tick(now); + if self.pos.allow(now) { + self.tick_inner(now); } }