Skip to content

Commit

Permalink
Refactor estimator's prev tuple into separate elements
Browse files Browse the repository at this point in the history
It's easier to read separate state tracking fields for steps and time
than to store them together in a single tuple.

No functional change intended.
  • Loading branch information
afontenot committed May 28, 2023
1 parent eaec596 commit 4f49789
Showing 1 changed file with 15 additions and 10 deletions.
25 changes: 15 additions & 10 deletions src/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,8 @@ pub(crate) struct Estimator {
steps: [f64; 16],
pos: u8,
full: bool,
prev: (u64, Instant),
prev_steps: u64,
prev_time: Instant,
}

impl Estimator {
Expand All @@ -387,22 +388,23 @@ impl Estimator {
steps: [0.0; 16],
pos: 0,
full: false,
prev: (0, now),
prev_steps: 0,
prev_time: now,
}
}

fn record(&mut self, new: u64, now: Instant) {
let delta = new.saturating_sub(self.prev.0);
if delta == 0 || now < self.prev.1 {
fn record(&mut self, new_steps: u64, now: Instant) {
let delta = new_steps.saturating_sub(self.prev_steps);
if delta == 0 || now < self.prev_time {
// Reset on backwards seek to prevent breakage from seeking to the end for length determination
// See https://github.com/console-rs/indicatif/issues/480
if new < self.prev.0 {
if new_steps < self.prev_steps {
self.reset(now);
}
return;
}

let elapsed = now - self.prev.1;
let elapsed = now - self.prev_time;
let divisor = delta as f64;
let mut batch = 0.0;
if divisor != 0.0 {
Expand All @@ -415,13 +417,15 @@ impl Estimator {
self.full = true;
}

self.prev = (new, now);
self.prev_steps = new_steps;
self.prev_time = now;
}

pub(crate) fn reset(&mut self, now: Instant) {
self.pos = 0;
self.full = false;
self.prev = (0, now);
self.prev_steps = 0;
self.prev_time = now;
}

/// Average time per step in seconds, using rolling buffer of last 15 steps
Expand All @@ -442,7 +446,8 @@ impl fmt::Debug for Estimator {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("Estimate")
.field("steps", &&self.steps[..self.len()])
.field("prev", &self.prev)
.field("prev_steps", &self.prev_steps)
.field("prev_time", &self.prev_time)
.finish()
}
}
Expand Down

0 comments on commit 4f49789

Please sign in to comment.