Bug 1855099 [wpt PR 42158] - Switch RuleMap to a custom hash table., a=testonly
commit3c9cca79ba5967c8d480e8ca7d4b1e49326c5f71
authorSteinar H. Gunderson <sesse@chromium.org>
Wed, 27 Sep 2023 12:19:03 +0000 (27 12:19 +0000)
committermoz-wptsync-bot <wptsync@mozilla.com>
Thu, 28 Sep 2023 14:59:14 +0000 (28 14:59 +0000)
tree576b653be069586cfd2ae7870674b86f05ab3903
parent59b4914d157b387af8bc27b8afb797a36c2d168d
Bug 1855099 [wpt PR 42158] - Switch RuleMap to a custom hash table., a=testonly

Automatic update from web-platform-tests
Switch RuleMap to a custom hash table.

A significant part of style (~6%) is doing lookups in RuleMaps,
specifically in AtomicString-indexed hash tables. These currently
use WTF::HashTable, but we can do better with a custom
hash table implementation. Thus, we implement RobinHoodMap,
a lookup-optimized variant with higher load factor and thus
tighter memory footprint.

One direct consequence of this is less RAM usage; e.g. Social1
reports ~460 kB less PartitionAlloc memory allocated (most subtests
have smaller hash tables, though, since they have fewer rules).
But we also get less cache pressure. The exact result depends
on the CPU; smaller/slower caches give more gains, less sophisticated
branch predictors give less gains. In general, most seem to be
around neutral, but Intel CPUs give a fairly good gain. Inserts
are slightly slower and lookups are faster, so repeated style
application should get larger gains. Of course, in the style
perftest, we have the cache all to ourselves, so it will tend to
underestimate these effects somewhat.

Style perftest (Alder Lake P-cores, LTO but no PGO):

Initial style (µs)     Before     After    Perf      95% CI (BCa)
=================== ========= ========= ======= =================
ECommerce                4491      4484   +0.1%  [ -0.6%,  +0.8%]
Encyclopedia            40679     39868   +2.0%  [ +1.1%,  +2.9%]
Extension               53970     53971   -0.0%  [ -0.8%,  +0.7%]
News                    19728     19325   +2.1%  [ +0.9%,  +3.2%]
Search                   6316      6176   +2.3%  [ +1.1%,  +3.4%]
Social1                 11547     11753   -1.8%  [ -2.8%,  -0.7%]
Social2                  7383      7281   +1.4%  [ +0.4%,  +2.3%]
Sports                  20644     20580   +0.3%  [ -0.8%,  +1.4%]
Video                   16020     16064   -0.3%  [ -1.1%,  +0.5%]
Geometric mean                            +0.7%  [ +0.1%,  +1.2%]

Recalc style (µs)      Before     After    Perf      95% CI (BCa)
=================== ========= ========= ======= =================
ECommerce                5011      4958   +1.1%  [ +0.3%,  +1.8%]
Encyclopedia            32407     31336   +3.4%  [ +2.6%,  +4.3%]
Extension               49217     48970   +0.5%  [ -0.3%,  +1.2%]
News                    15065     14569   +3.4%  [ +2.3%,  +4.4%]
Search                   2911      2771   +5.0%  [ +4.3%,  +5.9%]
Social1                  7417      7271   +2.0%  [ +0.8%,  +3.0%]
Social2                  5634      5548   +1.5%  [ +0.6%,  +2.4%]
Sports                  11345     11040   +2.8%  [ +1.9%,  +3.6%]
Video                   10659     10381   +2.7%  [ +1.8%,  +3.6%]
Geometric mean                            +2.5%  [ +1.9%,  +3.0%]

Change-Id: I3b25f24d0595b21ad5d5e354e2c03a390bddc5aa
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4866725
Commit-Queue: Steinar H Gunderson <sesse@chromium.org>
Reviewed-by: Anders Hartvoll Ruud <andruud@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1200933}

--

wpt-commits: 5e3b0aa36d05e39f840e2725fe9d9e9bc654c578
wpt-pr: 42158
testing/web-platform/tests/css/selectors/hash-collision.html [new file with mode: 0644]