Title: [259839] trunk/Source/WebCore
- Revision
- 259839
- Author
- [email protected]
- Date
- 2020-04-09 16:45:40 -0700 (Thu, 09 Apr 2020)
Log 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):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (259838 => 259839)
--- trunk/Source/WebCore/ChangeLog 2020-04-09 23:30:28 UTC (rev 259838)
+++ trunk/Source/WebCore/ChangeLog 2020-04-09 23:45:40 UTC (rev 259839)
@@ -1,3 +1,27 @@
+2020-04-09 Daniel Bates <[email protected]>
+
+ [ 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):
+
2020-04-09 David Kilzer <[email protected]>
Add using WTF::isInBounds to CheckedArithmetic.h
Modified: trunk/Source/WebCore/rendering/RenderWidget.cpp (259838 => 259839)
--- trunk/Source/WebCore/rendering/RenderWidget.cpp 2020-04-09 23:30:28 UTC (rev 259838)
+++ trunk/Source/WebCore/rendering/RenderWidget.cpp 2020-04-09 23:45:40 UTC (rev 259839)
@@ -292,6 +292,9 @@
if ((paintInfo.phase == PaintPhase::Outline || paintInfo.phase == PaintPhase::SelfOutline) && hasOutline())
paintOutline(paintInfo, LayoutRect(adjustedPaintOffset, size()));
+ // FIXME: Shouldn't check if the frame view needs layout during event region painting. This is a workaround
+ // for the fact that non-composited frames depend on their enclosing compositing layer to perform an event
+ // region update on their behalf. See <https://webkit.org/b/210311> for more details.
bool needsEventRegionContentPaint = paintInfo.phase == PaintPhase::EventRegion && is<FrameView>(m_widget) && !downcast<FrameView>(*m_widget).needsLayout();
if (paintInfo.phase != PaintPhase::Foreground && !needsEventRegionContentPaint)
return;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes