Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

examine

examine answers the question a finding raises: which commits actually moved this number? Where analyze reports that a benchmark’s metric shifted and draws a small chart, examine pivots that chart into a per-commit listing of a single (benchmark, metric) series — a row for every commit, in git first-parent order, each row pairing the value with the short commit id and the start of the commit’s title.

cargo bench-history examine --local=./bench-history \
    --benchmark my_pkg/my_group/my_case --metric instruction_count

Two required options name the series, and this is the one command that names a metric:

  • --benchmark <qualified-id> selects exactly one benchmark identity.
  • --metric <name> selects one metric by its stable name.

analyze exposes no metric filter because you are not expected to know the internal metric names — but examine’s input is an analyze finding, which already prints both the benchmark identity and the metric, so pasting them back in is natural.

examine is a drill-down sibling of list runs: both are read-only previews over analyze’s exact data-set selection that never analyze. It runs no detection and no re-baselining — it has no findings, modes, or blessings — and repeats the listing once per matching discriminant set. Like list runs, its raw measurements remain inspectable independently of blessing records, including records whose payloads cannot be decoded.

Configured benchmark ignores do not apply to this raw-data view. An ignored benchmark remains inspectable by its exact qualified ID.

The listing covers every commit in the examined range: from the earliest commit at which any matching set carries the series through to the analyzed tip. Every set shares that range, so their tables cover the same commits and can be read side by side. A commit that carries data contributes one row per observation (clean before dirty, each flagged); a commit with no data point reads n/a, still naming the commit and its title. Nothing caps the listing — use --since to bound the range.

The JSON form carries the same rows in the same order, with full precision and each commit’s full title (the text and Markdown tables truncate the title to 50 characters). A row for a commit with no data point has a null value and no clean/dirty flag.

The text and Markdown renderings lead each set with the same compact, topology-accurate line chart history-mode analyze draws — one column per first-parent commit over that set’s own observations, so a data-less commit is a gap. The chart trims its own leading gap, so a late-starting set draws a chart that begins after its table does: the table is the complete commit listing, the chart is the shape of the series.

Example output

This example reads Folo’s configured Azure history from a checkout of folo-rs/folo with access to that store. The explicit discriminants select one machine’s Criterion measurements; --since and --context keep the example to a short, fixed commit range.

cargo bench-history examine \
    --benchmark nm_rendering/histogram/low --metric wall_time \
    --engine criterion --target-triple x86_64-unknown-linux-gnu \
    --machine-key 76110f7cbbb5a5e0 \
    --context 9d8a0e9fecb4 --since 2026-10-04

The command’s standard output is:

Data points for nm_rendering/histogram/low metric wall_time (ns) in project folo

criterion/x86_64-unknown-linux-gnu/76110f7cbbb5a5e0
 318 ┤╭─
 318 ┤│
 317 ┼╯
 317 ┤
 317 ┤      ─

  fa46c688294e  317.5  cbh_render: cover benchmark fixture and assertion
  28ea10960d65  318.4  cargo-release-plan: add disposable immutable Git c
  b20d4fb8c9a9    n/a  cargo-bench-history: cover snapshot handoff guards
  55826362cbe5    n/a  cargo-release-plan: retain acquisition reuse witho
  72317eb2fcc4    n/a  cargo-release-plan: retain bounded batching and ad
  6680f32591c1    n/a  cargo-release-plan: retain reuse without decision
  5a114314c8e1    n/a  cargo-release-plan: cover storage-free compatibili
  9d8a0e9fecb4  316.6  cargo-release-plan: propagate breaks through defin

The values are wall time in nanoseconds. The n/a rows have no measurement in this selection, not a zero value; the matching gap remains visible in the chart. Selection diagnostics go to standard error and are not part of this listing.