From 3c9cca79ba5967c8d480e8ca7d4b1e49326c5f71 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Wed, 27 Sep 2023 12:19:03 +0000 Subject: [PATCH] Bug 1855099 [wpt PR 42158] - Switch RuleMap to a custom hash table., a=testonly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Anders Hartvoll Ruud Cr-Commit-Position: refs/heads/main@{#1200933} -- wpt-commits: 5e3b0aa36d05e39f840e2725fe9d9e9bc654c578 wpt-pr: 42158 --- .../tests/css/selectors/hash-collision.html | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 testing/web-platform/tests/css/selectors/hash-collision.html diff --git a/testing/web-platform/tests/css/selectors/hash-collision.html b/testing/web-platform/tests/css/selectors/hash-collision.html new file mode 100644 index 000000000000..04f15e758873 --- /dev/null +++ b/testing/web-platform/tests/css/selectors/hash-collision.html @@ -0,0 +1,45 @@ + + + + Test string hash collision in bucketing + + + + + + + +
Some text
+ + +