Changeset 245326 in webkit


Ignore:
Timestamp:
May 15, 2019 8:59:21 AM (5 years ago)
Author:
Simon Fraser
Message:

Move RenderLayerCompositor's OverlapMap to its own file
https://bugs.webkit.org/show_bug.cgi?id=197915

Reviewed by Alex Christensen.

Move OverlapMap to its own file.
Make use of RectList, which was in the file but unused!
Allocate OverlapMapContainer on the heap both to avoid header pollution of internals,
and because they will get bigger in future.

No behavior change.

  • Sources.txt:
  • WebCore.xcodeproj/project.pbxproj:
  • rendering/LayerOverlapMap.cpp: Added.

(WebCore::RectList::append):
(WebCore::RectList::intersects const):
(WebCore::OverlapMapContainer::add):
(WebCore::OverlapMapContainer::overlapsLayers const):
(WebCore::OverlapMapContainer::unite):
(WebCore::LayerOverlapMap::LayerOverlapMap):
(WebCore::LayerOverlapMap::add):
(WebCore::LayerOverlapMap::overlapsLayers const):
(WebCore::LayerOverlapMap::pushCompositingContainer):
(WebCore::LayerOverlapMap::popCompositingContainer):

  • rendering/LayerOverlapMap.h: Added.

(WebCore::LayerOverlapMap::isEmpty const):
(WebCore::LayerOverlapMap::geometryMap const):
(WebCore::LayerOverlapMap::geometryMap):

  • rendering/RenderLayerCompositor.cpp:

(WebCore::RenderLayerCompositor::updateCompositingLayers):
(WebCore::RenderLayerCompositor::computeCompositingRequirements):
(WebCore::RenderLayerCompositor::traverseUnchangedSubtree):
(WebCore::RenderLayerCompositor::computeExtent const):
(WebCore::RenderLayerCompositor::addToOverlapMap):
(WebCore::RenderLayerCompositor::addToOverlapMapRecursive):
(WebCore::OverlapMapContainer::add): Deleted.
(WebCore::OverlapMapContainer::overlapsLayers const): Deleted.
(WebCore::OverlapMapContainer::unite): Deleted.
(WebCore::RenderLayerCompositor::OverlapMap::OverlapMap): Deleted.
(WebCore::RenderLayerCompositor::OverlapMap::add): Deleted.
(WebCore::RenderLayerCompositor::OverlapMap::overlapsLayers const): Deleted.
(WebCore::RenderLayerCompositor::OverlapMap::isEmpty const): Deleted.
(WebCore::RenderLayerCompositor::OverlapMap::pushCompositingContainer): Deleted.
(WebCore::RenderLayerCompositor::OverlapMap::popCompositingContainer): Deleted.
(WebCore::RenderLayerCompositor::OverlapMap::geometryMap const): Deleted.
(WebCore::RenderLayerCompositor::OverlapMap::geometryMap): Deleted.
(WebCore::RenderLayerCompositor::OverlapMap::RectList::append): Deleted.
(WebCore::RenderLayerCompositor::OverlapMap::RectList::intersects const): Deleted.

  • rendering/RenderLayerCompositor.h:
Location:
trunk/Source/WebCore
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r245320 r245326  
     12019-05-15  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Move RenderLayerCompositor's OverlapMap to its own file
     4        https://bugs.webkit.org/show_bug.cgi?id=197915
     5
     6        Reviewed by Alex Christensen.
     7
     8        Move OverlapMap to its own file.
     9        Make use of RectList, which was in the file but unused!
     10        Allocate OverlapMapContainer on the heap both to avoid header pollution of internals,
     11        and because they will get bigger in future.
     12
     13        No behavior change.
     14
     15        * Sources.txt:
     16        * WebCore.xcodeproj/project.pbxproj:
     17        * rendering/LayerOverlapMap.cpp: Added.
     18        (WebCore::RectList::append):
     19        (WebCore::RectList::intersects const):
     20        (WebCore::OverlapMapContainer::add):
     21        (WebCore::OverlapMapContainer::overlapsLayers const):
     22        (WebCore::OverlapMapContainer::unite):
     23        (WebCore::LayerOverlapMap::LayerOverlapMap):
     24        (WebCore::LayerOverlapMap::add):
     25        (WebCore::LayerOverlapMap::overlapsLayers const):
     26        (WebCore::LayerOverlapMap::pushCompositingContainer):
     27        (WebCore::LayerOverlapMap::popCompositingContainer):
     28        * rendering/LayerOverlapMap.h: Added.
     29        (WebCore::LayerOverlapMap::isEmpty const):
     30        (WebCore::LayerOverlapMap::geometryMap const):
     31        (WebCore::LayerOverlapMap::geometryMap):
     32        * rendering/RenderLayerCompositor.cpp:
     33        (WebCore::RenderLayerCompositor::updateCompositingLayers):
     34        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
     35        (WebCore::RenderLayerCompositor::traverseUnchangedSubtree):
     36        (WebCore::RenderLayerCompositor::computeExtent const):
     37        (WebCore::RenderLayerCompositor::addToOverlapMap):
     38        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive):
     39        (WebCore::OverlapMapContainer::add): Deleted.
     40        (WebCore::OverlapMapContainer::overlapsLayers const): Deleted.
     41        (WebCore::OverlapMapContainer::unite): Deleted.
     42        (WebCore::RenderLayerCompositor::OverlapMap::OverlapMap): Deleted.
     43        (WebCore::RenderLayerCompositor::OverlapMap::add): Deleted.
     44        (WebCore::RenderLayerCompositor::OverlapMap::overlapsLayers const): Deleted.
     45        (WebCore::RenderLayerCompositor::OverlapMap::isEmpty const): Deleted.
     46        (WebCore::RenderLayerCompositor::OverlapMap::pushCompositingContainer): Deleted.
     47        (WebCore::RenderLayerCompositor::OverlapMap::popCompositingContainer): Deleted.
     48        (WebCore::RenderLayerCompositor::OverlapMap::geometryMap const): Deleted.
     49        (WebCore::RenderLayerCompositor::OverlapMap::geometryMap): Deleted.
     50        (WebCore::RenderLayerCompositor::OverlapMap::RectList::append): Deleted.
     51        (WebCore::RenderLayerCompositor::OverlapMap::RectList::intersects const): Deleted.
     52        * rendering/RenderLayerCompositor.h:
     53
    1542019-05-15  Devin Rousso  <drousso@apple.com>
    255
  • trunk/Source/WebCore/Sources.txt

    r245044 r245326  
    19721972rendering/InlineIterator.cpp
    19731973rendering/InlineTextBox.cpp
     1974rendering/LayerOverlapMap.cpp
    19741975rendering/LayoutDisallowedScope.cpp
    19751976rendering/LayoutRepainter.cpp
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r245044 r245326  
    57015701                0F6383DB18615B29003E5DB5 /* ThreadedScrollingTree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ThreadedScrollingTree.cpp; sourceTree = "<group>"; };
    57025702                0F6383DC18615B29003E5DB5 /* ThreadedScrollingTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThreadedScrollingTree.h; sourceTree = "<group>"; };
     5703                0F69F2B6228B98FF008D3565 /* LayerOverlapMap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LayerOverlapMap.h; sourceTree = "<group>"; };
     5704                0F69F2B7228B98FF008D3565 /* LayerOverlapMap.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = LayerOverlapMap.cpp; sourceTree = "<group>"; };
    57035705                0F6A12BB1A00923700C6DE72 /* DebugPageOverlays.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DebugPageOverlays.cpp; sourceTree = "<group>"; };
    57045706                0F6A12BC1A00923700C6DE72 /* DebugPageOverlays.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebugPageOverlays.h; sourceTree = "<group>"; };
     
    2686426866                                BCEA481B097D93020094C9E4 /* InlineTextBox.h */,
    2686526867                                580371631A66F1D300BAF519 /* LayerFragment.h */,
     26868                                0F69F2B7228B98FF008D3565 /* LayerOverlapMap.cpp */,
     26869                                0F69F2B6228B98FF008D3565 /* LayerOverlapMap.h */,
    2686626870                                9BD1F6811F046310001C9CDD /* LayoutDisallowedScope.cpp */,
    2686726871                                9BD1F6801F0462B8001C9CDD /* LayoutDisallowedScope.h */,
  • trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp

    r245218 r245326  
    4343#include "HitTestResult.h"
    4444#include "InspectorInstrumentation.h"
     45#include "LayerOverlapMap.h"
    4546#include "Logging.h"
    4647#include "NodeList.h"
     
    113114};
    114115
    115 class OverlapMapContainer {
    116 public:
    117     void add(const LayoutRect& bounds)
    118     {
    119         m_layerRects.append(bounds);
    120         m_boundingBox.unite(bounds);
    121     }
    122 
    123     bool overlapsLayers(const LayoutRect& bounds) const
    124     {
    125         // Checking with the bounding box will quickly reject cases when
    126         // layers are created for lists of items going in one direction and
    127         // never overlap with each other.
    128         if (!bounds.intersects(m_boundingBox))
    129             return false;
    130         for (const auto& layerRect : m_layerRects) {
    131             if (layerRect.intersects(bounds))
    132                 return true;
    133         }
    134         return false;
    135     }
    136 
    137     void unite(const OverlapMapContainer& otherContainer)
    138     {
    139         m_layerRects.appendVector(otherContainer.m_layerRects);
    140         m_boundingBox.unite(otherContainer.m_boundingBox);
    141     }
    142 private:
    143     Vector<LayoutRect> m_layerRects;
    144     LayoutRect m_boundingBox;
    145 };
    146 
    147 class RenderLayerCompositor::OverlapMap {
    148     WTF_MAKE_NONCOPYABLE(OverlapMap);
    149 public:
    150     OverlapMap()
    151         : m_geometryMap(UseTransforms)
    152     {
    153         // Begin assuming the root layer will be composited so that there is
    154         // something on the stack. The root layer should also never get an
    155         // popCompositingContainer call.
    156         pushCompositingContainer();
    157     }
    158 
    159     void add(const LayoutRect& bounds)
    160     {
    161         // Layers do not contribute to overlap immediately--instead, they will
    162         // contribute to overlap as soon as their composited ancestor has been
    163         // recursively processed and popped off the stack.
    164         ASSERT(m_overlapStack.size() >= 2);
    165         m_overlapStack[m_overlapStack.size() - 2].add(bounds);
    166         m_isEmpty = false;
    167     }
    168 
    169     bool overlapsLayers(const LayoutRect& bounds) const
    170     {
    171         return m_overlapStack.last().overlapsLayers(bounds);
    172     }
    173 
    174     bool isEmpty() const
    175     {
    176         return m_isEmpty;
    177     }
    178 
    179     void pushCompositingContainer()
    180     {
    181         m_overlapStack.append(OverlapMapContainer());
    182     }
    183 
    184     void popCompositingContainer()
    185     {
    186         m_overlapStack[m_overlapStack.size() - 2].unite(m_overlapStack.last());
    187         m_overlapStack.removeLast();
    188     }
    189 
    190     const RenderGeometryMap& geometryMap() const { return m_geometryMap; }
    191     RenderGeometryMap& geometryMap() { return m_geometryMap; }
    192 
    193 private:
    194     struct RectList {
    195         Vector<LayoutRect> rects;
    196         LayoutRect boundingRect;
    197        
    198         void append(const LayoutRect& rect)
    199         {
    200             rects.append(rect);
    201             boundingRect.unite(rect);
    202         }
    203 
    204         void append(const RectList& rectList)
    205         {
    206             rects.appendVector(rectList.rects);
    207             boundingRect.unite(rectList.boundingRect);
    208         }
    209        
    210         bool intersects(const LayoutRect& rect) const
    211         {
    212             if (!rects.size() || !boundingRect.intersects(rect))
    213                 return false;
    214 
    215             for (const auto& currentRect : rects) {
    216                 if (currentRect.intersects(rect))
    217                     return true;
    218             }
    219             return false;
    220         }
    221     };
    222 
    223     Vector<OverlapMapContainer> m_overlapStack;
    224     RenderGeometryMap m_geometryMap;
    225     bool m_isEmpty { true };
    226 };
    227 
    228116struct RenderLayerCompositor::CompositingState {
    229117    CompositingState(RenderLayer* compAncestor, bool testOverlap = true)
     
    868756        CompositingState compositingState(updateRoot);
    869757        BackingSharingState backingSharingState;
    870         OverlapMap overlapMap;
     758        LayerOverlapMap overlapMap;
    871759
    872760        bool descendantHas3DTransform = false;
     
    933821}
    934822
    935 void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestorLayer, RenderLayer& layer, OverlapMap& overlapMap, CompositingState& compositingState, BackingSharingState& backingSharingState, bool& descendantHas3DTransform)
     823void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestorLayer, RenderLayer& layer, LayerOverlapMap& overlapMap, CompositingState& compositingState, BackingSharingState& backingSharingState, bool& descendantHas3DTransform)
    936824{
    937825    if (!layer.hasDescendantNeedingCompositingRequirementsTraversal()
     
    11831071
    11841072// We have to traverse unchanged layers to fill in the overlap map.
    1185 void RenderLayerCompositor::traverseUnchangedSubtree(RenderLayer* ancestorLayer, RenderLayer& layer, OverlapMap& overlapMap, CompositingState& compositingState, BackingSharingState& backingSharingState, bool& descendantHas3DTransform)
     1073void RenderLayerCompositor::traverseUnchangedSubtree(RenderLayer* ancestorLayer, RenderLayer& layer, LayerOverlapMap& overlapMap, CompositingState& compositingState, BackingSharingState& backingSharingState, bool& descendantHas3DTransform)
    11861074{
    11871075    ASSERT(!compositingState.fullPaintOrderTraversalRequired);
     
    18891777}
    18901778
    1891 void RenderLayerCompositor::computeExtent(const OverlapMap& overlapMap, const RenderLayer& layer, OverlapExtent& extent) const
     1779void RenderLayerCompositor::computeExtent(const LayerOverlapMap& overlapMap, const RenderLayer& layer, OverlapExtent& extent) const
    18921780{
    18931781    if (extent.extentComputed)
     
    19201808}
    19211809
    1922 void RenderLayerCompositor::addToOverlapMap(OverlapMap& overlapMap, const RenderLayer& layer, OverlapExtent& extent)
     1810void RenderLayerCompositor::addToOverlapMap(LayerOverlapMap& overlapMap, const RenderLayer& layer, OverlapExtent& extent)
    19231811{
    19241812    if (layer.isRenderViewLayer())
     
    19361824}
    19371825
    1938 void RenderLayerCompositor::addToOverlapMapRecursive(OverlapMap& overlapMap, const RenderLayer& layer, const RenderLayer* ancestorLayer)
     1826void RenderLayerCompositor::addToOverlapMapRecursive(LayerOverlapMap& overlapMap, const RenderLayer& layer, const RenderLayer* ancestorLayer)
    19391827{
    19401828    if (!canBeComposited(layer))
  • trunk/Source/WebCore/rendering/RenderLayerCompositor.h

    r245218 r245326  
    3838class GraphicsLayer;
    3939class GraphicsLayerUpdater;
     40class LayerOverlapMap;
    4041class RenderEmbeddedObject;
    4142class RenderVideo;
     
    369370private:
    370371    class BackingSharingState;
    371     class OverlapMap;
    372372    struct CompositingState;
    373373    struct OverlapExtent;
     
    406406    void recursiveRepaintLayer(RenderLayer&);
    407407
    408     void computeExtent(const OverlapMap&, const RenderLayer&, OverlapExtent&) const;
    409     void addToOverlapMap(OverlapMap&, const RenderLayer&, OverlapExtent&);
    410     void addToOverlapMapRecursive(OverlapMap&, const RenderLayer&, const RenderLayer* ancestorLayer = nullptr);
     408    void computeExtent(const LayerOverlapMap&, const RenderLayer&, OverlapExtent&) const;
     409    void addToOverlapMap(LayerOverlapMap&, const RenderLayer&, OverlapExtent&);
     410    void addToOverlapMapRecursive(LayerOverlapMap&, const RenderLayer&, const RenderLayer* ancestorLayer = nullptr);
    411411
    412412    void updateCompositingLayersTimerFired();
    413413
    414     void computeCompositingRequirements(RenderLayer* ancestorLayer, RenderLayer&, OverlapMap&, CompositingState&, BackingSharingState&, bool& descendantHas3DTransform);
    415     void traverseUnchangedSubtree(RenderLayer* ancestorLayer, RenderLayer&, OverlapMap&, CompositingState&, BackingSharingState&, bool& descendantHas3DTransform);
     414    void computeCompositingRequirements(RenderLayer* ancestorLayer, RenderLayer&, LayerOverlapMap&, CompositingState&, BackingSharingState&, bool& descendantHas3DTransform);
     415    void traverseUnchangedSubtree(RenderLayer* ancestorLayer, RenderLayer&, LayerOverlapMap&, CompositingState&, BackingSharingState&, bool& descendantHas3DTransform);
    416416
    417417    enum class UpdateLevel {
Note: See TracChangeset for help on using the changeset viewer.