Title: [252891] trunk/Source/WebCore
Revision
252891
Author
[email protected]
Date
2019-11-26 10:28:13 -0800 (Tue, 26 Nov 2019)

Log Message

Destroy linebox tree from ComplexLineLayout destructor
https://bugs.webkit.org/show_bug.cgi?id=204620

Reviewed by Zalan Bujtas.

Make linebox tree destuction simpler and more robust.

* rendering/ComplexLineLayout.cpp:
(WebCore::ComplexLineLayout::~ComplexLineLayout):

Destroy linebox tree.

* rendering/RenderBlockFlow.cpp:
(WebCore::RenderBlockFlow::deleteLines):

Always destroy the line layout.

(WebCore::RenderBlockFlow::layoutSimpleLines):
(WebCore::RenderBlockFlow::deleteLineBoxesBeforeSimpleLineLayout): Deleted.

No need for special path, ComplexLineLayout destruction takes care of this now.

* rendering/RenderBlockFlow.h:
* rendering/RenderLineBreak.cpp:
(WebCore::RenderLineBreak::deleteLineBoxesBeforeSimpleLineLayout): Deleted.

No need for special path, InlineBox destruction clears the pointers in associated RenderLineBreaks and RenderTexts.

* rendering/RenderLineBreak.h:
* rendering/RenderText.cpp:
(WebCore::RenderText::deleteLineBoxesBeforeSimpleLineLayout): Deleted.
* rendering/RenderText.h:
* rendering/RootInlineBox.cpp:
(WebCore::RootInlineBox::removeLineBoxFromRenderObject):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (252890 => 252891)


--- trunk/Source/WebCore/ChangeLog	2019-11-26 18:16:04 UTC (rev 252890)
+++ trunk/Source/WebCore/ChangeLog	2019-11-26 18:28:13 UTC (rev 252891)
@@ -1,3 +1,40 @@
+2019-11-26  Antti Koivisto  <[email protected]>
+
+        Destroy linebox tree from ComplexLineLayout destructor
+        https://bugs.webkit.org/show_bug.cgi?id=204620
+
+        Reviewed by Zalan Bujtas.
+
+        Make linebox tree destuction simpler and more robust.
+
+        * rendering/ComplexLineLayout.cpp:
+        (WebCore::ComplexLineLayout::~ComplexLineLayout):
+
+        Destroy linebox tree.
+
+        * rendering/RenderBlockFlow.cpp:
+        (WebCore::RenderBlockFlow::deleteLines):
+
+        Always destroy the line layout.
+
+        (WebCore::RenderBlockFlow::layoutSimpleLines):
+        (WebCore::RenderBlockFlow::deleteLineBoxesBeforeSimpleLineLayout): Deleted.
+
+        No need for special path, ComplexLineLayout destruction takes care of this now.
+
+        * rendering/RenderBlockFlow.h:
+        * rendering/RenderLineBreak.cpp:
+        (WebCore::RenderLineBreak::deleteLineBoxesBeforeSimpleLineLayout): Deleted.
+
+        No need for special path, InlineBox destruction clears the pointers in associated RenderLineBreaks and RenderTexts.
+
+        * rendering/RenderLineBreak.h:
+        * rendering/RenderText.cpp:
+        (WebCore::RenderText::deleteLineBoxesBeforeSimpleLineLayout): Deleted.
+        * rendering/RenderText.h:
+        * rendering/RootInlineBox.cpp:
+        (WebCore::RootInlineBox::removeLineBoxFromRenderObject):
+
 2019-11-26  youenn fablet  <[email protected]>
 
         Update capturing document media state when entering b/f cache

Modified: trunk/Source/WebCore/rendering/ComplexLineLayout.cpp (252890 => 252891)


--- trunk/Source/WebCore/rendering/ComplexLineLayout.cpp	2019-11-26 18:16:04 UTC (rev 252890)
+++ trunk/Source/WebCore/rendering/ComplexLineLayout.cpp	2019-11-26 18:28:13 UTC (rev 252891)
@@ -58,8 +58,14 @@
 {
 }
 
-ComplexLineLayout::~ComplexLineLayout() = default;
+ComplexLineLayout::~ComplexLineLayout()
+{
+    if (m_flow.containsFloats())
+        m_flow.floatingObjects()->clearLineBoxTreePointers();
 
+    lineBoxes().deleteLineBoxTree();
+};
+
 static void determineDirectionality(TextDirection& dir, InlineIterator iter)
 {
     while (!iter.atEnd()) {

Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.cpp (252890 => 252891)


--- trunk/Source/WebCore/rendering/RenderBlockFlow.cpp	2019-11-26 18:16:04 UTC (rev 252890)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.cpp	2019-11-26 18:28:13 UTC (rev 252891)
@@ -2103,14 +2103,8 @@
 
 void RenderBlockFlow::deleteLines()
 {
-    if (containsFloats())
-        m_floatingObjects->clearLineBoxTreePointers();
+    m_lineLayout = nullptr;
 
-    if (complexLineLayout())
-        complexLineLayout()->lineBoxes().deleteLineBoxTree();
-    else
-        m_lineLayout = nullptr;
-
     RenderBlock::deleteLines();
 }
 
@@ -2957,7 +2951,8 @@
         return;
     }
 
-    complexLineLayout()->addOverflowFromInlineChildren();
+    if (complexLineLayout())
+        complexLineLayout()->addOverflowFromInlineChildren();
 }
 
 void RenderBlockFlow::adjustForBorderFit(LayoutUnit x, LayoutUnit& left, LayoutUnit& right) const
@@ -3626,10 +3621,9 @@
 void RenderBlockFlow::layoutSimpleLines(bool relayoutChildren, LayoutUnit& repaintLogicalTop, LayoutUnit& repaintLogicalBottom)
 {
     bool needsLayout = selfNeedsLayout() || relayoutChildren || !simpleLineLayout();
-    if (needsLayout) {
-        deleteLineBoxesBeforeSimpleLineLayout();
+    if (needsLayout)
         m_lineLayout = SimpleLineLayout::create(*this);
-    }
+
     auto& simpleLineLayout = *this->simpleLineLayout();
 
     if (view().frameView().layoutContext().layoutState() && view().frameView().layoutContext().layoutState()->isPaginated()) {
@@ -3647,25 +3641,6 @@
     setLogicalHeight(lineLayoutTop + lineLayoutHeight + borderAndPaddingAfter());
 }
 
-void RenderBlockFlow::deleteLineBoxesBeforeSimpleLineLayout()
-{
-    ASSERT(lineLayoutPath() == SimpleLinesPath);
-
-    if (complexLineLayout())
-        complexLineLayout()->lineBoxes().deleteLineBoxes();
-
-    for (auto& renderer : childrenOfType<RenderObject>(*this)) {
-        if (is<RenderText>(renderer))
-            downcast<RenderText>(renderer).deleteLineBoxesBeforeSimpleLineLayout();
-        else if (is<RenderLineBreak>(renderer))
-            downcast<RenderLineBreak>(renderer).deleteLineBoxesBeforeSimpleLineLayout();
-        else
-            ASSERT_NOT_REACHED();
-    }
-
-    m_lineLayout = nullptr;
-}
-
 void RenderBlockFlow::ensureLineBoxes()
 {
     if (!childrenInline())

Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.h (252890 => 252891)


--- trunk/Source/WebCore/rendering/RenderBlockFlow.h	2019-11-26 18:16:04 UTC (rev 252890)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.h	2019-11-26 18:28:13 UTC (rev 252891)
@@ -358,7 +358,6 @@
     const ComplexLineLayout* complexLineLayout() const;
     ComplexLineLayout* complexLineLayout();
 
-    void deleteLineBoxesBeforeSimpleLineLayout();
     void ensureLineBoxes();
     void generateLineBoxTree();
 

Modified: trunk/Source/WebCore/rendering/RenderLineBreak.cpp (252890 => 252891)


--- trunk/Source/WebCore/rendering/RenderLineBreak.cpp	2019-11-26 18:16:04 UTC (rev 252890)
+++ trunk/Source/WebCore/rendering/RenderLineBreak.cpp	2019-11-26 18:28:13 UTC (rev 252891)
@@ -126,12 +126,6 @@
     downcast<RenderBlockFlow>(*parent()).ensureLineBoxes();
 }
 
-void RenderLineBreak::deleteLineBoxesBeforeSimpleLineLayout()
-{
-    delete m_inlineBoxWrapper;
-    m_inlineBoxWrapper = nullptr;
-}
-
 int RenderLineBreak::caretMinOffset() const
 {
     return 0;

Modified: trunk/Source/WebCore/rendering/RenderLineBreak.h (252890 => 252891)


--- trunk/Source/WebCore/rendering/RenderLineBreak.h	2019-11-26 18:16:04 UTC (rev 252890)
+++ trunk/Source/WebCore/rendering/RenderLineBreak.h	2019-11-26 18:28:13 UTC (rev 252891)
@@ -46,7 +46,6 @@
     void deleteInlineBoxWrapper();
     void replaceInlineBoxWrapper(InlineElementBox&);
     void dirtyLineBoxes(bool fullLayout);
-    void deleteLineBoxesBeforeSimpleLineLayout();
 
     IntRect linesBoundingBox() const;
 

Modified: trunk/Source/WebCore/rendering/RenderText.cpp (252890 => 252891)


--- trunk/Source/WebCore/rendering/RenderText.cpp	2019-11-26 18:16:04 UTC (rev 252890)
+++ trunk/Source/WebCore/rendering/RenderText.cpp	2019-11-26 18:28:13 UTC (rev 252891)
@@ -307,11 +307,6 @@
     RenderObject::willBeDestroyed();
 }
 
-void RenderText::deleteLineBoxesBeforeSimpleLineLayout()
-{
-    m_lineBoxes.deleteAll();
-}
-
 String RenderText::originalText() const
 {
     return m_originalTextDiffersFromRendered ? originalTextMap().get(this) : m_text;

Modified: trunk/Source/WebCore/rendering/RenderText.h (252890 => 252891)


--- trunk/Source/WebCore/rendering/RenderText.h	2019-11-26 18:16:04 UTC (rev 252890)
+++ trunk/Source/WebCore/rendering/RenderText.h	2019-11-26 18:28:13 UTC (rev 252891)
@@ -164,7 +164,6 @@
 #endif
 
     void ensureLineBoxes();
-    void deleteLineBoxesBeforeSimpleLineLayout();
     const SimpleLineLayout::Layout* simpleLineLayout() const;
 
     StringView stringView(unsigned start = 0, Optional<unsigned> stop = WTF::nullopt) const;

Modified: trunk/Source/WebCore/rendering/RootInlineBox.cpp (252890 => 252891)


--- trunk/Source/WebCore/rendering/RootInlineBox.cpp	2019-11-26 18:16:04 UTC (rev 252890)
+++ trunk/Source/WebCore/rendering/RootInlineBox.cpp	2019-11-26 18:28:13 UTC (rev 252891)
@@ -828,7 +828,9 @@
 
 void RootInlineBox::removeLineBoxFromRenderObject()
 {
-    blockFlow().complexLineLayout()->lineBoxes().removeLineBox(this);
+    // Null if we are destroying ComplexLineLayout.
+    if (auto* complexLineLayout = blockFlow().complexLineLayout())
+        complexLineLayout->lineBoxes().removeLineBox(this);
 }
 
 void RootInlineBox::extractLineBoxFromRenderObject()
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to