Repository navigation
EPBDS-16211: the tab document's perf ceilings follow what the runner measured - #222
Merged
Merged
Conversation
…measured #220 set them from the Apple M4's numbers, at the three-times ratio the runner shows for a mount: 330, 720 and 360 ms. #220's own browser-perf run measured 84, 143 and 39 ms: an action took the runner up to twice as long as the M4, not three times. At 720 ms, a switch three times as costly as now, as it was before #220, would have passed. They are 210, 360 and 100 ms now, two and a half times the runner's numbers and at least 100 ms for an action. The spec's note says what the runner's ratio to the M4 is for a mount and for an action.
AlexSamBY
added a commit
that referenced
this pull request
Oct 14, 2026
…de 200 fields (#226) ## What The browser check (`npm run test:perf`, the advisory `browser-perf` job) gains three documents. Until now, #220, #223 and #225 were held only by the jsdom contract (`later-mount-budget.test.js`), which counts field states and validators, not time. Each document is the 200-row table of the `tabs` document, a required text column and a bounded number column, beside 200 required fields: | document | the table is | actions, five runs each | |---|---|---| | `reveal` | shown by a `showIf` | showing it, and hiding it | | `popup` | in a popup | opening it, and closing it | | `expand` | in an Expand | expanding it, and collapsing it | The 200 fields beside the table are what made these actions cost: each field that came or went validated every one of them. - **How each action is timed.** It waits for a field of the table to be there, or to be gone. For a collapse, that is when the Expand's animation ends. - **Shared code.** The `tabs` document and these three share the table's declaration. The `tabs` test and these three share `alternate`, which times an action that brings the table and the one that takes it away, in turn. ## Ceilings They follow the header's rule: two and a half times what GitHub's runner measured, and at least 100 ms for an action. - **Where the numbers come from.** The runner's first measure of these documents, in this PR's own `browser-perf` run. - **A first version was wrong.** It estimated the ceilings from an Apple M4 at the ratios #222 found, and they came out 3.6 to 5.4 times what the runner then measured. The runner was quicker than those ratios: it took 0.95 to 1.4 times as long as the M4 for these actions, and 1.7 times as long for the mounts. A second commit sets the ceilings from the runner's numbers. | document / action | runner | ceiling | |---|---|---| | reveal: mount | 107 | 270 | | reveal: show | 109 | 270 | | reveal: hide | 39 | 100 | | popup: mount | 104 | 260 | | popup: open | 136 | 340 | | popup: close | 44 | 110 | | expand: mount | 112 | 280 | | expand: expand | 240 | 600 | | expand: collapse | 158 | 400 | **What they catch.** These ceilings flag a regression of the size #223 and #225 removed. On the M4, a popup's close took 447 ms before #223, and an Expand's collapse 535 before #225. A smaller one is the jsdom contract's to catch, as for every document here. #223's probe fix is one: it took the show from 153 ms to 98. ## Gates The PR changes the browser check, its documents and `CLAUDE.md` only. - **The first commit.** `lint:js`, `lint:css`, `typecheck`, `test:coverage`, `build`, `test:react16` and `test:react17` exit 0 on it, on Node 24.14.0, and so did all eight CI jobs. - **The ceilings' commit.** `lint:js` and `npm run test:perf` exit 0 on it. All eight documents are under their ceilings. - **What that run measured, on the M4,** today, which ran slower than yesterday, as it has before: `reveal` 111 / 148 / 48, `popup` 114 / 153 / 52, `expand` 148 / 241 / 181 (mount / bring / take away). #224 and #225 are merged. This branch merged master with `-s ours`, since master's tree is the tree it was stacked on. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
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.
What
The ceilings of the tab document in
e2e/perf/scenarios.perf.js, which #220 added, now follow what GitHub's runner measured.Why #220's were off. It set them from the Apple M4's numbers, at the three-times ratio the runner shows for a mount. An action took the runner up to twice as long as the M4, and the switch back as long as it, not three times. At 720 ms, a switch three times as costly as now, as it was before #220 (241 ms against 78 on the M4), would have passed.
What they are now: two and a half times the runner's numbers, and at least 100 ms for an action. The spec's note now says the runner takes about three times as long as the M4 for a mount, and up to twice as long for an action. It also says the ceilings are about two to three times the runner's numbers. Against #220's run they range from 2.2 times (the period table's blur) to 3.2 (the number table's mount).
Gates
On Node 24.14.0, these exit 0:
lint:js,lint:css,typecheckandbuild;test:coverage,test:react16andtest:react17;test:pack, andtest:perfwith the new ceilings.test:perfmeasured the tab document at 34, 66 and 36 ms on the M4. Only a comment's line breaks changed after that run.🤖 Generated with Claude Code