Repository navigation
test(List): the busy release proof starts its block in the page - #10048
Conversation
The proof that a row's release keeps fading while the main thread is blocked sent its block from the test once the release ran. On a busy machine the block started late in the 125 ms release, so two or three frames were left to judge, and their drop could stay under the 0.2 the proof asks for. The page now starts the block itself, a frame into the release (blockMainThread with during, armed with the tap). A watch taken before the tap gives the release's timing.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
AI review status for this pull request.
|
PR Analysis Report🔎 Preview ·
|
| Component | Size | LoC | Visual · A11y · RTL |
|---|---|---|---|
| List | 5.4 kB (0) · 469 B CSS (0) | — | ✓ · ✓ · — |
| ListItem | 58.7 kB (0) · 10.7 kB CSS (0) | — | ✓ · ✓ · ✓ |
Package size: measured; main has no measurement of the merge base to compare yet.
API changes: cli +8 · ~1 · −0 (against the merge base's committed report)
Committed API report behind this build: cli 9 rows, core 4 rows; run pnpm api:report.
9 API changes (advisory)
| Package | Where | Signature | Usage | |
|---|---|---|---|---|
| + | cli |
./api · Types · type SearchResultEntry |
deprecated?: ComponentDeprecation | undefined |
import type {SearchResultEntry} from '@astryxdesign/cli/api'; const x: SearchResultEntry = {deprecated: …} |
| + | cli |
./authoring · Types · interface ComponentDeprecation |
interface ComponentDeprecation |
import type {ComponentDeprecation} from '@astryxdesign/cli/authoring' |
| + | cli |
./authoring · Types · interface MultiComponentDoc |
deprecated?: ComponentDeprecation |
import type {MultiComponentDoc} from '@astryxdesign/cli/authoring'; const x: MultiComponentDoc = {deprecated: …} |
| + | cli |
./authoring · Types · interface SingleComponentDoc |
deprecated?: ComponentDeprecation |
import type {SingleComponentDoc} from '@astryxdesign/cli/authoring'; const x: SingleComponentDoc = {deprecated: …} |
| + | cli |
./doc · Types · interface ComponentBaseDoc |
deprecated?: ComponentDeprecation |
import type {ComponentBaseDoc} from '@astryxdesign/cli/doc'; const x: ComponentBaseDoc = {deprecated: …} |
| + | cli |
./doc · Types · interface SubComponentDoc |
deprecated?: ComponentDeprecation |
import type {SubComponentDoc} from '@astryxdesign/cli/doc'; const x: SubComponentDoc = {deprecated: …} |
| + | cli |
./doc · Also exported from an earlier entry point · ComponentDeprecation |
ComponentDeprecation (./authoring) |
import {ComponentDeprecation} from '@astryxdesign/cli/doc' |
| + | cli |
./template · Also exported from an earlier entry point · ComponentDeprecation |
ComponentDeprecation (./authoring) |
import {ComponentDeprecation} from '@astryxdesign/cli/template' |
| ~ | cli |
./api · Functions · function search |
function search: (query: string, options?: { cwd?: string | undefined; type?: "template" | "component" | "hook" | "theme" | "doc" | undefined; limit?: number | undefined }) => Promise<SearchResponse> → function search: (query: string, options?: { cwd?: string | undefined; type?: "template" | "component" | "doc" | "theme" | "hook" | undefined; limit?: number | undefined }) => Promise<SearchResponse> |
import {search} from '@astryxdesign/cli/api'; search(…) |
Touched components checked; add ci:run-visual, ci:run-a11y or ci:run-rtl to run the full suites.
Generated by PR Enrichment workflow | View full report
There was a problem hiding this comment.
Approved pending CI: CI has not run on this head yet. This is a draft from a fork, so CI runs once it is marked ready for review with the ci:run label, which a maintainer adds.
Arming the block in the page with blockMainThread's during keeps every assertion of the busy-release proof and removes the test-side round trips that let the block land late in the 125 ms release; the proof still fails when the release runs on the main thread.
[Automated review]
There was a problem hiding this comment.
Approved. Arming the block in the page with blockMainThread's during option keeps every assertion of the busy-release proof and removes the test-side round trips that let the block land late in the 125 ms release. The proof still fails when the release runs on the main thread, and CI's interaction run passes on this head.
[Automated review]
Maintainer impact
ListRowPress's "the release keeps fading on every frame while the main thread is blocked" (List row, Item row in a scroller, TreeList row) fails on busy runners: the first judged frame is too close to the last, for example 0.538 against more than 0.585. In Chromium pinned to two cores, main failed the scroller row 3 of 25 times at 1 worker today, and once in a whole-file run at 4 workers.
Intended invariant
component:ListFR11 and its verification row: a row's release keeps fading while the main thread is blocked, on the compositor (spec:AST-094FR5). What the proof asserts is unchanged.Change
The proof waited for the release from the test, then sent a 700 ms block. The release lasts 125 ms, so the later the block started, the less of the release it covered. In one recorded run the block started 47 ms in and left three frames to judge, and such a drop can stay under the 0.2 the proof asks for. The page now starts the block itself, a frame into the release:
blockMainThreadwithduring, armed with the tap, as the harness documents for a short motion. A watch taken before the tap gives the release's timing.Evidence
One machine and one build, the arms alternated:
Scope
Testing
The arms above, as commits not for landing:
main: d557c49;rowPressLayerStyles.cell): 1b44761.The rest of the spec file passes in Chromium on the pin and in WebKit, except two cases main fails too: the held-row curve proof under load (its own pull request) and the WebKit video case (#10011).