Title: [252888] trunk/Source/WebCore
Revision
252888
Author
[email protected]
Date
2019-11-26 08:44:16 -0800 (Tue, 26 Nov 2019)

Log Message

[LFC] Don't leak Boxes
https://bugs.webkit.org/show_bug.cgi?id=204616

Reviewed by Zalan Bujtas.

Store Boxes to LayoutTreeContent instead of leaking them.

This is probably not the final memory management model.

* layout/layouttree/LayoutTreeBuilder.cpp:
(WebCore::Layout::TreeBuilder::buildTableStructure):
(WebCore::Layout::TreeBuilder::buildSubTree):
* layout/layouttree/LayoutTreeBuilder.h:
(WebCore::Layout::LayoutTreeContent::addBox):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (252887 => 252888)


--- trunk/Source/WebCore/ChangeLog	2019-11-26 12:42:26 UTC (rev 252887)
+++ trunk/Source/WebCore/ChangeLog	2019-11-26 16:44:16 UTC (rev 252888)
@@ -1,3 +1,20 @@
+2019-11-26  Antti Koivisto  <[email protected]>
+
+        [LFC] Don't leak Boxes
+        https://bugs.webkit.org/show_bug.cgi?id=204616
+
+        Reviewed by Zalan Bujtas.
+
+        Store Boxes to LayoutTreeContent instead of leaking them.
+        
+        This is probably not the final memory management model.
+
+        * layout/layouttree/LayoutTreeBuilder.cpp:
+        (WebCore::Layout::TreeBuilder::buildTableStructure):
+        (WebCore::Layout::TreeBuilder::buildSubTree):
+        * layout/layouttree/LayoutTreeBuilder.h:
+        (WebCore::Layout::LayoutTreeContent::addBox):
+
 2019-11-26  Manuel Rego Casasnovas  <[email protected]>
 
         [css-grid] Avoid serializing [] in grid-template-* specified values

Modified: trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp (252887 => 252888)


--- trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp	2019-11-26 12:42:26 UTC (rev 252887)
+++ trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp	2019-11-26 16:44:16 UTC (rev 252888)
@@ -67,6 +67,8 @@
 {
 }
 
+LayoutTreeContent::~LayoutTreeContent() = default;
+
 static void appendChild(Container& parent, Box& newChild)
 {
     if (!parent.hasChild()) {
@@ -263,8 +265,7 @@
         appendChild(tableWrapperBox, *captionBox);
         auto& captionContainer = downcast<Container>(*captionBox);
         buildSubTree(downcast<RenderElement>(captionRenderer), captionContainer);
-        // Temporary
-        captionBox.release();
+        m_layoutTreeContent.addBox(WTFMove(captionBox));
         tableChild = tableChild->nextSibling();
     }
 
@@ -276,11 +277,10 @@
         appendChild(*tableBox, *sectionBox);
         auto& sectionContainer = downcast<Container>(*sectionBox);
         buildSubTree(downcast<RenderElement>(*sectionRenderer), sectionContainer);
-        sectionBox.release();
+        m_layoutTreeContent.addBox(WTFMove(sectionBox));
         sectionRenderer = sectionRenderer->nextSibling();
     }
-    // Temporary
-    tableBox.release();
+    m_layoutTreeContent.addBox(WTFMove(tableBox));
 }
 
 void TreeBuilder::buildSubTree(const RenderElement& rootRenderer, Container& rootContainer)
@@ -292,8 +292,8 @@
             buildTableStructure(downcast<RenderTable>(childRenderer), downcast<Container>(*childLayoutBox));
         else if (is<Container>(*childLayoutBox))
             buildSubTree(downcast<RenderElement>(childRenderer), downcast<Container>(*childLayoutBox));
-        // Temporary
-        childLayoutBox.release();
+
+        m_layoutTreeContent.addBox(WTFMove(childLayoutBox));
     }
 }
 

Modified: trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.h (252887 => 252888)


--- trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.h	2019-11-26 12:42:26 UTC (rev 252887)
+++ trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.h	2019-11-26 16:44:16 UTC (rev 252888)
@@ -27,6 +27,7 @@
 
 #if ENABLE(LAYOUT_FORMATTING_CONTEXT)
 
+#include "LayoutBox.h"
 #include <wtf/IsoMalloc.h>
 #include <wtf/WeakPtr.h>
 
@@ -47,11 +48,14 @@
     WTF_MAKE_ISO_ALLOCATED(LayoutTreeContent);
 public:
     LayoutTreeContent(const RenderBox&, std::unique_ptr<Container>);
+    ~LayoutTreeContent();
 
     const Container& rootLayoutBox() const { return *m_rootLayoutBox; }
     Container& rootLayoutBox() { return *m_rootLayoutBox; }
     const RenderBox& rootRenderer() const { return m_rootRenderer; }
 
+    void addBox(std::unique_ptr<Box> box) { m_boxes.add(WTFMove(box)); }
+
     using RenderObjectToLayoutBoxMap = HashMap<const RenderObject*, Box*>;
     Box* layoutBoxForRenderer(const RenderObject& renderer) { return m_renderObjectToLayoutBox.get(&renderer); }
     void addLayoutBoxForRenderer(const RenderObject& renderer, Box& layoutBox) { m_renderObjectToLayoutBox.add(&renderer, &layoutBox); }
@@ -59,6 +63,7 @@
 private:
     const RenderBox& m_rootRenderer;
     std::unique_ptr<Container> m_rootLayoutBox;
+    HashSet<std::unique_ptr<Box>> m_boxes;
     RenderObjectToLayoutBoxMap m_renderObjectToLayoutBox;
 };
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to