Changeset 245326 in webkit
- Timestamp:
- May 15, 2019 8:59:21 AM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r245320 r245326 1 2019-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 1 54 2019-05-15 Devin Rousso <drousso@apple.com> 2 55 -
trunk/Source/WebCore/Sources.txt
r245044 r245326 1972 1972 rendering/InlineIterator.cpp 1973 1973 rendering/InlineTextBox.cpp 1974 rendering/LayerOverlapMap.cpp 1974 1975 rendering/LayoutDisallowedScope.cpp 1975 1976 rendering/LayoutRepainter.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r245044 r245326 5701 5701 0F6383DB18615B29003E5DB5 /* ThreadedScrollingTree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ThreadedScrollingTree.cpp; sourceTree = "<group>"; }; 5702 5702 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>"; }; 5703 5705 0F6A12BB1A00923700C6DE72 /* DebugPageOverlays.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DebugPageOverlays.cpp; sourceTree = "<group>"; }; 5704 5706 0F6A12BC1A00923700C6DE72 /* DebugPageOverlays.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebugPageOverlays.h; sourceTree = "<group>"; }; … … 26864 26866 BCEA481B097D93020094C9E4 /* InlineTextBox.h */, 26865 26867 580371631A66F1D300BAF519 /* LayerFragment.h */, 26868 0F69F2B7228B98FF008D3565 /* LayerOverlapMap.cpp */, 26869 0F69F2B6228B98FF008D3565 /* LayerOverlapMap.h */, 26866 26870 9BD1F6811F046310001C9CDD /* LayoutDisallowedScope.cpp */, 26867 26871 9BD1F6801F0462B8001C9CDD /* LayoutDisallowedScope.h */, -
trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp
r245218 r245326 43 43 #include "HitTestResult.h" 44 44 #include "InspectorInstrumentation.h" 45 #include "LayerOverlapMap.h" 45 46 #include "Logging.h" 46 47 #include "NodeList.h" … … 113 114 }; 114 115 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) const124 {125 // Checking with the bounding box will quickly reject cases when126 // layers are created for lists of items going in one direction and127 // 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 is154 // something on the stack. The root layer should also never get an155 // popCompositingContainer call.156 pushCompositingContainer();157 }158 159 void add(const LayoutRect& bounds)160 {161 // Layers do not contribute to overlap immediately--instead, they will162 // contribute to overlap as soon as their composited ancestor has been163 // 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) const170 {171 return m_overlapStack.last().overlapsLayers(bounds);172 }173 174 bool isEmpty() const175 {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) const211 {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 228 116 struct RenderLayerCompositor::CompositingState { 229 117 CompositingState(RenderLayer* compAncestor, bool testOverlap = true) … … 868 756 CompositingState compositingState(updateRoot); 869 757 BackingSharingState backingSharingState; 870 OverlapMap overlapMap;758 LayerOverlapMap overlapMap; 871 759 872 760 bool descendantHas3DTransform = false; … … 933 821 } 934 822 935 void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestorLayer, RenderLayer& layer, OverlapMap& overlapMap, CompositingState& compositingState, BackingSharingState& backingSharingState, bool& descendantHas3DTransform)823 void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestorLayer, RenderLayer& layer, LayerOverlapMap& overlapMap, CompositingState& compositingState, BackingSharingState& backingSharingState, bool& descendantHas3DTransform) 936 824 { 937 825 if (!layer.hasDescendantNeedingCompositingRequirementsTraversal() … … 1183 1071 1184 1072 // 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)1073 void RenderLayerCompositor::traverseUnchangedSubtree(RenderLayer* ancestorLayer, RenderLayer& layer, LayerOverlapMap& overlapMap, CompositingState& compositingState, BackingSharingState& backingSharingState, bool& descendantHas3DTransform) 1186 1074 { 1187 1075 ASSERT(!compositingState.fullPaintOrderTraversalRequired); … … 1889 1777 } 1890 1778 1891 void RenderLayerCompositor::computeExtent(const OverlapMap& overlapMap, const RenderLayer& layer, OverlapExtent& extent) const1779 void RenderLayerCompositor::computeExtent(const LayerOverlapMap& overlapMap, const RenderLayer& layer, OverlapExtent& extent) const 1892 1780 { 1893 1781 if (extent.extentComputed) … … 1920 1808 } 1921 1809 1922 void RenderLayerCompositor::addToOverlapMap( OverlapMap& overlapMap, const RenderLayer& layer, OverlapExtent& extent)1810 void RenderLayerCompositor::addToOverlapMap(LayerOverlapMap& overlapMap, const RenderLayer& layer, OverlapExtent& extent) 1923 1811 { 1924 1812 if (layer.isRenderViewLayer()) … … 1936 1824 } 1937 1825 1938 void RenderLayerCompositor::addToOverlapMapRecursive( OverlapMap& overlapMap, const RenderLayer& layer, const RenderLayer* ancestorLayer)1826 void RenderLayerCompositor::addToOverlapMapRecursive(LayerOverlapMap& overlapMap, const RenderLayer& layer, const RenderLayer* ancestorLayer) 1939 1827 { 1940 1828 if (!canBeComposited(layer)) -
trunk/Source/WebCore/rendering/RenderLayerCompositor.h
r245218 r245326 38 38 class GraphicsLayer; 39 39 class GraphicsLayerUpdater; 40 class LayerOverlapMap; 40 41 class RenderEmbeddedObject; 41 42 class RenderVideo; … … 369 370 private: 370 371 class BackingSharingState; 371 class OverlapMap;372 372 struct CompositingState; 373 373 struct OverlapExtent; … … 406 406 void recursiveRepaintLayer(RenderLayer&); 407 407 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); 411 411 412 412 void updateCompositingLayersTimerFired(); 413 413 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); 416 416 417 417 enum class UpdateLevel {
Note: See TracChangeset
for help on using the changeset viewer.