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