Changeset 205277 in webkit


Ignore:
Timestamp:
Aug 31, 2016 8:34:36 PM (8 years ago)
Author:
Alan Bujtas
Message:

ASSERTION FAILED: !flow->layer() && !flow->isInlineElementContinuation() in WebCore::RenderBlock::addContinuationWithOutline
https://bugs.webkit.org/show_bug.cgi?id=151022
<rdar://problem/27710993>

Reviewed by Simon Fraser.

Source/WebCore:

Certain CSS properties like opacity, mask etc (graphical group members) require the layer to be a non-normal flow,
self painting layer so that we can manage painting properly. However in addition to those CSS properties, some of the will-change
values (again, graphical group members) also require the layer to be non-normal flow, self painting.
This patch ensures that when deciding whether a layer should be a normal flow layer, we take the will-change values into account as well.

Tests: compositing/layer-creation/assert-on-inline-element-with-will-change.html

compositing/layer-creation/will-change-on-normal-flow-content.html

  • rendering/RenderLayer.cpp:

(WebCore::RenderLayer::calculateClipRects):

  • rendering/style/WillChangeData.cpp:

(WebCore::propertyCreatesGraphicalGroup):
(WebCore::WillChangeData::addFeature):

  • rendering/style/WillChangeData.h:

(WebCore::WillChangeData::canCreateGraphicalGroup):
(WebCore::WillChangeData::canTriggerCompositingOnInline): Deleted.

LayoutTests:

  • compositing/layer-creation/assert-on-inline-element-with-will-change-expected.txt: Added.
  • compositing/layer-creation/assert-on-inline-element-with-will-change.html: Added.
  • compositing/layer-creation/will-change-on-normal-flow-content-expected.txt: Added.
  • compositing/layer-creation/will-change-on-normal-flow-content.html: Added.
Location:
trunk
Files:
4 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r205271 r205277  
     12016-08-31  Zalan Bujtas  <zalan@apple.com>
     2
     3        ASSERTION FAILED: !flow->layer() && !flow->isInlineElementContinuation() in WebCore::RenderBlock::addContinuationWithOutline
     4        https://bugs.webkit.org/show_bug.cgi?id=151022
     5        <rdar://problem/27710993>
     6
     7        Reviewed by Simon Fraser.
     8
     9        * compositing/layer-creation/assert-on-inline-element-with-will-change-expected.txt: Added.
     10        * compositing/layer-creation/assert-on-inline-element-with-will-change.html: Added.
     11        * compositing/layer-creation/will-change-on-normal-flow-content-expected.txt: Added.
     12        * compositing/layer-creation/will-change-on-normal-flow-content.html: Added.
     13
    1142016-08-31  Ricky Mondello  <rmondello@apple.com>
    215
  • trunk/Source/WebCore/ChangeLog

    r205275 r205277  
     12016-08-31  Zalan Bujtas  <zalan@apple.com>
     2
     3        ASSERTION FAILED: !flow->layer() && !flow->isInlineElementContinuation() in WebCore::RenderBlock::addContinuationWithOutline
     4        https://bugs.webkit.org/show_bug.cgi?id=151022
     5        <rdar://problem/27710993>
     6
     7        Reviewed by Simon Fraser.
     8
     9        Certain CSS properties like opacity, mask etc (graphical group members) require the layer to be a non-normal flow,
     10        self painting layer so that we can manage painting properly. However in addition to those CSS properties, some of the will-change
     11        values (again, graphical group members) also require the layer to be non-normal flow, self painting.
     12        This patch ensures that when deciding whether a layer should be a normal flow layer, we take the will-change values into account as well.
     13
     14        Tests: compositing/layer-creation/assert-on-inline-element-with-will-change.html
     15               compositing/layer-creation/will-change-on-normal-flow-content.html
     16
     17        * rendering/RenderLayer.cpp:
     18        (WebCore::RenderLayer::calculateClipRects):
     19        * rendering/style/WillChangeData.cpp:
     20        (WebCore::propertyCreatesGraphicalGroup):
     21        (WebCore::WillChangeData::addFeature):
     22        * rendering/style/WillChangeData.h:
     23        (WebCore::WillChangeData::canCreateGraphicalGroup):
     24        (WebCore::WillChangeData::canTriggerCompositingOnInline): Deleted.
     25
    1262016-08-31  Keith Rollin  <krollin@apple.com>
    227
  • trunk/Source/WebCore/rendering/RenderLayer.cpp

    r204552 r205277  
    64656465}
    64666466
     6467static bool mayCreateGraphicalGroup(const RenderElement& renderer)
     6468{
     6469    bool createsGraphicalGroup = renderer.hasClipPath()
     6470        || renderer.hasFilter()
     6471        || renderer.hasBackdropFilter()
     6472#if ENABLE(CSS_COMPOSITING)
     6473        || renderer.hasBlendMode()
     6474#endif
     6475        || renderer.isTransparent()
     6476        || renderer.hasMask();
     6477    return createsGraphicalGroup || (renderer.style().willChange() && renderer.style().willChange()->canCreateGraphicalGroup());
     6478}
     6479
    64676480bool RenderLayer::shouldBeNormalFlowOnly() const
    64686481{
     
    64766489        || (renderer().style().specifiesColumns() && !isRootLayer())
    64776490        || renderer().isInFlowRenderFlowThread())
     6491        && !renderer().hasTransformRelatedProperty()
    64786492        && !renderer().isPositioned()
    6479         && !renderer().hasTransformRelatedProperty()
    6480         && !renderer().hasClipPath()
    6481         && !renderer().hasFilter()
    6482         && !renderer().hasBackdropFilter()
     6493        && !needsCompositedScrolling()
     6494        && !renderer().style().hasFlowFrom()
    64836495#if PLATFORM(IOS)
    64846496        && !hasAcceleratedTouchScrolling()
    64856497#endif
    6486 #if ENABLE(CSS_COMPOSITING)
    6487         && !renderer().hasBlendMode()
    6488 #endif
    6489         && !isTransparent()
    6490         && !needsCompositedScrolling()
    6491         && !renderer().style().hasFlowFrom();
     6498        && !mayCreateGraphicalGroup(renderer());
    64926499}
    64936500
  • trunk/Source/WebCore/rendering/style/WillChangeData.cpp

    r190667 r205277  
    100100}
    101101
     102static bool propertyCreatesGraphicalGroup(CSSPropertyID property)
     103{
     104    switch (property) {
     105    case CSSPropertyClipPath:
     106    case CSSPropertyWebkitClipPath:
     107    case CSSPropertyMask:
     108    case CSSPropertyOpacity:
     109#if ENABLE(CSS_COMPOSITING)
     110    case CSSPropertyMixBlendMode:
     111    case CSSPropertyIsolation:
     112#endif
     113    case CSSPropertyFilter:
     114#if ENABLE(FILTERS_LEVEL_2)
     115    case CSSPropertyWebkitBackdropFilter:
     116#endif
     117    case CSSPropertyWebkitMask:
     118    case CSSPropertyWebkitMaskImage:
     119    case CSSPropertyWebkitMaskBoxImage:
     120        return true;
     121    default:
     122        return false;
     123    }
     124}
     125
    102126static bool propertyTriggersCompositing(CSSPropertyID property)
    103127{
     
    138162    m_canTriggerCompositingOnInline |= propertyTriggersCompositing(propertyID);
    139163    m_canTriggerCompositing |= m_canTriggerCompositingOnInline | propertyTriggersCompositingOnBoxesOnly(propertyID);
     164
     165    m_canCreateGraphicalGroup |= propertyCreatesGraphicalGroup(propertyID);
    140166}
    141167
  • trunk/Source/WebCore/rendering/style/WillChangeData.h

    r190667 r205277  
    5858    bool canTriggerCompositing() const { return m_canTriggerCompositing; }
    5959    bool canTriggerCompositingOnInline() const { return m_canTriggerCompositingOnInline; }
     60    bool canCreateGraphicalGroup() const { return m_canCreateGraphicalGroup; }
    6061
    6162    enum Feature {
     
    125126    bool m_canTriggerCompositing { false };
    126127    bool m_canTriggerCompositingOnInline { false };
     128    bool m_canCreateGraphicalGroup { false };
    127129};
    128130
Note: See TracChangeset for help on using the changeset viewer.