Changeset 268547 in webkit


Ignore:
Timestamp:
Oct 15, 2020 12:49:00 PM (4 years ago)
Author:
graouts@webkit.org
Message:

Updating an individual transform CSS property has no visual change when composited
https://bugs.webkit.org/show_bug.cgi?id=217769
<rdar://problem/70344280>

Reviewed by Simon Fraser.

Source/WebCore:

Ensure that changes to the translate, scale and rotate CSS properties have the same
effect than when the transform property is changed for composited elements.

Tests: transforms/2d/rotate-change-composited.html

transforms/2d/scale-change-composited.html
transforms/2d/translate-change-composited.html

  • platform/graphics/transforms/RotateTransformOperation.h:
  • platform/graphics/transforms/ScaleTransformOperation.h:
  • platform/graphics/transforms/TranslateTransformOperation.h:
  • rendering/RenderLayerCompositor.cpp:

(WebCore::recompositeChangeRequiresGeometryUpdate):
(WebCore::styleHas3DTransformOperation):
(WebCore::styleTransformOperationsAreRepresentableIn2D):
(WebCore::RenderLayerCompositor::requiresCompositingForTransform const):
(WebCore::RenderLayerCompositor::layerHas3DContent const):

LayoutTests:

Add new tests that check that changing the value of one of the individual transform
CSS properties when the element is composited yields a visual change.

  • transforms/2d/rotate-change-composited-expected.html: Added.
  • transforms/2d/rotate-change-composited.html: Added.
  • transforms/2d/scale-change-composited-expected.html: Added.
  • transforms/2d/scale-change-composited.html: Added.
  • transforms/2d/translate-change-composited-expected.html: Added.
  • transforms/2d/translate-change-composited.html: Added.
Location:
trunk
Files:
6 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r268545 r268547  
     12020-10-15  Antoine Quint  <graouts@webkit.org>
     2
     3        Updating an individual transform CSS property has no visual change when composited
     4        https://bugs.webkit.org/show_bug.cgi?id=217769
     5        <rdar://problem/70344280>
     6
     7        Reviewed by Simon Fraser.
     8
     9        Add new tests that check that changing the value of one of the individual transform
     10        CSS properties when the element is composited yields a visual change.
     11
     12        * transforms/2d/rotate-change-composited-expected.html: Added.
     13        * transforms/2d/rotate-change-composited.html: Added.
     14        * transforms/2d/scale-change-composited-expected.html: Added.
     15        * transforms/2d/scale-change-composited.html: Added.
     16        * transforms/2d/translate-change-composited-expected.html: Added.
     17        * transforms/2d/translate-change-composited.html: Added.
     18
    1192020-10-15  Carlos Alberto Lopez Perez  <clopez@igalia.com>
    220
  • trunk/Source/WebCore/ChangeLog

    r268546 r268547  
     12020-10-15  Antoine Quint  <graouts@webkit.org>
     2
     3        Updating an individual transform CSS property has no visual change when composited
     4        https://bugs.webkit.org/show_bug.cgi?id=217769
     5        <rdar://problem/70344280>
     6
     7        Reviewed by Simon Fraser.
     8
     9        Ensure that changes to the translate, scale and rotate CSS properties have the same
     10        effect than when the transform property is changed for composited elements.
     11
     12        Tests: transforms/2d/rotate-change-composited.html
     13               transforms/2d/scale-change-composited.html
     14               transforms/2d/translate-change-composited.html
     15
     16        * platform/graphics/transforms/RotateTransformOperation.h:
     17        * platform/graphics/transforms/ScaleTransformOperation.h:
     18        * platform/graphics/transforms/TranslateTransformOperation.h:
     19        * rendering/RenderLayerCompositor.cpp:
     20        (WebCore::recompositeChangeRequiresGeometryUpdate):
     21        (WebCore::styleHas3DTransformOperation):
     22        (WebCore::styleTransformOperationsAreRepresentableIn2D):
     23        (WebCore::RenderLayerCompositor::requiresCompositingForTransform const):
     24        (WebCore::RenderLayerCompositor::layerHas3DContent const):
     25
    1262020-10-15  Fujii Hironori  <Hironori.Fujii@sony.com>
    227
  • trunk/Source/WebCore/platform/graphics/transforms/RotateTransformOperation.h

    r268173 r268547  
    5858    bool isIdentity() const final { return !m_angle; }
    5959
     60    bool isRepresentableIn2D() const final { return (!m_x && !m_y) || !m_angle; }
     61
    6062private:
    6163    bool isAffectedByTransformOrigin() const override { return !isIdentity(); }
    62     bool isRepresentableIn2D() const final { return (!m_x && !m_y) || !m_angle; }
    6364
    6465    bool apply(TransformationMatrix& transform, const FloatSize& /*borderBoxSize*/) const override
  • trunk/Source/WebCore/platform/graphics/transforms/ScaleTransformOperation.h

    r268173 r268547  
    5757    bool isIdentity() const final { return m_x == 1 &&  m_y == 1 &&  m_z == 1; }
    5858
     59    bool isRepresentableIn2D() const final { return m_z == 1; }
     60
    5961private:
    6062    bool isAffectedByTransformOrigin() const override { return !isIdentity(); }
    61     bool isRepresentableIn2D() const final { return m_z == 1; }
    6263
    6364    bool apply(TransformationMatrix& transform, const FloatSize&) const override
  • trunk/Source/WebCore/platform/graphics/transforms/TranslateTransformOperation.h

    r268173 r268547  
    6969    Ref<TransformOperation> blend(const TransformOperation* from, double progress, bool blendToIdentity = false) final;
    7070
     71    bool isRepresentableIn2D() const final { return m_z.isZero(); }
     72
    7173private:
    72     bool isRepresentableIn2D() const final { return m_z.isZero(); }
    7374
    7475    void dump(WTF::TextStream&) const final;
  • trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp

    r268075 r268547  
    15961596{
    15971597    return oldStyle.transform() != newStyle.transform()
     1598        || oldStyle.translate() != newStyle.translate()
     1599        || oldStyle.scale() != newStyle.scale()
     1600        || oldStyle.rotate() != newStyle.rotate()
    15981601        || oldStyle.transformOriginX() != newStyle.transformOriginX()
    15991602        || oldStyle.transformOriginY() != newStyle.transformOriginY()
     
    29772980}
    29782981
     2982static bool styleHas3DTransformOperation(const RenderStyle& style)
     2983{
     2984    return style.transform().has3DOperation()
     2985        || (style.translate() && style.translate()->is3DOperation())
     2986        || (style.scale() && style.scale()->is3DOperation())
     2987        || (style.rotate() && style.rotate()->is3DOperation());
     2988}
     2989
     2990static bool styleTransformOperationsAreRepresentableIn2D(const RenderStyle& style)
     2991{
     2992    return style.transform().isRepresentableIn2D()
     2993        && (!style.translate() || style.translate()->isRepresentableIn2D())
     2994        && (!style.scale() || style.scale()->isRepresentableIn2D())
     2995        && (!style.rotate() || style.rotate()->isRepresentableIn2D());
     2996}
     2997
    29792998bool RenderLayerCompositor::requiresCompositingForTransform(RenderLayerModelObject& renderer) const
    29802999{
     
    29893008    switch (m_compositingPolicy) {
    29903009    case CompositingPolicy::Normal:
    2991         return renderer.style().transform().has3DOperation();
     3010        return styleHas3DTransformOperation(renderer.style());
    29923011    case CompositingPolicy::Conservative:
    29933012        // Continue to allow pages to avoid the very slow software filter path.
    2994         if (renderer.style().transform().has3DOperation() && renderer.hasFilter())
     3013        if (styleHas3DTransformOperation(renderer.style()) && renderer.hasFilter())
    29953014            return true;
    2996         return renderer.style().transform().isRepresentableIn2D() ? false : true;
     3015        return styleTransformOperationsAreRepresentableIn2D(renderer.style()) ? false : true;
    29973016    }
    29983017    return false;
     
    42694288    const RenderStyle& style = layer.renderer().style();
    42704289
    4271     if (style.transformStyle3D() == TransformStyle3D::Preserve3D || style.hasPerspective() || style.transform().has3DOperation())
     4290    if (style.transformStyle3D() == TransformStyle3D::Preserve3D || style.hasPerspective() || styleHas3DTransformOperation(style))
    42724291        return true;
    42734292
Note: See TracChangeset for help on using the changeset viewer.