Commit Graph
48 Commits
Author SHA1 Message Date
David Peter af4422d212 Remove command_with_unused_parameters field 2026-10-05 15:56:52 +02:00
David Peter ae0035ad56 Use wait4 instead of getrusage 2026-10-05 15:56:37 +02:00
David Peter 50232feb22 Move user and system time 2026-10-05 15:56:36 +02:00
David Peter 14d773998a Introduce new BenchmarkRun struct 2026-10-05 15:56:36 +02:00
David Peter 0f2871bd66 Address review feedback 2026-10-05 14:16:33 +02:00
Devon Hollowood ce704016f9 Make time elapsed only show up initially 2026-10-05 14:14:15 +02:00
David Peter e689520fb5 Merge pull request #969 from sharkdp/codex/result-measurements
Store typed Measurements in BenchmarkResult
2026-10-05 12:51:22 +02:00
David Peter b23372c5e2 Store typed Measurements in BenchmarkResult 2026-10-05 12:46:10 +02:00
David Peter 30a2b61d4c Merge pull request #807 from willcl-ark/expose-run-var
expose HYPERFINE_ITERATION to intermediate commands
2026-10-05 12:45:29 +02:00
David Peter 3558138cea Further simplifications 2026-10-05 12:40:33 +02:00
David Peter 8c40de45f8 Store parameter usage metadata in benchmark results 2026-10-05 12:35:24 +02:00
willcl-ark 44c0cc231b expose HYPERFINE_ITERATION to intermediate commands
Fixes: #781

Expose the `$HYPERFINE_ITERATION` variable to intermediate commands.
This will allow iteration-specific prepare/conclude, such as:

```bash
hyperfine --runs 5 --prepare 'echo touch file${HYPERFINE_ITERATION}.dat' \
    'echo testing file${HYPERFINE_ITERATION}.dat' \
    --conclude 'echo rm file${HYPERFINE_ITERATION}.dat' --show-output
```
2026-10-05 12:24:43 +02:00
David Peter 6f557e0494 Extract typed quantity formatting 2026-10-05 11:46:49 +02:00
David Peter aa14b8c0d9 Group units, formatting, and statistics under quantity 2026-10-05 10:46:51 +02:00
David Peter bef66df7e4 Restore original quantity trait and comments 2026-10-05 10:43:13 +02:00
David Peter a8e56efecc Use uom quantities for benchmark measurements 2026-10-05 10:32:32 +02:00
David Peter db3a3dedc7 Collect benchmark runs in Measurements 2026-10-05 10:10:09 +02:00
David Peter 35c94a0e36 Clarify internal measurement field names 2026-10-05 10:09:41 +02:00
David Peter 305e89d536 Consolidate min and max in the statistics module 2026-10-05 10:00:07 +02:00
David Peter 1fb03c3807 Replace statistical with local floating-point helpers 2026-10-05 09:47:33 +02:00
David Peter 6cb9566118 Unify timer and executor measurement results 2026-10-05 09:47:09 +02:00
c0b3834277 Handle broken pipe errors on stdout gracefully (#932)
Replace `println!` calls on the results paths with `writeln!` on
`io::stdout()` and propagate the `io::Error` to `main`, where
`ErrorKind::BrokenPipe` is turned into a quiet `exit(0)`. This matches
the conventional behavior of command-line tools when their output pipe
is closed early (e.g. `hyperfine ... | head -n 0`), and fixes panics in
all run-output paths: the per-benchmark header and results, the speed
comparison summary, and `-`-style exports to stdout. The warnings and
"Note" outputs to stderr are converted the same way.


---------

Co-authored-by: Mathjk <Mathjk@users.noreply.github.com>
Co-authored-by: David Peter <mail@david-peter.de>
2026-10-02 11:18:56 +02:00
David Peter 6556b2bd46 Initial work on tracking memory usage 2024-12-29 12:18:55 +01:00
David Peter 99d24b7a2e Multiple output policies 2024-11-11 22:24:25 +01:00
David Peter 83f04cdd31 Add iteration information to failure error message 2024-11-10 22:26:13 +01:00
Hamir Mahal ef1263279d style: simplify string interpolation 2024-06-01 11:07:23 +02:00
Jack O'Connor e13d0cb144 Add --conclude option with tests
This implementation of --conclude is basically identical
to the existing implementation for --prepare. I have not
adapted any existing tests. All tests which test --conclude
functionality are new.

The --conclude commands will run in the same order in which
they are supplied on the cli in the same manner as --prepare
and there must either be one --conclude command, or else the
same number of --concludes as there are commands.
2024-02-02 17:46:23 +01:00
Ville Skyttä 178bdaa205 Spelling and grammar fixes 2023-05-18 16:31:44 +02:00
David Peter a8752769ab Show unused parameters in command names
closes #600
2023-04-20 21:39:23 +02:00
David Peter 5b5daa0493 Improve hints for outlier warnings
Improve hints for outlier warnings if `--warmup` or `--prepare` are in
use already.

Closes #570
2022-11-20 21:19:27 +01:00
David Peter ec4321392f Fix clippy warnings 2022-05-17 22:57:10 +02:00
David Peter d9418e0731 Use raw executor by default, skip intermediate shell
This adds a new "raw executor" (next to the "shell executor") that
allows hyperfine to execute commands directly without any intermediate
shell.

The command line is split into tokens (using the `shell-words` crate),
and according to POSIX rules. The first token is taken as the executable,
and the rest as arguments.

The new executor is enabled by default. In order to select the shell
executor, users will have to pass `--shell=default`.

This allows us to reduce measurement noise and to benchmark very quick
commands. It also decreases the time to run benchmarks, as we don't need
the calibration phase.

Also, it allows one to make sure that the executed command is not
implemented as a shell builtin. For example `hyperfine true`
and `hyperfine --shell=default true` return different times due
to the fact that `bash` executes `true` as a NOP.

Co-authored: Ciprian Dorin Craciun <ciprian@volution.ro>
2022-02-22 22:51:09 +01:00
David Peter 7c929f7e48 Rename to run_command_and_measure 2022-02-22 13:24:05 +01:00
David Peter 6887835f34 Proper shell overhead computation 2022-02-22 09:07:40 +01:00
David Peter 6f51232a8a Add debug/mock mode 2022-02-22 09:07:40 +01:00
David Peter 5c9c8c2383 New Benchmark struct 2022-02-22 09:07:40 +01:00
David Peter dcfeede18e Move functionality to scheduler 2022-02-22 09:07:40 +01:00
David Peter b658e20110 Move exit code function to separate file 2022-02-22 09:07:40 +01:00
David Peter 0ebd76dfc2 Turn show_output into enum 2022-02-22 09:07:40 +01:00
David Peter f9334e15fc Rename _res to _result 2022-02-22 09:07:40 +01:00
David Peter bea0cfab30 Rename Runs to RunBounds 2022-02-22 09:07:40 +01:00
David Peter 2d0cd4b53c Modify doc comment 2022-02-19 16:53:02 +01:00
David Peter 72d27729fa New Scheduler struct 2022-02-19 16:53:02 +01:00
David Peter c5a2266199 New schedule module 2022-02-06 20:19:50 +01:00
David Peter 5c634c9f2f Move a few modules to util 2022-02-06 20:19:50 +01:00
David Peter 999e7c4566 Move more modules around 2022-02-06 20:19:50 +01:00
David Peter 865290a144 New output module 2022-02-06 20:19:50 +01:00
David Peter e5e4c8c020 New 'benchmark' module folder 2022-02-06 20:19:50 +01:00