Re: Significant performance degradation related to foreignObjects with scrollbars

Robert Longson <[email protected]>
Newsgroups gmane.comp.mozilla.devel.svg
Organization http://groups.google.com
Message-ID <[email protected]>
Steve,

Anytime anything changes anywhere on the screen we redraw all
foreignObjects. We do that to mask artifacts that occur if you try to
rerender part of the foreignObject. If you want to fix it, I can
provide some pointers to the code to look at:

a) nsSVGForeignObjectFrame::PaintSVG does not pass a transformed?
dirty rect but instead uses nsRegion(kid->GetRect()) which is the
whole area
b) nsSVGForeignObjectFrame::InvalidateDirtyRect contains
rect.UnionRect(rect, mRect); so that it invalidates the whole object.

You would need to fix these and then do the harder job of determining
why rendering goes wrong if you redraw just part of the foreignObject.

It might be possible to do something simpler and check whether
aDirtyRect overlaps kid->GetRect() at all in a) and just redraw if
there is any overlap at all. That would likely help your case.

Bug https://bugzilla.mozilla.org/show_bug.cgi?id=418063 is tracking
this issue.

BTW on windows I only see the scrollbar effect. The anomolous region
effect does not seem to occur for me.

Best regards

Robert
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.