Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 45c84516b21575dd519df1bef0ce7c31333f04ec
https://github.com/WebKit/WebKit/commit/45c84516b21575dd519df1bef0ce7c31333f04ec
Author: Antti Koivisto <[email protected]>
Date: 2026-05-12 (Tue, 12 May 2026)
Changed paths:
M LayoutTests/TestExpectations
M
LayoutTests/fast/selectors/attribute-contains-value-matching-is-ascii-case-insensitive-expected.txt
M
LayoutTests/fast/selectors/attribute-contains-value-matching-is-ascii-case-insensitive.html
M
LayoutTests/fast/selectors/attribute-endswith-value-matching-is-ascii-case-insensitive-expected.txt
M
LayoutTests/fast/selectors/attribute-endswith-value-matching-is-ascii-case-insensitive.html
M
LayoutTests/fast/selectors/attribute-exact-value-match-is-ascii-case-insensitive-expected.txt
M
LayoutTests/fast/selectors/attribute-exact-value-match-is-ascii-case-insensitive.html
M
LayoutTests/fast/selectors/attribute-hyphen-value-matching-is-ascii-case-insensitive-expected.txt
M
LayoutTests/fast/selectors/attribute-hyphen-value-matching-is-ascii-case-insensitive.html
M
LayoutTests/fast/selectors/attribute-list-value-matching-is-ascii-case-insensitive-expected.txt
M
LayoutTests/fast/selectors/attribute-list-value-matching-is-ascii-case-insensitive.html
M
LayoutTests/fast/selectors/attribute-startswith-value-matching-is-ascii-case-insensitive-expected.txt
M
LayoutTests/fast/selectors/attribute-startswith-value-matching-is-ascii-case-insensitive.html
M LayoutTests/fast/selectors/case-insensitive-attribute-bascis-expected.txt
M LayoutTests/fast/selectors/case-insensitive-attribute-bascis.html
M
LayoutTests/fast/selectors/case-insensitive-attribute-register-requirement-1-expected.txt
M
LayoutTests/fast/selectors/case-insensitive-attribute-register-requirement-1.html
M LayoutTests/fast/selectors/is-backtracking-expected.txt
M LayoutTests/fast/selectors/is-backtracking.html
M LayoutTests/fast/selectors/is-complex-expected.txt
M LayoutTests/fast/selectors/is-complex.html
M
LayoutTests/fast/selectors/is-selector-list-ending-with-never-matching-selectors-expected.txt
M
LayoutTests/fast/selectors/is-selector-list-ending-with-never-matching-selectors.html
M LayoutTests/fast/selectors/is-selector-list-expected.txt
M LayoutTests/fast/selectors/is-selector-list.html
M LayoutTests/fast/selectors/matches-backtracking-expected.txt
M LayoutTests/fast/selectors/matches-backtracking.html
M LayoutTests/fast/selectors/matches-complex-expected.txt
M LayoutTests/fast/selectors/matches-complex.html
M
LayoutTests/fast/selectors/matches-selector-list-ending-with-never-matching-selectors-expected.txt
M
LayoutTests/fast/selectors/matches-selector-list-ending-with-never-matching-selectors.html
M LayoutTests/fast/selectors/matches-selector-list-expected.txt
M LayoutTests/fast/selectors/matches-selector-list.html
M LayoutTests/fast/selectors/not-backtracking-expected.txt
M LayoutTests/fast/selectors/not-backtracking.html
M LayoutTests/fast/selectors/not-basics-expected.txt
M LayoutTests/fast/selectors/not-basics.html
M LayoutTests/fast/selectors/not-nested-expected.txt
M LayoutTests/fast/selectors/not-nested.html
M
LayoutTests/fast/selectors/not-selector-list-ending-with-never-matching-selectors-expected.txt
M
LayoutTests/fast/selectors/not-selector-list-ending-with-never-matching-selectors.html
M LayoutTests/fast/selectors/not-selector-list-expected.txt
M LayoutTests/fast/selectors/not-selector-list.html
M LayoutTests/fast/selectors/nth-child-basics-expected.txt
M LayoutTests/fast/selectors/nth-child-basics.html
M LayoutTests/fast/selectors/nth-child-matching-first-expected.txt
M LayoutTests/fast/selectors/nth-child-matching-first.html
M LayoutTests/fast/selectors/nth-child-of-basics-2-expected.txt
M LayoutTests/fast/selectors/nth-child-of-basics-2.html
M LayoutTests/fast/selectors/nth-child-of-basics-expected.txt
M LayoutTests/fast/selectors/nth-child-of-basics.html
M LayoutTests/fast/selectors/nth-child-of-chained-2-expected.txt
M LayoutTests/fast/selectors/nth-child-of-chained-2.html
M LayoutTests/fast/selectors/nth-child-of-chained-3-expected.txt
M LayoutTests/fast/selectors/nth-child-of-chained-3.html
M LayoutTests/fast/selectors/nth-child-of-complex-selectors-expected.txt
M LayoutTests/fast/selectors/nth-child-of-complex-selectors.html
M
LayoutTests/fast/selectors/nth-child-of-never-matching-selector-expected.txt
M LayoutTests/fast/selectors/nth-child-of-never-matching-selector.html
M LayoutTests/fast/selectors/nth-child-of-register-requirement-expected.txt
M LayoutTests/fast/selectors/nth-child-of-register-requirement.html
M
LayoutTests/fast/selectors/nth-child-of-selector-list-ending-with-never-matching-selectors-expected.txt
M
LayoutTests/fast/selectors/nth-child-of-selector-list-ending-with-never-matching-selectors.html
M LayoutTests/fast/selectors/nth-child-of-selector-list-expected.txt
M LayoutTests/fast/selectors/nth-child-of-selector-list.html
M LayoutTests/fast/selectors/nth-child-of-with-invalid-An+B-expected.txt
M LayoutTests/fast/selectors/nth-child-of-with-invalid-An+B.html
M LayoutTests/fast/selectors/nth-last-child-basics-expected.txt
M LayoutTests/fast/selectors/nth-last-child-basics.html
M LayoutTests/fast/selectors/nth-last-child-matching-first-expected.txt
M LayoutTests/fast/selectors/nth-last-child-matching-first.html
M
LayoutTests/fast/selectors/nth-last-child-of-register-requirement-expected.txt
M LayoutTests/fast/selectors/nth-last-child-of-register-requirement.html
M
LayoutTests/fast/selectors/nth-last-child-of-selector-list-ending-with-never-matching-selectors-expected.txt
M
LayoutTests/fast/selectors/nth-last-child-of-selector-list-ending-with-never-matching-selectors.html
M LayoutTests/platform/mac-wk2/TestExpectations
M LayoutTests/platform/mac/TestExpectations
Log Message:
-----------
Fast selector tests are slow
https://bugs.webkit.org/show_bug.cgi?id=314632
rdar://176869942
Reviewed by Anne van Kesteren.
Many fast/selectors tests were slow on debug, with is-backtracking and
matches-backtracking both taking ~30s. The cost was dominated by harness
overhead, not CSS matching: testStyling() emitted one shouldBeEqualToString
call per element (~80 per selector x ~50 selectors = ~4000 eval'd
assertions per test), and each eval + output line is expensive on debug.
The inner expression also re-ran document.querySelectorAll("#test-root *")
on every iteration.
Batch the per-element assertions. For each selector, build the list of
element ids whose computed background indicates a match and compare to
the list of ids expected to match, in a single shouldBeEqualToString
call. Coverage is preserved: a failure shows the actual vs expected ids
so the diff points at the specific regressed element.
Drop the now-stale Slow/Timeout/Skip expectations for the affected tests
on Mac. iOS and GLib entries are left alone since the fix is not verified
on those platforms, but they are expected to benefit similarly.
Timings (debug, macOS arm64):
is-backtracking 30.4s -> 2.7s
matches-backtracking 30.3s -> 2.7s
not-backtracking 15.9s -> 1.6s
nth-child-of-register-requirement 18.3s -> 2.2s
nth-last-child-of-register-requirement ~18s -> 2.1s
case-insensitive-attribute-register-req-1 13.2s -> 8.1s (remaining
cost is the outer 20x-repeat loop that is the point of the test)
The batched-assertion pattern is applied uniformly to 37 tests in
fast/selectors/ that share the same testStyling() helper. Expected
output shrinks dramatically (net -33k lines) since each selector now
emits one PASS line instead of ~80.
* LayoutTests/TestExpectations: Remove stale Slow entries for
nth-child-of-basics, is-backtracking, matches-backtracking,
not-backtracking, nth-child-of-register-requirement,
nth-last-child-of-register-requirement, and
case-insensitive-attribute-register-requirement-1.
* LayoutTests/platform/mac/TestExpectations: Remove Pass Timeout for
is-backtracking and matches-backtracking.
* LayoutTests/platform/mac-wk2/TestExpectations: Remove Tahoe Debug
arm64 Skip for is-backtracking.
*
LayoutTests/fast/selectors/attribute-contains-value-matching-is-ascii-case-insensitive.html:
*
LayoutTests/fast/selectors/attribute-endswith-value-matching-is-ascii-case-insensitive.html:
*
LayoutTests/fast/selectors/attribute-exact-value-match-is-ascii-case-insensitive.html:
*
LayoutTests/fast/selectors/attribute-hyphen-value-matching-is-ascii-case-insensitive.html:
*
LayoutTests/fast/selectors/attribute-list-value-matching-is-ascii-case-insensitive.html:
*
LayoutTests/fast/selectors/attribute-startswith-value-matching-is-ascii-case-insensitive.html:
* LayoutTests/fast/selectors/case-insensitive-attribute-bascis.html:
*
LayoutTests/fast/selectors/case-insensitive-attribute-register-requirement-1.html:
* LayoutTests/fast/selectors/is-backtracking.html:
* LayoutTests/fast/selectors/is-complex.html:
*
LayoutTests/fast/selectors/is-selector-list-ending-with-never-matching-selectors.html:
* LayoutTests/fast/selectors/is-selector-list.html:
* LayoutTests/fast/selectors/matches-backtracking.html:
* LayoutTests/fast/selectors/matches-complex.html:
*
LayoutTests/fast/selectors/matches-selector-list-ending-with-never-matching-selectors.html:
* LayoutTests/fast/selectors/matches-selector-list.html:
* LayoutTests/fast/selectors/not-backtracking.html:
* LayoutTests/fast/selectors/not-basics.html:
* LayoutTests/fast/selectors/not-nested.html:
*
LayoutTests/fast/selectors/not-selector-list-ending-with-never-matching-selectors.html:
* LayoutTests/fast/selectors/not-selector-list.html:
* LayoutTests/fast/selectors/nth-child-basics.html:
* LayoutTests/fast/selectors/nth-child-matching-first.html:
* LayoutTests/fast/selectors/nth-child-of-basics-2.html:
* LayoutTests/fast/selectors/nth-child-of-basics.html:
* LayoutTests/fast/selectors/nth-child-of-chained-2.html:
* LayoutTests/fast/selectors/nth-child-of-chained-3.html:
* LayoutTests/fast/selectors/nth-child-of-complex-selectors.html:
* LayoutTests/fast/selectors/nth-child-of-never-matching-selector.html:
* LayoutTests/fast/selectors/nth-child-of-register-requirement.html:
*
LayoutTests/fast/selectors/nth-child-of-selector-list-ending-with-never-matching-selectors.html:
* LayoutTests/fast/selectors/nth-child-of-selector-list.html:
* LayoutTests/fast/selectors/nth-child-of-with-invalid-An+B.html:
* LayoutTests/fast/selectors/nth-last-child-basics.html:
* LayoutTests/fast/selectors/nth-last-child-matching-first.html:
* LayoutTests/fast/selectors/nth-last-child-of-register-requirement.html:
*
LayoutTests/fast/selectors/nth-last-child-of-selector-list-ending-with-never-matching-selectors.html:
Replace the per-element assertion loop in testStyling() with a batched
comparison of matched element ids.
*
LayoutTests/fast/selectors/attribute-contains-value-matching-is-ascii-case-insensitive-expected.txt:
*
LayoutTests/fast/selectors/attribute-endswith-value-matching-is-ascii-case-insensitive-expected.txt:
*
LayoutTests/fast/selectors/attribute-exact-value-match-is-ascii-case-insensitive-expected.txt:
*
LayoutTests/fast/selectors/attribute-hyphen-value-matching-is-ascii-case-insensitive-expected.txt:
*
LayoutTests/fast/selectors/attribute-list-value-matching-is-ascii-case-insensitive-expected.txt:
*
LayoutTests/fast/selectors/attribute-startswith-value-matching-is-ascii-case-insensitive-expected.txt:
* LayoutTests/fast/selectors/case-insensitive-attribute-bascis-expected.txt:
*
LayoutTests/fast/selectors/case-insensitive-attribute-register-requirement-1-expected.txt:
* LayoutTests/fast/selectors/is-backtracking-expected.txt:
* LayoutTests/fast/selectors/is-complex-expected.txt:
*
LayoutTests/fast/selectors/is-selector-list-ending-with-never-matching-selectors-expected.txt:
* LayoutTests/fast/selectors/is-selector-list-expected.txt:
* LayoutTests/fast/selectors/matches-backtracking-expected.txt:
* LayoutTests/fast/selectors/matches-complex-expected.txt:
*
LayoutTests/fast/selectors/matches-selector-list-ending-with-never-matching-selectors-expected.txt:
* LayoutTests/fast/selectors/matches-selector-list-expected.txt:
* LayoutTests/fast/selectors/not-backtracking-expected.txt:
* LayoutTests/fast/selectors/not-basics-expected.txt:
* LayoutTests/fast/selectors/not-nested-expected.txt:
*
LayoutTests/fast/selectors/not-selector-list-ending-with-never-matching-selectors-expected.txt:
* LayoutTests/fast/selectors/not-selector-list-expected.txt:
* LayoutTests/fast/selectors/nth-child-basics-expected.txt:
* LayoutTests/fast/selectors/nth-child-matching-first-expected.txt:
* LayoutTests/fast/selectors/nth-child-of-basics-2-expected.txt:
* LayoutTests/fast/selectors/nth-child-of-basics-expected.txt:
* LayoutTests/fast/selectors/nth-child-of-chained-2-expected.txt:
* LayoutTests/fast/selectors/nth-child-of-chained-3-expected.txt:
* LayoutTests/fast/selectors/nth-child-of-complex-selectors-expected.txt:
* LayoutTests/fast/selectors/nth-child-of-never-matching-selector-expected.txt:
* LayoutTests/fast/selectors/nth-child-of-register-requirement-expected.txt:
*
LayoutTests/fast/selectors/nth-child-of-selector-list-ending-with-never-matching-selectors-expected.txt:
* LayoutTests/fast/selectors/nth-child-of-selector-list-expected.txt:
* LayoutTests/fast/selectors/nth-child-of-with-invalid-An+B-expected.txt:
* LayoutTests/fast/selectors/nth-last-child-basics-expected.txt:
* LayoutTests/fast/selectors/nth-last-child-matching-first-expected.txt:
*
LayoutTests/fast/selectors/nth-last-child-of-register-requirement-expected.txt:
*
LayoutTests/fast/selectors/nth-last-child-of-selector-list-ending-with-never-matching-selectors-expected.txt:
Regenerate expected output for the new one-line-per-selector format.
Co-Authored-By: Claude Opus 4.7 <[email protected]>
Canonical link: https://commits.webkit.org/313073@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications