mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-27 02:05:07 +02:00
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.
15 lines
372 B
Plaintext
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
|