Skip to content

Changelog

0.4.7 (2026-06-29)

Features

  • plot: clearer titles, axis labels, unit notes, and colorbars (#148) (9a7b66e)

0.4.6 (2026-06-29)

Features

  • plot -o exports a static image when the suffix is png/svg/pdf/... (#145) (#146) (ab2ab2c)

Bug Fixes

  • keep the baseline frame in the animated scatter (drop only when static) (#142) (e600841)

0.4.5 (2026-06-29)

Bug Fixes

  • plot --view scatter drew the baseline series as redundant ratio-1.0 points (#140) (aa24710), closes #139

0.4.4 (2026-06-29)

Features

  • --pivot comparison axis for compare/plot (fold one run along a config dim) (#137) (d0672f7)

0.4.3 (2026-06-29)

Features

  • benchmem compare accepts a single run (plain table) (#123) (96275d9)

0.4.2 (2026-06-18)

Bug Fixes

  • docs: pin mkdocs-typer2 >=0.4.1 and drop NO_COLOR workaround (#120) (db1453f)

0.4.1 (2026-06-17)

Features

  • benchmem flamegraph — one-step render of a kept profile (closes #114) (#118) (95d2f8d)
  • isolated RSS metric — opt-in whole-process peak memory (Phase 1 of #109) (#110) (782fec9)
  • native-trace capture for the kept memory profile (closes #113) (#117) (9ff5f2a)
  • reuse pedantic setup for memory samples — stateful benchmarks stay accurate (closes #105) (#106) (d1de57a)
  • rss isolate is marker-only opt-in; warn on heavy pickled actions (#115) (fc2e4cf)
  • warmup pass + measure memory before timing (cold floor) (#108) (95c021b)

0.4.0 (2026-06-16)

⚠ BREAKING CHANGES

  • benchmem plot --metric is removed; use --columns (e.g. 'plot run.json --columns peak'). Mirrors the compare --metric -> --columns rename.

Features

  • plot selects the metric via --columns (parity with compare) + 0.3.0 README refresh (#102) (85443dd)
  • timed|untimed divider in compare; CLI-showcase README + Python 3.14 (#104) (411987f)

0.3.0 (2026-06-16)

This release reshapes how a memory measurement is taken, stored, and reported. Each benchmark_memory run now samples adaptively and keeps its full per-repeat series instead of a single number — so you can ask how noisy a metric is (--stat min|mean|max|median|stddev) — and the terminal prints one combined timing + memory table. benchmem compare is rebuilt on pytest-benchmark's table model (rows per benchmark × run, a metric × stat column grid, relative (×) multipliers, --group-by / --columns). Plus a benchmem sweep CLI for cross-version runs, --where / --free-axes plot controls, action-scoped memory ceilings (@pytest.mark.benchmem(max_peak=...)), and --benchmark-memory-profile to keep a memray .bin for regressions.

Consolidating the metric surface around the per-repeat series retired a few redundant knobs — see the migration notes below.

⚠ BREAKING CHANGES

Pre-1.0 changes vs 0.2.1, each quick to migrate:

  • Saved memory JSON from 0.2.x no longer loads. The blob under extra_info["benchmem"] is now three flat per-repeat arrays (peak_bytes / allocations / total_bytes), with the headline derived on read; the old denormalized shape is not parsed. Migrate: re-run the suite with --benchmark-memory to regenerate the runs. Timing-only pytest-benchmark files are unaffected. (#75)
  • The peak_max metric is removed — it was peak reduced by max (a stat of a stat), so it couldn't itself take a --stat. Migrate: --columns peak --stat max. (#75)
  • The memory alias for peak is removed — it read like a category, not a synonym. Migrate: --columns peak. (#75)
  • The gross metric and the per-blob mode tag are removed — both were leftovers of the reverted RSS engine (gross had no producer and always errored; mode was a constant). Reading a legacy blob ignores a stray mode key, so no migration is needed. (#67)
  • benchmem compare selects metrics with --columns, not --metric. The table is now a metric × stat grid, so a comma list of metrics (--columns) paired with --stat replaces the single --metric. Migrate: --metric peak--columns peak. (#98, #101)

Features

Memory measurement * Adaptive sampling — passes run until the peak floor settles instead of a fixed count; --benchmark-memory-repeats still forces a fixed count for reproducible gating. (#97, #79) * Per-repeat series with --stat distributions, min/mean/max spread columns, and --benchmark-memory-columns / -stats selection. (#72, #76) * Action-scoped absolute ceilings via @pytest.mark.benchmem(max_peak=…, max_allocated=…, max_allocations=…). (#86) * --benchmark-memory-profile DIR keeps the memray .bin for regressions (or every measured benchmark), to render with memray flamegraph. (#100, closes #24) * Actionable error when a memray Tracker is already active (e.g. pytest-memray on the same test). (#89)

Tables & compare * One combined timing + memory table by default. (#65, #68) * benchmem compare rebuilt on pytest-benchmark's table model — rows per (benchmark × run), a metric × stat column grid with --columns / --group-by / --metric both, relative (×) multipliers, plus --csv / --sort. (#98, #101, #74)

Plotting * --where KEY=VALUE row filter, --free-axes x|y|both for faceted views, and min…max spread whiskers on scaling plots. (#93, #95, #99)

CLI * benchmem sweep — cross-version sweeps without a harness. (#87) * Caller-labelled snapshots, decoupling series names from filenames. (#57)

Bug Fixes

  • compare no longer crashes when two runs share a file stem. (#64)

0.2.1 (2026-06-13)

Features

  • add rss memory mode — kernel resident high-water via a forked child (#51) (c4ccd12)
  • add peak_max and gross metrics; error on metric/mode mismatch (#55) (df45d1f)
  • built-in node.* dims (module/func/class/group), selectable in plots (#54) (937ca0f)
  • tag memory blobs with a mode and refuse to mix modes (#40) (4251e16)

Bug Fixes

  • accept str and single-path snapshots in plot_* and load_long_df (#52) (fdbc343)
  • keep only scalar dims, dropping unserializable and structured values (#45) (71cb05d)
  • metric ergonomics — correct allocated label, accept memory alias (#53) (a61c9be)

Reverts

0.2.0 (2026-06-13)

⚠ BREAKING CHANGES

  • mirror memray's metrics — add total memory allocated (#39)
  • memory regression gate, @pytest.mark.benchmem, bytes blob migration (#32)

Features

  • empirical scaling fit — report O(n^x) over a size sweep (#36) (4bc6e46)
  • memory regression gate, @pytest.mark.benchmem, bytes blob migration (#32) (654c582)
  • mirror memray's metrics — add total memory allocated (#39) (0b6fad6)

Bug Fixes

  • correct release-please pre-major key so feat! bumps 0.2.0 not 1.0.0 (#41) (fac21e0)

0.1.0 (2026-06-13)

⚠ BREAKING CHANGES

  • rename package peakbench → pytest-benchmem (#10)
  • pivot to the memory companion to pytest-benchmark (#7)

Features

  • --benchmark-memory flag to augment existing benchmark() calls (#16) (aff17c7)
  • pivot to the memory companion to pytest-benchmark (#7) (52f2b6b)
  • resolve #2 — drop select=, bless filter-before-convert (89fbfcd)

Miscellaneous Chores

  • release pytest-benchmem as 0.1.0 (#13) (8e51760)

Code Refactoring

  • rename package peakbench → pytest-benchmem (#10) (1e48259)

0.1.0 (2026-06-13)

⚠ BREAKING CHANGES

  • rename package peakbench → pytest-benchmem (#10)
  • pivot to the memory companion to pytest-benchmark (#7)

Features

  • pivot to the memory companion to pytest-benchmark (#7) (52f2b6b)

Miscellaneous Chores

  • release pytest-benchmem as 0.1.0 (#13) (8e51760)

Code Refactoring

  • rename package peakbench → pytest-benchmem (#10) (1e48259)

0.0.1 (2026-06-13)

Features

  • resolve #2 — drop select=, bless filter-before-convert (89fbfcd)