From 4e8cb3fec05b207502c7c442c22d5daab6263b56 Mon Sep 17 00:00:00 2001 From: Jooris Hadeler Date: Mon, 20 Nov 2023 18:49:44 +0100 Subject: [PATCH 1/3] Add a `--show-elapsed` flag to optionally enable a the elapsed time counter. --- src/benchmark/executor.rs | 1 + src/benchmark/mod.rs | 2 ++ src/cli.rs | 8 ++++++++ src/options.rs | 8 ++++++++ src/output/progress_bar.rs | 14 ++++++++++++-- 5 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/benchmark/executor.rs b/src/benchmark/executor.rs index d0e748e..da7ea00 100644 --- a/src/benchmark/executor.rs +++ b/src/benchmark/executor.rs @@ -180,6 +180,7 @@ impl<'a> Executor for ShellExecutor<'a> { COUNT, "Measuring shell spawning time", self.options.output_style, + self.options.show_elapsed, )) } else { None diff --git a/src/benchmark/mod.rs b/src/benchmark/mod.rs index 0699f7d..269b72c 100644 --- a/src/benchmark/mod.rs +++ b/src/benchmark/mod.rs @@ -155,6 +155,7 @@ impl<'a> Benchmark<'a> { self.options.warmup_count, "Performing warmup runs", self.options.output_style, + self.options.show_elapsed, )) } else { None @@ -178,6 +179,7 @@ impl<'a> Benchmark<'a> { self.options.run_bounds.min, "Initial time measurement", self.options.output_style, + self.options.show_elapsed, )) } else { None diff --git a/src/cli.rs b/src/cli.rs index 9748579..b942073 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -111,6 +111,14 @@ fn build_command() -> Command { artifacts that need to be cleaned up." ), ) + .arg( + Arg::new("show-elapsed") + .long("show-elapsed") + .action(ArgAction::SetTrue) + .help( + "Show time elapsed since the benchmarking runs were started." + ) + ) .arg( Arg::new("parameter-scan") .long("parameter-scan") diff --git a/src/options.rs b/src/options.rs index 2f83889..8130d2c 100644 --- a/src/options.rs +++ b/src/options.rs @@ -233,6 +233,9 @@ pub struct Options { /// Which time unit to use when displaying results pub time_unit: Option, + + /// Show elapsed time since current run start. + pub show_elapsed: bool, } impl Default for Options { @@ -252,6 +255,7 @@ impl Default for Options { command_output_policy: CommandOutputPolicy::Null, time_unit: None, command_input_policy: CommandInputPolicy::Null, + show_elapsed: false, } } } @@ -419,6 +423,10 @@ impl Options { CommandInputPolicy::Null }; + if matches.get_flag("show-elapsed") { + options.show_elapsed = true; + } + Ok(options) } diff --git a/src/output/progress_bar.rs b/src/output/progress_bar.rs index ce2dd1a..b824014 100644 --- a/src/output/progress_bar.rs +++ b/src/output/progress_bar.rs @@ -10,12 +10,22 @@ const TICK_SETTINGS: (&str, u64) = ("⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏ ", 80); const TICK_SETTINGS: (&str, u64) = (r"+-x| ", 200); /// Return a pre-configured progress bar -pub fn get_progress_bar(length: u64, msg: &str, option: OutputStyleOption) -> ProgressBar { +pub fn get_progress_bar( + length: u64, + msg: &str, + option: OutputStyleOption, + show_elapsed: bool, +) -> ProgressBar { + let template_str = match show_elapsed { + true => " {spinner} {msg:<30} {wide_bar} ET {elapsed_precise} ETA {eta_precise} ", + false => " {spinner} {msg:<30} {wide_bar} ETA {eta_precise} ", + }; + let progressbar_style = match option { OutputStyleOption::Basic | OutputStyleOption::Color => ProgressStyle::default_bar(), _ => ProgressStyle::default_spinner() .tick_chars(TICK_SETTINGS.0) - .template(" {spinner} {msg:<30} {wide_bar} ETA {eta_precise} ") + .template(template_str) .expect("no template error"), }; From c83b4126ea99e66e53dd7c9ab928de39206515a6 Mon Sep 17 00:00:00 2001 From: Jooris Hadeler Date: Mon, 20 Nov 2023 19:39:31 +0100 Subject: [PATCH 2/3] Reset elapsed every time the progress bar is increased. --- src/benchmark/executor.rs | 3 ++- src/benchmark/mod.rs | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/benchmark/executor.rs b/src/benchmark/executor.rs index da7ea00..535f841 100644 --- a/src/benchmark/executor.rs +++ b/src/benchmark/executor.rs @@ -215,7 +215,8 @@ impl<'a> Executor for ShellExecutor<'a> { } if let Some(bar) = progress_bar.as_ref() { - bar.inc(1) + bar.inc(1); + bar.reset_elapsed(); } } diff --git a/src/benchmark/mod.rs b/src/benchmark/mod.rs index 269b72c..05052fb 100644 --- a/src/benchmark/mod.rs +++ b/src/benchmark/mod.rs @@ -165,7 +165,8 @@ impl<'a> Benchmark<'a> { let _ = run_preparation_command()?; let _ = self.executor.run_command_and_measure(self.command, None)?; if let Some(bar) = progress_bar.as_ref() { - bar.inc(1) + bar.inc(1); + bar.reset_elapsed(); } } if let Some(bar) = progress_bar.as_ref() { @@ -224,7 +225,8 @@ impl<'a> Benchmark<'a> { bar.set_length(count) } if let Some(bar) = progress_bar.as_ref() { - bar.inc(1) + bar.inc(1); + bar.reset_elapsed(); } // Gather statistics (perform the actual benchmark) @@ -251,7 +253,8 @@ impl<'a> Benchmark<'a> { all_succeeded = all_succeeded && success; if let Some(bar) = progress_bar.as_ref() { - bar.inc(1) + bar.inc(1); + bar.reset_elapsed(); } } From 02975df2adca24eaac4bb6e0b9478a10302e0648 Mon Sep 17 00:00:00 2001 From: Jooris Hadeler Date: Mon, 20 Nov 2023 19:40:04 +0100 Subject: [PATCH 3/3] Move `-E`, `--show-elapsed` flag to a more sensible position. --- src/cli.rs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index b942073..486dd49 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -111,14 +111,6 @@ fn build_command() -> Command { artifacts that need to be cleaned up." ), ) - .arg( - Arg::new("show-elapsed") - .long("show-elapsed") - .action(ArgAction::SetTrue) - .help( - "Show time elapsed since the benchmarking runs were started." - ) - ) .arg( Arg::new("parameter-scan") .long("parameter-scan") @@ -229,6 +221,17 @@ fn build_command() -> Command { * 'mean-time': order benchmarks by mean runtime\n" ), ) + .arg( + Arg::new("show-elapsed") + .long("show-elapsed") + .short('E') + .action(ArgAction::SetTrue) + .help( + "Show time elapsed since the current run was started. \ + This is useful for especially long benchmarks to see \ + the progress the benchmark has made" + ) + ) .arg( Arg::new("time-unit") .long("time-unit")