Title: [288568] branches/safari-613-branch/Source/WebCore
Revision
288568
Author
repst...@apple.com
Date
2022-01-25 11:38:29 -0800 (Tue, 25 Jan 2022)

Log Message

Cherry-pick r288059. rdar://problem/87785288

    Make a function that returns the ordered list of top layer RenderLayers
    https://bugs.webkit.org/show_bug.cgi?id=235251

    Reviewed by Alan Bujtas.

    Factor the code in RenderLayer::rebuildZOrderLists() that generates the list of
    top-layer RenderLayers into its own function.

    Add Document::hasTopLayerElement() to avoid calling it when there are no top layer
    elements.

    * dom/Document.h:
    (WebCore::Document::hasTopLayerElement const):
    * rendering/RenderLayer.cpp:
    (WebCore::RenderLayer::rebuildZOrderLists):
    * rendering/RenderLayer.h:

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@288059 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Diff

Modified: branches/safari-613-branch/Source/WebCore/ChangeLog (288567 => 288568)


--- branches/safari-613-branch/Source/WebCore/ChangeLog	2022-01-25 19:38:24 UTC (rev 288567)
+++ branches/safari-613-branch/Source/WebCore/ChangeLog	2022-01-25 19:38:29 UTC (rev 288568)
@@ -1,5 +1,48 @@
 2022-01-25  Alan Coon  <alanc...@apple.com>
 
+        Cherry-pick r288059. rdar://problem/87785288
+
+    Make a function that returns the ordered list of top layer RenderLayers
+    https://bugs.webkit.org/show_bug.cgi?id=235251
+    
+    Reviewed by Alan Bujtas.
+    
+    Factor the code in RenderLayer::rebuildZOrderLists() that generates the list of
+    top-layer RenderLayers into its own function.
+    
+    Add Document::hasTopLayerElement() to avoid calling it when there are no top layer
+    elements.
+    
+    * dom/Document.h:
+    (WebCore::Document::hasTopLayerElement const):
+    * rendering/RenderLayer.cpp:
+    (WebCore::RenderLayer::rebuildZOrderLists):
+    * rendering/RenderLayer.h:
+    
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@288059 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2022-01-15  Simon Fraser  <simon.fra...@apple.com>
+
+            Make a function that returns the ordered list of top layer RenderLayers
+            https://bugs.webkit.org/show_bug.cgi?id=235251
+
+            Reviewed by Alan Bujtas.
+
+            Factor the code in RenderLayer::rebuildZOrderLists() that generates the list of
+            top-layer RenderLayers into its own function.
+
+            Add Document::hasTopLayerElement() to avoid calling it when there are no top layer
+            elements.
+
+            * dom/Document.h:
+            (WebCore::Document::hasTopLayerElement const):
+            * rendering/RenderLayer.cpp:
+            (WebCore::RenderLayer::rebuildZOrderLists):
+            * rendering/RenderLayer.h:
+
+2022-01-25  Alan Coon  <alanc...@apple.com>
+
         Cherry-pick r287845. rdar://problem/87785288
 
     REGRESSION(r287683): <dialog> elements inside clipped/overflowed elements are no longer shown

Modified: branches/safari-613-branch/Source/WebCore/dom/Document.h (288567 => 288568)


--- branches/safari-613-branch/Source/WebCore/dom/Document.h	2022-01-25 19:38:24 UTC (rev 288567)
+++ branches/safari-613-branch/Source/WebCore/dom/Document.h	2022-01-25 19:38:29 UTC (rev 288568)
@@ -1548,6 +1548,7 @@
     void addTopLayerElement(Element&);
     void removeTopLayerElement(Element&);
     const ListHashSet<Ref<Element>>& topLayerElements() const { return m_topLayerElements; }
+    bool hasTopLayerElement() const { return !m_topLayerElements.isEmpty(); }
 
     HTMLDialogElement* activeModalDialog() const;
 

Modified: branches/safari-613-branch/Source/WebCore/rendering/RenderLayer.cpp (288567 => 288568)


--- branches/safari-613-branch/Source/WebCore/rendering/RenderLayer.cpp	2022-01-25 19:38:24 UTC (rev 288567)
+++ branches/safari-613-branch/Source/WebCore/rendering/RenderLayer.cpp	2022-01-25 19:38:29 UTC (rev 288568)
@@ -786,25 +786,13 @@
         negZOrderList->shrinkToFit();
     }
 
-    if (isRenderViewLayer()) {
-        auto topLayerElements = renderer().document().topLayerElements();
-        for (auto& element : topLayerElements) {
-            RenderElement* renderer = element->renderer();
-            if (!renderer)
-                continue;
-            auto backdropRenderer = renderer->backdropRenderer();
-            if (backdropRenderer && backdropRenderer->hasLayer()) {
-                RenderLayer* layer = backdropRenderer->layer();
-                if (!posZOrderList)
-                    posZOrderList = makeUnique<Vector<RenderLayer*>>();
-                posZOrderList->append(layer);
-            }
-            if (renderer->hasLayer()) {
-                RenderLayer* layer = downcast<RenderLayerModelObject>(*renderer).layer();
-                if (!posZOrderList)
-                    posZOrderList = makeUnique<Vector<RenderLayer*>>();
-                posZOrderList->append(layer);
-            }
+    if (isRenderViewLayer() && renderer().document().hasTopLayerElement()) {
+        auto topLayerLayers = topLayerRenderLayers(renderer().view());
+        if (topLayerLayers.size()) {
+            if (!posZOrderList)
+                posZOrderList = makeUnique<Vector<RenderLayer*>>();
+
+            posZOrderList->appendVector(topLayerLayers);
         }
     }
 }
@@ -3973,6 +3961,25 @@
     return nullptr;
 }
 
+Vector<RenderLayer*> RenderLayer::topLayerRenderLayers(RenderView& renderView)
+{
+    Vector<RenderLayer*> layers;
+    auto topLayerElements = renderView.document().topLayerElements();
+    for (auto& element : topLayerElements) {
+        auto* renderer = element->renderer();
+        if (!renderer)
+            continue;
+
+        auto backdropRenderer = renderer->backdropRenderer();
+        if (backdropRenderer && backdropRenderer->hasLayer())
+            layers.append(backdropRenderer->layer());
+
+        if (renderer->hasLayer())
+            layers.append(downcast<RenderLayerModelObject>(*renderer).layer());
+    }
+    return layers;
+}
+
 bool RenderLayer::establishesTopLayer() const
 {
     return isInTopLayerOrBackdrop(renderer().style(), renderer().element());

Modified: branches/safari-613-branch/Source/WebCore/rendering/RenderLayer.h (288567 => 288568)


--- branches/safari-613-branch/Source/WebCore/rendering/RenderLayer.h	2022-01-25 19:38:24 UTC (rev 288567)
+++ branches/safari-613-branch/Source/WebCore/rendering/RenderLayer.h	2022-01-25 19:38:29 UTC (rev 288568)
@@ -818,6 +818,8 @@
 
     Element* enclosingElement() const;
 
+    static Vector<RenderLayer*> topLayerRenderLayers(RenderView&);
+
     bool establishesTopLayer() const;
     void establishesTopLayerWillChange();
     void establishesTopLayerDidChange();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to