Changeset 275607 in webkit


Ignore:
Timestamp:
Apr 7, 2021 8:54:58 AM (3 years ago)
Author:
Alan Bujtas
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.

  1. 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.
Location:
trunk
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r275606 r275607  
     12021-04-07  Zalan Bujtas  <zalan@apple.com>
     2
     3        REGRESSION (r270849): Button content fails to render on apple.com "Blood Oxygen"/"ECG"
     4        https://bugs.webkit.org/show_bug.cgi?id=224261
     5
     6        Reviewed by Simon Fraser.
     7
     8        * fast/text/text-repaint-when-pointer-event-property-changes-expected.html: Added.
     9        * fast/text/text-repaint-when-pointer-event-property-changes.html: Added.
     10
    1112021-04-07  Rob Buis  <rbuis@igalia.com>
    212
  • trunk/Source/WebCore/ChangeLog

    r275606 r275607  
     12021-04-07  Zalan Bujtas  <zalan@apple.com>
     2
     3        REGRESSION (r270849): Button content fails to render on apple.com "Blood Oxygen"/"ECG"
     4        https://bugs.webkit.org/show_bug.cgi?id=224261
     5
     6        Reviewed by Simon Fraser.
     7
     8        1. The changeRequiresRecompositeLayer check in RenderStyle::diff should come after
     9        changeRequiresRepaintIfTextOrBorderOrOutline since RepaintIfTextOrBorderOrOutline is at
     10        a higher priority in StyleDifference.
     11        2. Ensure that we trigger setNeedsCompositingConfigurationUpdate on diff >= StyleDifference::RecompositeLayer.
     12
     13        Test: fast/text/text-repaint-when-pointer-event-property-changes.html
     14
     15        * rendering/RenderLayerCompositor.cpp:
     16        (WebCore::RenderLayerCompositor::layerStyleChanged):
     17        * rendering/style/RenderStyle.cpp:
     18        (WebCore::RenderStyle::diff const):
     19
    1202021-04-07  Rob Buis  <rbuis@igalia.com>
    221
  • trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp

    r274929 r275607  
    16881688    }
    16891689
    1690     if (diff == StyleDifference::RecompositeLayer && layer.isComposited()) {
    1691         if (oldStyle && oldStyle->pointerEvents() != newStyle.pointerEvents())
    1692             layer.setNeedsCompositingConfigurationUpdate();
    1693         else if (is<RenderWidget>(layer.renderer())) {
    1694             // This is necessary to get iframe layers hooked up in response to scheduleInvalidateStyleAndLayerComposition().
    1695             layer.setNeedsCompositingConfigurationUpdate();
    1696         }
    1697     }
    1698 
    1699     if (diff >= StyleDifference::RecompositeLayer && oldStyle && recompositeChangeRequiresGeometryUpdate(*oldStyle, newStyle)) {
    1700         // FIXME: transform changes really need to trigger layout. See RenderElement::adjustStyleDifference().
    1701         layer.setNeedsPostLayoutCompositingUpdate();
    1702         layer.setNeedsCompositingGeometryUpdate();
     1690    if (diff >= StyleDifference::RecompositeLayer) {
     1691        if (layer.isComposited()) {
     1692            if (is<RenderWidget>(layer.renderer()) || (oldStyle && oldStyle->pointerEvents() != newStyle.pointerEvents())) {
     1693                // For RenderWidgets this is necessary to get iframe layers hooked up in response to scheduleInvalidateStyleAndLayerComposition().
     1694                layer.setNeedsCompositingConfigurationUpdate();
     1695            }
     1696        }
     1697        if (oldStyle && recompositeChangeRequiresGeometryUpdate(*oldStyle, newStyle)) {
     1698            // FIXME: transform changes really need to trigger layout. See RenderElement::adjustStyleDifference().
     1699            layer.setNeedsPostLayoutCompositingUpdate();
     1700            layer.setNeedsCompositingGeometryUpdate();
     1701        }
    17031702    }
    17041703}
  • trunk/Source/WebCore/rendering/style/RenderStyle.cpp

    r275377 r275607  
    12161216        return StyleDifference::Repaint;
    12171217
     1218    if (changeRequiresRepaintIfTextOrBorderOrOutline(other, changedContextSensitiveProperties))
     1219        return StyleDifference::RepaintIfTextOrBorderOrOutline;
     1220
     1221    // FIXME: RecompositeLayer should also behave as a priority bit (e.g when the style change requires layout, we know that
     1222    // the content also needs repaint and it will eventually get repainted,
     1223    // but a repaint type of change (e.g. color change) does not necessarily trigger recomposition).
    12181224    if (changeRequiresRecompositeLayer(other, changedContextSensitiveProperties))
    12191225        return StyleDifference::RecompositeLayer;
    1220 
    1221     if (changeRequiresRepaintIfTextOrBorderOrOutline(other, changedContextSensitiveProperties))
    1222         return StyleDifference::RepaintIfTextOrBorderOrOutline;
    12231226
    12241227    // Cursors are not checked, since they will be set appropriately in response to mouse events,
Note: See TracChangeset for help on using the changeset viewer.