[Webkit-unassigned] [Bug 71733] New: Repaint broken when children of filtered SVG elements are updated

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Mon Nov 7 14:20:23 PST 2011


https://bugs.webkit.org/show_bug.cgi?id=71733

           Summary: Repaint broken when children of filtered SVG elements
                    are updated
           Product: WebKit
           Version: 528+ (Nightly build)
          Platform: All
        OS/Version: All
            Status: UNCONFIRMED
          Severity: Normal
          Priority: P2
         Component: SVG
        AssignedTo: webkit-unassigned at lists.webkit.org
        ReportedBy: jgw at chromium.org
                CC: zimmermann at kde.org


When a parent (e.g., <g>) SVG element has a filter applied, and one of its children is updated (in such a way that only a sub-rectangle of the outer element would normally need to be repainted), webkit re-renders the element incorrectly. You can see this in the attached HTML file -- both squares should be green, but the second usually turns up red, because the element doesn't repaint correctly when the child's fill color is updated (on a 1ms timer).

This bug manifests in several different ways -- the attached example is the simplest reproduction I could get. Generally speaking, what's happening is as follows:
- On the first paint, the SVG filter code allocates an ImageBuffer, paints the results of the filter into it, then caches it.
  - Subsequent repaints just use the cached ImageBuffer.
- When you update the child, it kicks off a repaint for the bounds of the child's RenderObject.
- When that paint comes back down the pipeline, the <g> with the filter applied allocates a new ImageBuffer.
- The PaintInfo specifies that only the child's bounds needs to be repainted.
- The filter's *new* ImageBuffer is only partially painted.
- This mostly works, because the part of the filter's ImageBuffer that overlaps the paint rectangle is copied to the screen.
- But the *next* time we repaint the <g> from this ImageBuffer cache, it only contains a subset of the pixels it needs.
- This causes seemingly-random parts of the <g> to get blown away visually.

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.



More information about the webkit-unassigned mailing list