perf: compare each benchmark in adjacent app processes - #1612
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
mrousavy
force-pushed
the
perf/per-case-comparison
branch
from
September 7, 2026 10:53
77c4d5c to
816875f
Compare
mrousavy
marked this pull request as ready for review
September 7, 2026 10:56
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
For a given benchmark, base and head currently run minutes apart across four complete suite passes. Install the two Release apps side by side and measure each case as calibration → base → head before moving to the next case. This reduces a 46-case comparison from 230 fresh app processes to 138 while keeping identical operation counts, five warmups, and twenty samples per measurement.
Base retains its app ID; head uses
.headthrough Gradle and Xcode build settings. Same-SHA checks reuse the exact same binary for both roles. Changed suites retain head-only baselines. The controller owns one case loop. Raw per-process JSON, artifact provenance, and measurement-only reruns remain available. Reporting accepts one pair and explicitly does not claim between-launch repeatability or statistical confidence.CI results
The PR workflow passed. Compared with the previous cleanup run:
The entire workflow took 38m09s, versus 49m10s previously. These are observations from separate hosted runners, not a controlled estimate of repeatable speedup. All 46 calibration/base/head triples on each platform had matching benchmark IDs and work counts, and all 138 process timestamps followed the intended order.
Accuracy remains limited, especially on iOS. This PR does not change the measured function implementations, yet 2/46 Android cases and 23/46 iOS cases showed changes above 5%; the largest iOS difference was about 42%. Some buffer/callback workloads still drift within a process. Closer pairing is not enough to make a 3% regression gate trustworthy.
The separate exact-same-binary A/A diagnostic also passed. The saved base/head app artifacts were verified byte-for-byte identical on both platforms, and every calibration/base/head triple preserved matching work and case order.
These are descriptive results from one diagnostic run, not calibrated error rates. They demonstrate that this iOS environment remains unsuitable for treating small observed differences as regressions. The change saves time and brings comparisons closer together; it does not solve iOS measurement reliability. Results remain report-only. Download the A/A raw JSON.
Download the PR's raw JSON artifact. The new trusted validator rebuilt Markdown and Bencher JSON locally from that artifact against GitHub's actual run, PR, and artifact metadata. No local publication was performed.
Validation and rollout
74 tooling tests passed, including real controller/receiver fixtures for Android and iOS, app identity and process ordering, A/A reuse, changed suites, malformed results, and artifact packaging. Tooling/app typechecks, app lint, actionlint, shellcheck, and diff checks passed. The original PR run at
77c4d5c3passed all checks, including both native Release builds and measurements. Both downloaded CI artifacts also passed the measured revision’s trusted report validator against GitHub metadata.Originally stacked on #1609. The results above measure
77c4d5c3, before the later rebase to816875faand merge. The benchmark app and measurement controller are unchanged by that rebase. Its replacement CI run is still running; the superseded run was cancelled before executing jobs. At the time of the measured PR run, main's reporter skipped this internal PR, so the new report was validated locally without adding a temporary publishing path.