Changeset 135921 in webkit


Ignore:
Timestamp:
Nov 27, 2012 2:23:24 PM (11 years ago)
Author:
Alexandru Chiculita
Message:

[CSS Regions] Elements using transforms are not repainted correctly when rendered in a region
https://bugs.webkit.org/show_bug.cgi?id=102826

Reviewed by David Hyatt.

Source/WebCore:

When the page is composited, all the elements will have a composited repaint container. In that case we will
never catch the repaints in the RenderFlowThread, but they will go directly to the RenderView.
There's a single case when the parent composited layer of an element inside the RenderFlowThread will get
its own repaints. That case only happens when the parent composited layer is also part of the same flow thread.
Right now compositing is disabled for elements inside the RenderFlowThread, so that case doesn't even happen yet.
That will be fixed in https://bugs.webkit.org/show_bug.cgi?id=84900.

Test: fast/repaint/region-painting-in-composited-view.html

  • rendering/RenderObject.cpp:

(WebCore::RenderObject::containerForRepaint):

LayoutTests:

Added test file to check for repainting inside a RenderFlowThread when the page is in composited mode.

  • fast/repaint/region-painting-in-composited-view-expected.html: Added.
  • fast/repaint/region-painting-in-composited-view.html: Added.
Location:
trunk
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r135919 r135921  
     12012-11-27  Alexandru Chiculita  <achicu@adobe.com>
     2
     3        [CSS Regions] Elements using transforms are not repainted correctly when rendered in a region
     4        https://bugs.webkit.org/show_bug.cgi?id=102826
     5
     6        Reviewed by David Hyatt.
     7
     8        Added test file to check for repainting inside a RenderFlowThread when the page is in composited mode.
     9
     10        * fast/repaint/region-painting-in-composited-view-expected.html: Added.
     11        * fast/repaint/region-painting-in-composited-view.html: Added.
     12
    1132012-11-27  Tony Chang  <tony@chromium.org>
    214
  • trunk/Source/WebCore/ChangeLog

    r135920 r135921  
     12012-11-27  Alexandru Chiculita  <achicu@adobe.com>
     2
     3        [CSS Regions] Elements using transforms are not repainted correctly when rendered in a region
     4        https://bugs.webkit.org/show_bug.cgi?id=102826
     5
     6        Reviewed by David Hyatt.
     7
     8        When the page is composited, all the elements will have a composited repaint container. In that case we will
     9        never catch the repaints in the RenderFlowThread, but they will go directly to the RenderView.
     10        There's a single case when the parent composited layer of an element inside the RenderFlowThread will get
     11        its own repaints. That case only happens when the parent composited layer is also part of the same flow thread.
     12        Right now compositing is disabled for elements inside the RenderFlowThread, so that case doesn't even happen yet.
     13        That will be fixed in https://bugs.webkit.org/show_bug.cgi?id=84900.
     14
     15        Test: fast/repaint/region-painting-in-composited-view.html
     16
     17        * rendering/RenderObject.cpp:
     18        (WebCore::RenderObject::containerForRepaint):
     19
    1202012-11-27  Tony Chang  <tony@chromium.org>
    221
  • trunk/Source/WebCore/rendering/RenderObject.cpp

    r135447 r135921  
    12911291
    12921292    // If we have a flow thread, then we need to do individual repaints within the RenderRegions instead.
    1293     // Return the flow thread as a repaint container in order to create a chokepoint that allows us to change
     1293    // Return the flow thread as a repaint container in order to create a checkpoint that allows us to change
    12941294    // repainting to do individual region repaints.
    1295     // FIXME: Composited layers inside a flow thread will bypass this mechanism and will malfunction. It's not
    1296     // clear how to address this problem for composited descendants of a RenderFlowThread.
    1297     if (!repaintContainer && inRenderFlowThread())
    1298         repaintContainer = enclosingRenderFlowThread();
     1295    if (inRenderFlowThread()) {
     1296        RenderFlowThread* parentRenderFlowThread = enclosingRenderFlowThread();
     1297        // If we have already found a repaint container then we will repaint into that container only if it is part of the same
     1298        // flow thread. Otherwise we will need to catch the repaint call and send it to the flow thread.
     1299        if (!(repaintContainer && repaintContainer->inRenderFlowThread() && repaintContainer->enclosingRenderFlowThread() == parentRenderFlowThread))
     1300            repaintContainer = parentRenderFlowThread;
     1301    }
    12991302    return repaintContainer;
    13001303}
Note: See TracChangeset for help on using the changeset viewer.