Changelog¶
0.4.7 (2026-06-29)¶
Features¶
0.4.6 (2026-06-29)¶
Features¶
Bug Fixes¶
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¶
0.4.3 (2026-06-29)¶
Features¶
0.4.2 (2026-06-18)¶
Bug Fixes¶
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
setupfor 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-memoryto regenerate the runs. Timing-only pytest-benchmark files are unaffected. (#75) - The
peak_maxmetric is removed — it waspeakreduced by max (a stat of a stat), so it couldn't itself take a--stat. Migrate:--columns peak --stat max. (#75) - The
memoryalias forpeakis removed — it read like a category, not a synonym. Migrate:--columns peak. (#75) - The
grossmetric and the per-blobmodetag are removed — both were leftovers of the reverted RSS engine (grosshad no producer and always errored;modewas a constant). Reading a legacy blob ignores a straymodekey, so no migration is needed. (#67) benchmem compareselects metrics with--columns, not--metric. The table is now a metric × stat grid, so a comma list of metrics (--columns) paired with--statreplaces 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¶
compareno longer crashes when two runs share a file stem. (#64)
0.2.1 (2026-06-13)¶
Features¶
- add
rssmemory 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
modeand 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¶
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¶
Code Refactoring¶
0.1.0 (2026-06-13)¶
⚠ BREAKING CHANGES¶
- rename package peakbench → pytest-benchmem (#10)
- pivot to the memory companion to pytest-benchmark (#7)