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

Reply via email to