Changeset 162117 in webkit


Ignore:
Timestamp:
Jan 15, 2014 11:33:49 PM (10 years ago)
Author:
mihnea@adobe.com
Message:

[CSS Regions] Enable accelerated compositing for fixed elements in named flows
https://bugs.webkit.org/show_bug.cgi?id=125144

Reviewed by David Hyatt.

Source/WebCore:

Add support for compositing for fixed positioned element that are collected
inside a named flow. Prior to this patch, the fixed positioned elements were
positioned and sized properly but only in the non-compositing scenario.

Tests: compositing/regions/abs-in-named-flow-from-fixed-in-named-flow.html

compositing/regions/fixed-in-diff-named-flows-zIndex.html
compositing/regions/fixed-in-named-flow-clip-descendant.html
compositing/regions/fixed-in-named-flow-from-abs-in-named-flow.html
compositing/regions/fixed-in-named-flow-from-outflow.html
compositing/regions/fixed-in-named-flow-got-transformed-parent.html
compositing/regions/fixed-in-named-flow-lost-transformed-parent.html
compositing/regions/fixed-in-named-flow-overlap-composited.html
compositing/regions/fixed-in-named-flow-position-changed.html
compositing/regions/fixed-in-named-flow-transformed-parent.html
compositing/regions/fixed-in-named-flow-zIndex.html
compositing/regions/fixed-in-named-flow.html
compositing/regions/fixed-transformed-in-named-flow.html

  • rendering/RenderFlowThread.cpp:

(WebCore::RenderFlowThread::regionForCompositedLayer):

  • rendering/RenderLayerCompositor.cpp:

(WebCore::RenderLayerCompositor::computeCompositingRequirementsForNamedFlowFixed):
(WebCore::RenderLayerCompositor::computeCompositingRequirements):
(WebCore::RenderLayerCompositor::rebuildCompositingLayerTreeForNamedFlowFixed):
(WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
(WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
(WebCore::RenderLayerCompositor::requiresCompositingForPosition):

  • rendering/RenderLayerCompositor.h:
  • rendering/RenderNamedFlowFragment.h:
  • rendering/RenderNamedFlowThread.h:

LayoutTests:

Added new tests and made the existing tests for fixed positioned elements use the
non-compositing mode.

  • compositing/regions/abs-in-named-flow-from-fixed-in-named-flow-expected.txt: Added.
  • compositing/regions/abs-in-named-flow-from-fixed-in-named-flow.html: Added.
  • compositing/regions/fixed-in-diff-named-flows-zIndex-expected.html: Added.
  • compositing/regions/fixed-in-diff-named-flows-zIndex.html: Added.
  • compositing/regions/fixed-in-named-flow-clip-descendant-expected.txt: Added.
  • compositing/regions/fixed-in-named-flow-clip-descendant.html: Added.
  • compositing/regions/fixed-in-named-flow-expected.txt: Added.
  • compositing/regions/fixed-in-named-flow-from-abs-in-named-flow-expected.txt: Added.
  • compositing/regions/fixed-in-named-flow-from-abs-in-named-flow.html: Added.
  • compositing/regions/fixed-in-named-flow-from-outflow-expected.txt: Added.
  • compositing/regions/fixed-in-named-flow-from-outflow.html: Added.
  • compositing/regions/fixed-in-named-flow-got-transformed-parent-expected.txt: Added.
  • compositing/regions/fixed-in-named-flow-got-transformed-parent.html: Added.
  • compositing/regions/fixed-in-named-flow-lost-transformed-parent-expected.txt: Added.
  • compositing/regions/fixed-in-named-flow-lost-transformed-parent.html: Added.
  • compositing/regions/fixed-in-named-flow-overlap-composited-expected.txt: Added.
  • compositing/regions/fixed-in-named-flow-overlap-composited.html: Added.
  • compositing/regions/fixed-in-named-flow-position-changed-expected.html: Added.
  • compositing/regions/fixed-in-named-flow-position-changed.html: Added.
  • compositing/regions/fixed-in-named-flow-transformed-parent-expected.txt: Added.
  • compositing/regions/fixed-in-named-flow-transformed-parent.html: Added.
  • compositing/regions/fixed-in-named-flow-zIndex-expected.html: Added.
  • compositing/regions/fixed-in-named-flow-zIndex.html: Added.
  • compositing/regions/fixed-in-named-flow.html: Added.
  • compositing/regions/fixed-transformed-in-named-flow-expected.txt: Added.
  • compositing/regions/fixed-transformed-in-named-flow.html: Added.
  • fast/regions/repaint/element-in-named-flow-absolute-from-fixed.html:
  • fast/regions/repaint/element-in-named-flow-fixed-from-absolute.html:
  • fast/regions/repaint/element-inflow-fixed-from-outflow-static.html:
  • fast/regions/repaint/element-outflow-static-from-inflow-fixed.html:
Location:
trunk
Files:
26 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r162115 r162117  
     12014-01-15  Mihnea Ovidenie  <mihnea@adobe.com>
     2
     3        [CSS Regions] Enable accelerated compositing for fixed elements in named flows
     4        https://bugs.webkit.org/show_bug.cgi?id=125144
     5
     6        Reviewed by David Hyatt.
     7
     8        Added new tests and made the existing tests for fixed positioned elements use the
     9        non-compositing mode.
     10
     11        * compositing/regions/abs-in-named-flow-from-fixed-in-named-flow-expected.txt: Added.
     12        * compositing/regions/abs-in-named-flow-from-fixed-in-named-flow.html: Added.
     13        * compositing/regions/fixed-in-diff-named-flows-zIndex-expected.html: Added.
     14        * compositing/regions/fixed-in-diff-named-flows-zIndex.html: Added.
     15        * compositing/regions/fixed-in-named-flow-clip-descendant-expected.txt: Added.
     16        * compositing/regions/fixed-in-named-flow-clip-descendant.html: Added.
     17        * compositing/regions/fixed-in-named-flow-expected.txt: Added.
     18        * compositing/regions/fixed-in-named-flow-from-abs-in-named-flow-expected.txt: Added.
     19        * compositing/regions/fixed-in-named-flow-from-abs-in-named-flow.html: Added.
     20        * compositing/regions/fixed-in-named-flow-from-outflow-expected.txt: Added.
     21        * compositing/regions/fixed-in-named-flow-from-outflow.html: Added.
     22        * compositing/regions/fixed-in-named-flow-got-transformed-parent-expected.txt: Added.
     23        * compositing/regions/fixed-in-named-flow-got-transformed-parent.html: Added.
     24        * compositing/regions/fixed-in-named-flow-lost-transformed-parent-expected.txt: Added.
     25        * compositing/regions/fixed-in-named-flow-lost-transformed-parent.html: Added.
     26        * compositing/regions/fixed-in-named-flow-overlap-composited-expected.txt: Added.
     27        * compositing/regions/fixed-in-named-flow-overlap-composited.html: Added.
     28        * compositing/regions/fixed-in-named-flow-position-changed-expected.html: Added.
     29        * compositing/regions/fixed-in-named-flow-position-changed.html: Added.
     30        * compositing/regions/fixed-in-named-flow-transformed-parent-expected.txt: Added.
     31        * compositing/regions/fixed-in-named-flow-transformed-parent.html: Added.
     32        * compositing/regions/fixed-in-named-flow-zIndex-expected.html: Added.
     33        * compositing/regions/fixed-in-named-flow-zIndex.html: Added.
     34        * compositing/regions/fixed-in-named-flow.html: Added.
     35        * compositing/regions/fixed-transformed-in-named-flow-expected.txt: Added.
     36        * compositing/regions/fixed-transformed-in-named-flow.html: Added.
     37        * fast/regions/repaint/element-in-named-flow-absolute-from-fixed.html:
     38        * fast/regions/repaint/element-in-named-flow-fixed-from-absolute.html:
     39        * fast/regions/repaint/element-inflow-fixed-from-outflow-static.html:
     40        * fast/regions/repaint/element-outflow-static-from-inflow-fixed.html:
     41
    1422014-01-15  Mihai Maerean  <mmaerean@adobe.com>
    243
  • trunk/LayoutTests/fast/regions/repaint/element-in-named-flow-absolute-from-fixed.html

    r160708 r162117  
    2020        <div id="region"></div>
    2121        <script>
     22            if (window.internals)
     23                window.internals.settings.setAcceleratedCompositingForFixedPositionEnabled(false);
     24
    2225            function repaintTest() {
    2326                document.getElementById("target").style.position = "absolute";
  • trunk/LayoutTests/fast/regions/repaint/element-in-named-flow-fixed-from-absolute.html

    r160708 r162117  
    2020        <div id="region"></div>
    2121        <script>
     22            if (window.internals)
     23                window.internals.settings.setAcceleratedCompositingForFixedPositionEnabled(false);
     24
    2225            function repaintTest() {
    2326                document.getElementById("target").style.position = "fixed";
  • trunk/LayoutTests/fast/regions/repaint/element-inflow-fixed-from-outflow-static.html

    r160708 r162117  
    2323        <div id="region"></div>
    2424        <script>
     25            if (window.internals)
     26                window.internals.settings.setAcceleratedCompositingForFixedPositionEnabled(false);
     27
    2528            function repaintTest() {
    2629                var target = document.getElementById("target");
  • trunk/LayoutTests/fast/regions/repaint/element-outflow-static-from-inflow-fixed.html

    r160708 r162117  
    2323        <div id="region"></div>
    2424        <script>
     25            if (window.internals)
     26                window.internals.settings.setAcceleratedCompositingForFixedPositionEnabled(false);
     27
    2528            function repaintTest() {
    2629                var target = document.getElementById("target");
  • trunk/Source/WebCore/ChangeLog

    r162116 r162117  
     12014-01-15  Mihnea Ovidenie  <mihnea@adobe.com>
     2
     3        [CSS Regions] Enable accelerated compositing for fixed elements in named flows
     4        https://bugs.webkit.org/show_bug.cgi?id=125144
     5
     6        Reviewed by David Hyatt.
     7
     8        Add support for compositing for fixed positioned element that are collected
     9        inside a named flow. Prior to this patch, the fixed positioned elements were
     10        positioned and sized properly but only in the non-compositing scenario.
     11
     12        Tests: compositing/regions/abs-in-named-flow-from-fixed-in-named-flow.html
     13               compositing/regions/fixed-in-diff-named-flows-zIndex.html
     14               compositing/regions/fixed-in-named-flow-clip-descendant.html
     15               compositing/regions/fixed-in-named-flow-from-abs-in-named-flow.html
     16               compositing/regions/fixed-in-named-flow-from-outflow.html
     17               compositing/regions/fixed-in-named-flow-got-transformed-parent.html
     18               compositing/regions/fixed-in-named-flow-lost-transformed-parent.html
     19               compositing/regions/fixed-in-named-flow-overlap-composited.html
     20               compositing/regions/fixed-in-named-flow-position-changed.html
     21               compositing/regions/fixed-in-named-flow-transformed-parent.html
     22               compositing/regions/fixed-in-named-flow-zIndex.html
     23               compositing/regions/fixed-in-named-flow.html
     24               compositing/regions/fixed-transformed-in-named-flow.html
     25
     26        * rendering/RenderFlowThread.cpp:
     27        (WebCore::RenderFlowThread::regionForCompositedLayer):
     28        * rendering/RenderLayerCompositor.cpp:
     29        (WebCore::RenderLayerCompositor::computeCompositingRequirementsForNamedFlowFixed):
     30        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
     31        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTreeForNamedFlowFixed):
     32        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
     33        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
     34        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
     35        * rendering/RenderLayerCompositor.h:
     36        * rendering/RenderNamedFlowFragment.h:
     37        * rendering/RenderNamedFlowThread.h:
     38
    1392014-01-15  Benjamin Poulain  <bpoulain@apple.com>
    240
  • trunk/Source/WebCore/rendering/RenderFlowThread.cpp

    r161626 r162117  
    2929
    3030#include "config.h"
    31 
    3231#include "RenderFlowThread.h"
    3332
     
    272271RenderNamedFlowFragment* RenderFlowThread::regionForCompositedLayer(RenderLayer& childLayer)
    273272{
     273    if (childLayer.renderer().fixedPositionedWithNamedFlowContainingBlock())
     274        return 0;
     275
    274276    if (childLayer.renderBox()) {
    275277        RenderRegion* startRegion = 0;
  • trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp

    r162030 r162117  
    10231023}
    10241024
     1025void RenderLayerCompositor::computeCompositingRequirementsForNamedFlowFixed(RenderLayer& layer, OverlapMap* overlapMap, CompositingState& childState, bool& layersChanged, bool& anyDescendantHas3DTransform)
     1026{
     1027    if (!layer.isRootLayer())
     1028        return;
     1029
     1030    if (!layer.renderer().view().hasRenderNamedFlowThreads())
     1031        return;
     1032
     1033    Vector<RenderLayer*> fixedLayers;
     1034    layer.renderer().view().flowThreadController().collectFixedPositionedLayers(fixedLayers);
     1035
     1036    for (size_t i = 0; i < fixedLayers.size(); ++i) {
     1037        RenderLayer* fixedLayer = fixedLayers.at(i);
     1038        computeCompositingRequirements(&layer, *fixedLayer, overlapMap, childState, layersChanged, anyDescendantHas3DTransform);
     1039    }
     1040}
     1041
    10251042//  Recurse through the layers in z-index and overflow order (which is equivalent to painting order)
    10261043//  For the z-order children of a compositing layer:
     
    11491166        }
    11501167    }
    1151    
     1168
     1169    if (layer.isRootLayer())
     1170        computeCompositingRequirementsForNamedFlowFixed(layer, overlapMap, childState, layersChanged, anyDescendantHas3DTransform);
     1171
    11521172    // If we just entered compositing mode, the root will have become composited (as long as accelerated compositing is enabled).
    11531173    if (layer.isRootLayer()) {
     
    13091329#endif
    13101330
     1331void RenderLayerCompositor::rebuildCompositingLayerTreeForNamedFlowFixed(RenderLayer& layer, Vector<GraphicsLayer*>& childGraphicsLayersOfEnclosingLayer, int depth)
     1332{
     1333    if (!layer.isRootLayer())
     1334        return;
     1335
     1336    if (!layer.renderer().view().hasRenderNamedFlowThreads())
     1337        return;
     1338
     1339    Vector<RenderLayer*> fixedLayers;
     1340    layer.renderer().view().flowThreadController().collectFixedPositionedLayers(fixedLayers);
     1341
     1342    for (size_t i = 0; i < fixedLayers.size(); ++i) {
     1343        RenderLayer* fixedLayer = fixedLayers.at(i);
     1344        rebuildCompositingLayerTree(*fixedLayer, childGraphicsLayersOfEnclosingLayer, depth);
     1345    }
     1346}
     1347
    13111348void RenderLayerCompositor::rebuildCompositingLayerTree(RenderLayer& layer, Vector<GraphicsLayer*>& childLayersOfEnclosingLayer, int depth)
    13121349{
     
    13181355    if (layer.isFlowThreadCollectingGraphicsLayersUnderRegions())
    13191356        return;
    1320    
     1357
    13211358    RenderLayerBacking* layerBacking = layer.backing();
    13221359    if (layerBacking) {
     
    13811418        }
    13821419    }
    1383    
     1420
     1421    if (layer.isRootLayer())
     1422        rebuildCompositingLayerTreeForNamedFlowFixed(layer, childList, depth + 1);
     1423
    13841424    if (layerBacking) {
    13851425        bool parented = false;
     
    15991639void RenderLayerCompositor::updateLayerTreeGeometry(RenderLayer& layer, int depth)
    16001640{
    1601     // FIXME: fixed positioned elements inside a named flow are not composited yet.
    1602     if (layer.isOutOfFlowRenderFlowThread())
    1603         return;
    1604 
    16051641    if (RenderLayerBacking* layerBacking = layer.backing()) {
    16061642        // The compositing state of all our children has been updated already, so now
     
    25022538    // Don't promote fixed position elements that are descendants of a non-view container, e.g. transformed elements.
    25032539    // They will stay fixed wrt the container rather than the enclosing frame.
    2504     if (container != &m_renderView) {
     2540    if (container != &m_renderView && !renderer.fixedPositionedWithNamedFlowContainingBlock()) {
    25052541        if (viewportConstrainedNotCompositedReason)
    25062542            *viewportConstrainedNotCompositedReason = RenderLayer::NotCompositedForNonViewContainer;
  • trunk/Source/WebCore/rendering/RenderLayerCompositor.h

    r161768 r162117  
    342342
    343343    void computeRegionCompositingRequirements(RenderNamedFlowFragment*, OverlapMap*, CompositingState&, bool& layersChanged, bool& anyDescendantHas3DTransform);
    344    
     344
     345    void computeCompositingRequirementsForNamedFlowFixed(RenderLayer&, OverlapMap*, CompositingState&, bool& layersChanged, bool& anyDescendantHas3DTransform);
     346
    345347    // Recurses down the tree, parenting descendant compositing layers and collecting an array of child layers for the current compositing layer.
    346348    void rebuildCompositingLayerTree(RenderLayer&, Vector<GraphicsLayer*>& childGraphicsLayersOfEnclosingLayer, int depth);
     
    349351    // layers for the current compositing layer corresponding to the anonymous region (that belongs to the region's parent).
    350352    void rebuildRegionCompositingLayerTree(RenderNamedFlowFragment*, Vector<GraphicsLayer*>& childList, int depth);
     353
     354    void rebuildCompositingLayerTreeForNamedFlowFixed(RenderLayer&, Vector<GraphicsLayer*>& childList, int depth);
    351355
    352356    // Recurses down the tree, updating layer geometry only.
  • trunk/Source/WebCore/rendering/RenderNamedFlowFragment.h

    r161553 r162117  
    6767    // This method returns that renderer holding the layer.
    6868    // The return value may be null.
    69     RenderLayerModelObject* layerOwner() const { return parent() && parent()->isRenderLayerModelObject() ?
    70         toRenderLayerModelObject(parent()) : nullptr; }
     69    RenderLayerModelObject* layerOwner() const { return parent() && parent()->isRenderLayerModelObject() ? toRenderLayerModelObject(parent())
     70        : nullptr; }
    7171
    7272    bool hasCustomRegionStyle() const { return m_hasCustomRegionStyle; }
  • trunk/Source/WebCore/rendering/RenderNamedFlowThread.h

    r161768 r162117  
    154154
    155155#endif // RenderNamedFlowThread_h
    156 
Note: See TracChangeset for help on using the changeset viewer.