Tracking and invalidation of relative lengths is largely (but not entirely) managed via the DOM structure (SVGElement::m_elementsWithRelativeLengths and associated methods.) Tracking however seems better suited for the layout tree, since during layout we need to check geometry properties et.c to determine layout properties (and also traverse the containers.) Invalidation could still be performed based on outer stimuli (although currently that's either done just before or during layout a bit depending.)
Tracking via the layout tree would probably require 1-2 bits of storage per relevant LayoutObject-subclass (tentatively: 1 bit for "leaves", maybe 2 bits for containers) compared to one HeapHashSet<...> per SVGElement. Some operation might be slower (invalidation traversal might require virtual dispatch), but tracking could piggyback on the regular layout traversal.
There's also some bugs here currently with that geometry properties are not tracked properly, like:
https://jsfiddle.net/e233tf4e/
which would hopefully be more straightforward to fix/handle if tracking via the layout tree.
Comment 1 by schenney@chromium.org
, Apr 7 2017