[webkit-dev] SVG Stabilization
Oliver Hunt
ojh16 at student.canterbury.ac.nz
Sun Feb 25 16:26:17 PST 2007
>>
>> This covers the "hairy" parts. Complex deep references, circular
>> references,
>> self-references. All test work excellent w/o crashs or leaks.
>
> How about cases like this:
>
> - <use> referencing <g> which contains another <use> referencing
> something else (valid double use chain).
> - valid <use> chains of larger size, like 2 or 3
> - <use> inside one <g> referencing another <g> which contains a
> <use> reference back to the original <g> (loop with two <use>
> elements referencing each other's parents)
> - <use> inside a marker
> - <use> referencing a path with markers
> - <use> referencing a path with markers which themselves contain
> <use> references (valid ones)
> - <use> referencing a path with markers which themselves contain
> <use> references to a parent of the original <use> (invalid loop
> via markers)
>
> I'm sure there must be other complex cross-referencing cases along
> these lines.
Dealing with loops is relatively trivial (we already have do this for
the toString and join methods on JS/DOM arrays) so i don't think
those are significant problems (though obviously we would need a few
test cases to ensure that we actually stop them -- saying we have,
when we haven't would cause badness). Briefly the paint method would
require (very-pseudo-code, and i'm not sure whether this logic should
occur in the paint code, or when constructing the render tree)
SVGUseElemenT::paint(...)
{
static HashSet<SVGUseElement*> paintedElems;
if (paintedElems.contains(this))
return;
paintedElems.add(this)
...
magical painting code
...
paintedElems.remove(this)
}
Now this might cause us to incorrectly filter out some nodes (i
vaguely recall svg provides a few flow control structures, which
might in effect cause they same use element to render differently in
different cases, i haven't really looked into it). That said, I
doubt this will occur in a significant number of cases, and in the
mean time at least this seems to be an acceptable mechanism for
preventing looping badness.
As for the non-looping issues, i haven't really though about it in
enough detail to be able to comment
--Oliver
More information about the webkit-dev
mailing list