Files
ladybird/Tests/LibWeb/Text/expected/css/custom-property-chain-resolution.txt
Andreas Kling 9e8e568b43 LibWeb: Use structural sharing for CSS custom properties
Replace per-element OrderedHashMap storage for custom properties with
a RefCounted chain (CustomPropertyData) that enables structural
sharing. Each chain node stores only the properties declared directly
on its element, with a parent pointer to the inherited chain.

Elements that don't override any custom properties share the parent's
data directly (just a RefPtr copy). During cascade, only entries that
actually differ from the parent are stored in own_values - the rest
are inherited through the chain. During var() resolution, resolved
values are compared against the parent's and matching entries are
dropped, enabling further sharing.

The chain uses a depth limit (max 32) with flattening, plus
absorption of small parent nodes (threshold 8) to keep lookups fast.

This reduces custom property memory from ~79 MB to ~5.7 MB on
cloudflare.com.
2026-02-13 14:57:15 +01:00

15 lines
372 B
Plaintext

=== var() through chain ===
child color: rgb(0, 128, 0)
parent --ref-color: green
child --ref-color (inherited): green
=== inherit keyword ===
inherit-parent: from-parent
inherit-child: overridden
inherit-grandchild: overridden
=== unset keyword ===
unset-child: "root-value"
=== var() fallback ===
fallback: fallback-value
=== Multiple var() ===
combined: hello red 10px