Title: [275607] trunk
Revision
275607
Author
[email protected]
Date
2021-04-07 08:54:58 -0700 (Wed, 07 Apr 2021)

Log Message

REGRESSION (r270849): Button content fails to render on apple.com "Blood Oxygen"/"ECG"
https://bugs.webkit.org/show_bug.cgi?id=224261

Reviewed by Simon Fraser.

Source/WebCore:

1. The changeRequiresRecompositeLayer check in RenderStyle::diff should come after
changeRequiresRepaintIfTextOrBorderOrOutline since RepaintIfTextOrBorderOrOutline is at
a higher priority in StyleDifference.
2. Ensure that we trigger setNeedsCompositingConfigurationUpdate on diff >= StyleDifference::RecompositeLayer.

Test: fast/text/text-repaint-when-pointer-event-property-changes.html

* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::layerStyleChanged):
* rendering/style/RenderStyle.cpp:
(WebCore::RenderStyle::diff const):

LayoutTests:

* fast/text/text-repaint-when-pointer-event-property-changes-expected.html: Added.
* fast/text/text-repaint-when-pointer-event-property-changes.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (275606 => 275607)


--- trunk/LayoutTests/ChangeLog	2021-04-07 14:47:57 UTC (rev 275606)
+++ trunk/LayoutTests/ChangeLog	2021-04-07 15:54:58 UTC (rev 275607)
@@ -1,3 +1,13 @@
+2021-04-07  Zalan Bujtas  <[email protected]>
+
+        REGRESSION (r270849): Button content fails to render on apple.com "Blood Oxygen"/"ECG"
+        https://bugs.webkit.org/show_bug.cgi?id=224261
+
+        Reviewed by Simon Fraser.
+
+        * fast/text/text-repaint-when-pointer-event-property-changes-expected.html: Added.
+        * fast/text/text-repaint-when-pointer-event-property-changes.html: Added.
+
 2021-04-07  Rob Buis  <[email protected]>
 
         Ignore non-null lastQuote ASSERT when continuation is broken

Added: trunk/LayoutTests/fast/text/text-repaint-when-pointer-event-property-changes-expected.html (0 => 275607)


--- trunk/LayoutTests/fast/text/text-repaint-when-pointer-event-property-changes-expected.html	                        (rev 0)
+++ trunk/LayoutTests/fast/text/text-repaint-when-pointer-event-property-changes-expected.html	2021-04-07 15:54:58 UTC (rev 275607)
@@ -0,0 +1,6 @@
+<style>
+.red {
+  color: red;
+}
+</style>
+<div class=red>PASS if red</div>

Added: trunk/LayoutTests/fast/text/text-repaint-when-pointer-event-property-changes.html (0 => 275607)


--- trunk/LayoutTests/fast/text/text-repaint-when-pointer-event-property-changes.html	                        (rev 0)
+++ trunk/LayoutTests/fast/text/text-repaint-when-pointer-event-property-changes.html	2021-04-07 15:54:58 UTC (rev 275607)
@@ -0,0 +1,11 @@
+<style>
+.red {
+  color: red;
+  pointer-events: none;
+}
+</style>
+<div id=repaintThis>PASS if red</div>
+<script>
+document.body.offsetHeight;
+repaintThis.className = "red";
+</script>
\ No newline at end of file

Modified: trunk/Source/WebCore/ChangeLog (275606 => 275607)


--- trunk/Source/WebCore/ChangeLog	2021-04-07 14:47:57 UTC (rev 275606)
+++ trunk/Source/WebCore/ChangeLog	2021-04-07 15:54:58 UTC (rev 275607)
@@ -1,3 +1,22 @@
+2021-04-07  Zalan Bujtas  <[email protected]>
+
+        REGRESSION (r270849): Button content fails to render on apple.com "Blood Oxygen"/"ECG"
+        https://bugs.webkit.org/show_bug.cgi?id=224261
+
+        Reviewed by Simon Fraser.
+
+        1. The changeRequiresRecompositeLayer check in RenderStyle::diff should come after
+        changeRequiresRepaintIfTextOrBorderOrOutline since RepaintIfTextOrBorderOrOutline is at
+        a higher priority in StyleDifference.
+        2. Ensure that we trigger setNeedsCompositingConfigurationUpdate on diff >= StyleDifference::RecompositeLayer.
+
+        Test: fast/text/text-repaint-when-pointer-event-property-changes.html
+
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::layerStyleChanged):
+        * rendering/style/RenderStyle.cpp:
+        (WebCore::RenderStyle::diff const):
+
 2021-04-07  Rob Buis  <[email protected]>
 
         Ignore non-null lastQuote ASSERT when continuation is broken

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (275606 => 275607)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2021-04-07 14:47:57 UTC (rev 275606)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2021-04-07 15:54:58 UTC (rev 275607)
@@ -1687,20 +1687,19 @@
         }
     }
 
-    if (diff == StyleDifference::RecompositeLayer && layer.isComposited()) {
-        if (oldStyle && oldStyle->pointerEvents() != newStyle.pointerEvents())
-            layer.setNeedsCompositingConfigurationUpdate();
-        else if (is<RenderWidget>(layer.renderer())) {
-            // This is necessary to get iframe layers hooked up in response to scheduleInvalidateStyleAndLayerComposition().
-            layer.setNeedsCompositingConfigurationUpdate();
+    if (diff >= StyleDifference::RecompositeLayer) {
+        if (layer.isComposited()) {
+            if (is<RenderWidget>(layer.renderer()) || (oldStyle && oldStyle->pointerEvents() != newStyle.pointerEvents())) {
+                // For RenderWidgets this is necessary to get iframe layers hooked up in response to scheduleInvalidateStyleAndLayerComposition().
+                layer.setNeedsCompositingConfigurationUpdate();
+            }
         }
+        if (oldStyle && recompositeChangeRequiresGeometryUpdate(*oldStyle, newStyle)) {
+            // FIXME: transform changes really need to trigger layout. See RenderElement::adjustStyleDifference().
+            layer.setNeedsPostLayoutCompositingUpdate();
+            layer.setNeedsCompositingGeometryUpdate();
+        }
     }
-
-    if (diff >= StyleDifference::RecompositeLayer && oldStyle && recompositeChangeRequiresGeometryUpdate(*oldStyle, newStyle)) {
-        // FIXME: transform changes really need to trigger layout. See RenderElement::adjustStyleDifference().
-        layer.setNeedsPostLayoutCompositingUpdate();
-        layer.setNeedsCompositingGeometryUpdate();
-    }
 }
 
 bool RenderLayerCompositor::needsCompositingUpdateForStyleChangeOnNonCompositedLayer(RenderLayer& layer, const RenderStyle* oldStyle) const

Modified: trunk/Source/WebCore/rendering/style/RenderStyle.cpp (275606 => 275607)


--- trunk/Source/WebCore/rendering/style/RenderStyle.cpp	2021-04-07 14:47:57 UTC (rev 275606)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.cpp	2021-04-07 15:54:58 UTC (rev 275607)
@@ -1215,12 +1215,15 @@
     if (changeRequiresRepaint(other, changedContextSensitiveProperties))
         return StyleDifference::Repaint;
 
+    if (changeRequiresRepaintIfTextOrBorderOrOutline(other, changedContextSensitiveProperties))
+        return StyleDifference::RepaintIfTextOrBorderOrOutline;
+
+    // FIXME: RecompositeLayer should also behave as a priority bit (e.g when the style change requires layout, we know that
+    // the content also needs repaint and it will eventually get repainted,
+    // but a repaint type of change (e.g. color change) does not necessarily trigger recomposition). 
     if (changeRequiresRecompositeLayer(other, changedContextSensitiveProperties))
         return StyleDifference::RecompositeLayer;
 
-    if (changeRequiresRepaintIfTextOrBorderOrOutline(other, changedContextSensitiveProperties))
-        return StyleDifference::RepaintIfTextOrBorderOrOutline;
-
     // Cursors are not checked, since they will be set appropriately in response to mouse events,
     // so they don't need to cause any repaint or layout.
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to