Title: [294845] branches/safari-613-branch/Source/WebCore
Revision
294845
Author
alanc...@apple.com
Date
2022-05-25 16:49:59 -0700 (Wed, 25 May 2022)

Log Message

Cherry-pick r292596. rdar://problem/88862115

    Take top layers into account in addLayers/removeLayers
    https://bugs.webkit.org/show_bug.cgi?id=238946

    Patch by Rob Buis <rb...@igalia.com> on 2022-04-08
    Reviewed by Simon Fraser.

    Take top layers into account in addLayers/removeLayers, they
    should use the RenderView layer as parent (emulating layerParent).

    * rendering/RenderElement.cpp:
    (WebCore::addLayers):
    (WebCore::RenderElement::addLayers):
    (WebCore::RenderElement::removeLayers):
    (WebCore::RenderElement::willBeRemovedFromTree):
    * rendering/RenderElement.h:
    * rendering/RenderLayer.cpp:
    (WebCore::RenderLayer::calculateClipRects const):

    Canonical link: https://commits.webkit.org/249429@main
    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@292596 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Diff

Modified: branches/safari-613-branch/Source/WebCore/ChangeLog (294844 => 294845)


--- branches/safari-613-branch/Source/WebCore/ChangeLog	2022-05-25 23:49:55 UTC (rev 294844)
+++ branches/safari-613-branch/Source/WebCore/ChangeLog	2022-05-25 23:49:59 UTC (rev 294845)
@@ -1,5 +1,49 @@
 2022-05-19  Alan Coon  <alanc...@apple.com>
 
+        Cherry-pick r292596. rdar://problem/88862115
+
+    Take top layers into account in addLayers/removeLayers
+    https://bugs.webkit.org/show_bug.cgi?id=238946
+    
+    Patch by Rob Buis <rb...@igalia.com> on 2022-04-08
+    Reviewed by Simon Fraser.
+    
+    Take top layers into account in addLayers/removeLayers, they
+    should use the RenderView layer as parent (emulating layerParent).
+    
+    * rendering/RenderElement.cpp:
+    (WebCore::addLayers):
+    (WebCore::RenderElement::addLayers):
+    (WebCore::RenderElement::removeLayers):
+    (WebCore::RenderElement::willBeRemovedFromTree):
+    * rendering/RenderElement.h:
+    * rendering/RenderLayer.cpp:
+    (WebCore::RenderLayer::calculateClipRects const):
+    
+    Canonical link: https://commits.webkit.org/249429@main
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@292596 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2022-04-08  Rob Buis  <rb...@igalia.com>
+
+            Take top layers into account in addLayers/removeLayers
+            https://bugs.webkit.org/show_bug.cgi?id=238946
+
+            Reviewed by Simon Fraser.
+
+            Take top layers into account in addLayers/removeLayers, they
+            should use the RenderView layer as parent (emulating layerParent).
+
+            * rendering/RenderElement.cpp:
+            (WebCore::addLayers):
+            (WebCore::RenderElement::addLayers):
+            (WebCore::RenderElement::removeLayers):
+            (WebCore::RenderElement::willBeRemovedFromTree):
+            * rendering/RenderElement.h:
+            * rendering/RenderLayer.cpp:
+            (WebCore::RenderLayer::calculateClipRects const):
+
+2022-05-19  Alan Coon  <alanc...@apple.com>
+
         Cherry-pick r294234. rdar://problem/93602100
 
     Web Inspector: Regression(r266885) Crash sometimes when rehydrating imported audit results

Modified: branches/safari-613-branch/Source/WebCore/rendering/RenderElement.cpp (294844 => 294845)


--- branches/safari-613-branch/Source/WebCore/rendering/RenderElement.cpp	2022-05-25 23:49:55 UTC (rev 294844)
+++ branches/safari-613-branch/Source/WebCore/rendering/RenderElement.cpp	2022-05-25 23:49:59 UTC (rev 294845)
@@ -683,18 +683,18 @@
     return findNextLayer(*renderer.parent(), parentLayer, &renderer);
 }
 
-static void addLayers(const RenderElement& addedRenderer, RenderElement& currentRenderer, RenderLayer& parentLayer, std::optional<RenderLayer*>& beforeChild)
+static void addLayers(const RenderElement& addedRenderer, RenderElement& currentRenderer, RenderLayer* parentLayer)
 {
     if (currentRenderer.hasLayer()) {
-        if (!beforeChild.has_value())
-            beforeChild = layerNextSiblingRespectingTopLayer(addedRenderer, parentLayer);
-
-        parentLayer.addChild(*downcast<RenderLayerModelObject>(currentRenderer).layer(), beforeChild.value());
+        if (isInTopLayerOrBackdrop(currentRenderer.style(), currentRenderer.element()))
+            parentLayer = addedRenderer.view().layer();
+        RenderLayer* beforeChild = layerNextSiblingRespectingTopLayer(addedRenderer, *parentLayer);
+        parentLayer->addChild(*downcast<RenderLayerModelObject>(currentRenderer).layer(), beforeChild);
         return;
     }
 
     for (auto& child : childrenOfType<RenderElement>(currentRenderer))
-        addLayers(addedRenderer, child, parentLayer, beforeChild);
+        addLayers(addedRenderer, child, parentLayer);
 }
 
 void RenderElement::addLayers(RenderLayer* parentLayer)
@@ -702,12 +702,12 @@
     if (!parentLayer)
         return;
 
-    std::optional<RenderLayer*> beforeChild;
-    WebCore::addLayers(*this, *this, *parentLayer, beforeChild);
+    WebCore::addLayers(*this, *this, parentLayer);
 }
 
-void RenderElement::removeLayers(RenderLayer* parentLayer)
+void RenderElement::removeLayers()
 {
+    RenderLayer* parentLayer = layerParent();
     if (!parentLayer)
         return;
 
@@ -717,7 +717,7 @@
     }
 
     for (auto& child : childrenOfType<RenderElement>(*this))
-        child.removeLayers(parentLayer);
+        child.removeLayers();
 }
 
 void RenderElement::moveLayers(RenderLayer& newParent)
@@ -1022,10 +1022,8 @@
             enclosingLayer->dirtyVisibleContentStatus();
     }
     // Keep our layer hierarchy updated.
-    if (firstChild() || hasLayer()) {
-        auto* parentLayer = layerParent();
-        removeLayers(parentLayer);
-    }
+    if (firstChild() || hasLayer())
+        removeLayers();
 
     if (isOutOfFlowPositioned() && parent()->childrenInline())
         parent()->dirtyLinesFromChangedChild(*this);

Modified: branches/safari-613-branch/Source/WebCore/rendering/RenderElement.h (294844 => 294845)


--- branches/safari-613-branch/Source/WebCore/rendering/RenderElement.h	2022-05-25 23:49:55 UTC (rev 294844)
+++ branches/safari-613-branch/Source/WebCore/rendering/RenderElement.h	2022-05-25 23:49:59 UTC (rev 294845)
@@ -110,8 +110,7 @@
     RenderLayer* layerParent() const;
     RenderLayer* layerNextSibling(RenderLayer& parentLayer) const;
     void addLayers(RenderLayer* parentLayer);
-    void removeLayers(RenderLayer* parentLayer);
-    void moveLayers(RenderLayer& newParent);
+    void removeLayers();
 
     virtual void dirtyLinesFromChangedChild(RenderObject&) { }
 

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


--- branches/safari-613-branch/Source/WebCore/rendering/RenderLayer.cpp	2022-05-25 23:49:55 UTC (rev 294844)
+++ branches/safari-613-branch/Source/WebCore/rendering/RenderLayer.cpp	2022-05-25 23:49:59 UTC (rev 294845)
@@ -5441,8 +5441,10 @@
 
 void RenderLayer::removeReflection()
 {
-    if (!m_reflection->renderTreeBeingDestroyed())
-        m_reflection->removeLayers(this);
+    if (!m_reflection->renderTreeBeingDestroyed()) {
+        if (auto* layer = m_reflection->layer())
+            removeChild(*layer);
+    }
 
     m_reflection->setParent(nullptr);
     m_reflection = nullptr;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to