⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 259839 in webkit


Ignore:
Timestamp:
Apr 9, 2020, 4:45:40 PM (6 years ago)
Author:
dbates@webkit.org
Message:

[ macOS debug wk2 ] REGRESSION(r259761): ASSERTION FAILED: !needsLayout() on fast/events/scroll-subframe-in-rendering-update.html
https://bugs.webkit.org/show_bug.cgi?id=210278
<rdar://problem/61517389>

Reviewed by Simon Fraser.

Add a comment to clarify that the needsLayout() check during EventRegion painting in
RenderWidget::paint() is a workaround for <https://bugs.webkit.org/show_bug.cgi?id=210278>:
it is needed because event regions are only stored on compositing layers. Following r259761
a non-composited frames can request their enclosing compositing layer to update the event
region on their behalf. Outside of this special request (tracked via RenderView::needsEventRegionUpdateForNonCompositedFrame())
we want to do what the code did pre-r259761 and bail out in RenderWidget::paint() when
asked to perform an event region paint. We cannot depend on RenderView::needsEventRegionUpdateForNonCompositedFrame()
though since it could be have been set by a deep nested non-composited child frame and
an intermediary child frame along the path may have had its layout dirtied. That is why
we check needsLayout(). Eventually the needsEventRegionUpdateForNonCompositedFrame() bit
will be serviced (and turned off) once all frames along the path to the originally requesting
frame lay out.

  • rendering/RenderWidget.cpp:

(WebCore::RenderWidget::paint):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r259833 r259839  
     12020-04-09  Daniel Bates  <dabates@apple.com>
     2
     3        [ macOS debug wk2 ] REGRESSION(r259761): ASSERTION FAILED: !needsLayout() on fast/events/scroll-subframe-in-rendering-update.html
     4        https://bugs.webkit.org/show_bug.cgi?id=210278
     5        <rdar://problem/61517389>
     6
     7        Reviewed by Simon Fraser.
     8
     9        Add a comment to clarify that the needsLayout() check during EventRegion painting in
     10        RenderWidget::paint() is a workaround for <https://bugs.webkit.org/show_bug.cgi?id=210278>:
     11        it is needed because event regions are only stored on compositing layers. Following r259761
     12        a non-composited frames can request their enclosing compositing layer to update the event
     13        region on their behalf. Outside of this special request (tracked via RenderView::needsEventRegionUpdateForNonCompositedFrame())
     14        we want to do what the code did pre-r259761 and bail out in RenderWidget::paint() when
     15        asked to perform an event region paint. We cannot depend on RenderView::needsEventRegionUpdateForNonCompositedFrame()
     16        though since it could be have been set by a deep nested non-composited child frame and
     17        an intermediary child frame along the path may have had its layout dirtied. That is why
     18        we check needsLayout(). Eventually the needsEventRegionUpdateForNonCompositedFrame() bit
     19        will be serviced (and turned off) once all frames along the path to the originally requesting
     20        frame lay out.
     21
     22        * rendering/RenderWidget.cpp:
     23        (WebCore::RenderWidget::paint):
     24
    1252020-04-09  David Kilzer  <ddkilzer@apple.com>
    226
  • trunk/Source/WebCore/rendering/RenderWidget.cpp

    r259821 r259839  
    293293        paintOutline(paintInfo, LayoutRect(adjustedPaintOffset, size()));
    294294
     295    // FIXME: Shouldn't check if the frame view needs layout during event region painting. This is a workaround
     296    // for the fact that non-composited frames depend on their enclosing compositing layer to perform an event
     297    // region update on their behalf. See <https://webkit.org/b/210311> for more details.
    295298    bool needsEventRegionContentPaint = paintInfo.phase == PaintPhase::EventRegion && is<FrameView>(m_widget) && !downcast<FrameView>(*m_widget).needsLayout();
    296299    if (paintInfo.phase != PaintPhase::Foreground && !needsEventRegionContentPaint)
Note: See TracChangeset for help on using the changeset viewer.