summaryrefslogtreecommitdiff
path: root/build.zig
diff options
context:
space:
mode:
Diffstat (limited to 'build.zig')
-rw-r--r--build.zig15
1 files changed, 15 insertions, 0 deletions
diff --git a/build.zig b/build.zig
index 48987edf..79de8a81 100644
--- a/build.zig
+++ b/build.zig
@@ -1282,6 +1282,18 @@ pub fn build(b: *std.Build) void {
run_perf.setCwd(b.path("."));
const perf_step = b.step("perf", "gesture latency or bounded terminal stress (-- [--json] [--reps N] [--base old.json] [--terminal-mib N])");
perf_step.dependOn(&run_perf.step);
+ // The gate: the 50k-line file's gestures against the baseline this
+ // build shape recorded, each within 3x of its best. Record one with
+ // `zig build perf -Dplatform=P [-Doptimize=O] -- --only medium
+ // --reps 10 --json > test/perf-baseline-P-O.json` (a build that is
+ // known good). ponytail: the numbers are this machine's; another
+ // machine records its own.
+ const perf_gate = b.addRunArtifact(perf);
+ perf_gate.has_side_effects = true;
+ perf_gate.setCwd(b.path("."));
+ perf_gate.addArgs(&.{ "--only", "medium", "--reps", "10", "--base", b.fmt("test/perf-baseline-{t}-{t}.json", .{ platform, optimize }), "--max-ratio", "3" });
+ const perf_gate_step = b.step("perf-gate", "fail when a gesture on the 50k-line file takes over 3x its recorded baseline (test/perf-baseline-<platform>-<optimize>.json)");
+ perf_gate_step.dependOn(&perf_gate.step);
const perf_tests = b.addTest(.{
.root_module = b.createModule(.{
.target = target,
@@ -1430,6 +1442,9 @@ pub fn build(b: *std.Build) void {
b.step("history", "compare command output and test/build runtime across jj revisions").dependOn(&run_history.step);
const unit_step = b.step("unit-test", "run native shell and module unit tests");
+ // The perf gate runs with every unit-test (a regression like a
+ // contrast search per grapheme costs 100x, far past the gate).
+ unit_step.dependOn(perf_gate_step);
const unit_match = testMatch(b, unit_profile, test_filters, unit_step);
const lspbench_tests = b.addTest(.{ .root_module = lspbench.root_module, .filters = test_filters });
const run_lspbench_tests = b.addRunArtifact(lspbench_tests);