Skip to content

EPBDS-16211: the tab document's perf ceilings follow what the runner measured - #222

Merged
AlexSamBY merged 1 commit into
masterfrom
tabs-ceilings
Oct 13, 2026
Merged

AlexSamBY merged 1 commit into
masterfrom
tabs-ceilings

Conversation

@AlexSamBY

Copy link
Copy Markdown
Member

What

The ceilings of the tab document in e2e/perf/scenarios.perf.js, which #220 added, now follow what GitHub's runner measured.

tabs ceiling in #220 runner, #220's own run ceiling now
mount 330 84 210
switch to the 200-row table 720 143 360
switch back 360 39 100

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, typecheck and build;
  • test:coverage, test:react16 and test:react17;
  • test:pack, and test:perf with the new ceilings.

test:perf measured 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

…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
AlexSamBY merged commit e136bdb into master Oct 13, 2026
8 checks passed
@AlexSamBY
AlexSamBY deleted the tabs-ceilings branch October 13, 2026 12:17
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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant