Skip to content

Commit

Permalink
Merge r228566 - [RenderTreeBuilder] Move RenderElement::addChild() to…
Browse files Browse the repository at this point in the history
… RenderTreeBuilder

https://bugs.webkit.org/show_bug.cgi?id=182878
<rdar://problem/37608349>

Reviewed by Antti Koivisto.

This patch removes the last addChild() related mutation logic from the renderers.

No change in functionality.

* rendering/RenderElement.cpp:
(WebCore::RenderElement::didInsertChild):
(WebCore::RenderElement::addChild): Deleted.
* rendering/RenderElement.h:
(WebCore::RenderElement::isChildAllowed const):
* rendering/updating/RenderTreeBuilder.cpp:
(WebCore::RenderTreeBuilder::insertChild):
(WebCore::RenderTreeBuilder::insertChildToRenderElement):
* rendering/updating/RenderTreeBuilder.h:
* rendering/updating/RenderTreeBuilderBlock.cpp:
(WebCore::RenderTreeBuilder::Block::insertChildIgnoringContinuation):
* rendering/updating/RenderTreeBuilderInline.cpp:
(WebCore::RenderTreeBuilder::Inline::insertChildIgnoringContinuation):
* rendering/updating/RenderTreeBuilderSVG.cpp:
(WebCore::RenderTreeBuilder::SVG::insertChild):
* rendering/updating/RenderTreeBuilderTable.cpp:
(WebCore::RenderTreeBuilder::Table::insertChild):
  • Loading branch information
alanbaradlay authored and carlosgcampos committed Feb 20, 2018
1 parent 2da2ce5 commit 733700e
Show file tree
Hide file tree
Showing 9 changed files with 46 additions and 17 deletions.
30 changes: 30 additions & 0 deletions Source/WebCore/ChangeLog
@@ -1,3 +1,33 @@
2018-02-16 Zalan Bujtas <zalan@apple.com>

[RenderTreeBuilder] Move RenderElement::addChild() to RenderTreeBuilder
https://bugs.webkit.org/show_bug.cgi?id=182878
<rdar://problem/37608349>

Reviewed by Antti Koivisto.

This patch removes the last addChild() related mutation logic from the renderers.

No change in functionality.

* rendering/RenderElement.cpp:
(WebCore::RenderElement::didInsertChild):
(WebCore::RenderElement::addChild): Deleted.
* rendering/RenderElement.h:
(WebCore::RenderElement::isChildAllowed const):
* rendering/updating/RenderTreeBuilder.cpp:
(WebCore::RenderTreeBuilder::insertChild):
(WebCore::RenderTreeBuilder::insertChildToRenderElement):
* rendering/updating/RenderTreeBuilder.h:
* rendering/updating/RenderTreeBuilderBlock.cpp:
(WebCore::RenderTreeBuilder::Block::insertChildIgnoringContinuation):
* rendering/updating/RenderTreeBuilderInline.cpp:
(WebCore::RenderTreeBuilder::Inline::insertChildIgnoringContinuation):
* rendering/updating/RenderTreeBuilderSVG.cpp:
(WebCore::RenderTreeBuilder::SVG::insertChild):
* rendering/updating/RenderTreeBuilderTable.cpp:
(WebCore::RenderTreeBuilder::Table::insertChild):

2018-02-16 Fujii Hironori <Hironori.Fujii@sony.com>

IndexedDB: Several test crash in when destroying a IDBKeyData
Expand Down
5 changes: 1 addition & 4 deletions Source/WebCore/rendering/RenderElement.cpp
Expand Up @@ -456,11 +456,8 @@ void RenderElement::setStyle(RenderStyle&& style, StyleDifference minimalStyleDi
}
}

void RenderElement::addChild(RenderTreeBuilder& builder, RenderPtr<RenderObject> newChild, RenderObject* beforeChild)
void RenderElement::didInsertChild(RenderObject& child, RenderObject*)
{
auto& child = *newChild;
builder.insertChildToRenderElement(*this, WTFMove(newChild), beforeChild);

if (is<RenderText>(child))
downcast<RenderText>(child).styleDidChange(StyleDifferenceEqual, nullptr);
// SVG creates renderers for <g display="none">, as SVG requires children of hidden
Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/rendering/RenderElement.h
Expand Up @@ -87,9 +87,9 @@ class RenderElement : public RenderObject {
bool isRenderInline() const;

virtual bool isChildAllowed(const RenderObject&, const RenderStyle&) const { return true; }
virtual void addChild(RenderTreeBuilder&, RenderPtr<RenderObject>, RenderObject* beforeChild);
virtual void addChildIgnoringContinuation(RenderTreeBuilder&, RenderPtr<RenderObject> newChild, RenderObject* beforeChild = nullptr);
void removeAndDestroyChild(RenderTreeBuilder&, RenderObject&);
void didInsertChild(RenderObject& child, RenderObject* beforeChild);

// The following functions are used when the render tree hierarchy changes to make sure layers get
// properly added and removed. Since containership can be implemented by any subclass, and since a hierarchy
Expand Down
8 changes: 5 additions & 3 deletions Source/WebCore/rendering/updating/RenderTreeBuilder.cpp
Expand Up @@ -142,7 +142,7 @@ void RenderTreeBuilder::insertChild(RenderElement& parent, RenderPtr<RenderObjec
{
auto insertRecursiveIfNeeded = [&](RenderElement& parentCandidate) {
if (&parent == &parentCandidate) {
parent.addChild(*this, WTFMove(child), beforeChild);
insertChildToRenderElement(parent, WTFMove(child), beforeChild);
return;
}
insertChild(parentCandidate, WTFMove(child), beforeChild);
Expand Down Expand Up @@ -255,7 +255,7 @@ void RenderTreeBuilder::insertChild(RenderElement& parent, RenderPtr<RenderObjec
return;
}

parent.addChild(*this, WTFMove(child), beforeChild);
insertChildToRenderElement(parent, WTFMove(child), beforeChild);
}

RenderPtr<RenderObject> RenderTreeBuilder::takeChild(RenderElement& parent, RenderObject& child)
Expand Down Expand Up @@ -320,7 +320,9 @@ void RenderTreeBuilder::insertChildToRenderElement(RenderElement& parent, Render
insertChild(*table, WTFMove(child));
return;
}
parent.RenderElement::insertChildInternal(WTFMove(child), beforeChild);
auto& newChild = *child.get();
parent.insertChildInternal(WTFMove(child), beforeChild);
parent.didInsertChild(newChild, beforeChild);
}

void RenderTreeBuilder::insertChildToRenderBlockIgnoringContinuation(RenderBlock& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/rendering/updating/RenderTreeBuilder.h
Expand Up @@ -63,7 +63,6 @@ class RenderTreeBuilder {
static RenderTreeBuilder* current() { return s_current; }

// These functions are temporary until after all block/inline/continuation code is moved over.
void insertChildToRenderElement(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
void insertChildToRenderBlockIgnoringContinuation(RenderBlock& parent, RenderPtr<RenderObject>, RenderObject* beforeChild = nullptr);
void insertChildToRenderInlineIgnoringContinuation(RenderInline& parent, RenderPtr<RenderObject>, RenderObject* beforeChild = nullptr);

Expand Down Expand Up @@ -95,6 +94,7 @@ class RenderTreeBuilder {
RenderPtr<RenderObject> takeChildFromRenderGrid(RenderGrid& parent, RenderObject& child);

void insertChildToRenderGrid(RenderGrid& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
void insertChildToRenderElement(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);

FirstLetter& firstLetterBuilder() { return *m_firstLetterBuilder; }
List& listBuilder() { return *m_listBuilder; }
Expand Down
4 changes: 2 additions & 2 deletions Source/WebCore/rendering/updating/RenderTreeBuilderBlock.cpp
Expand Up @@ -223,15 +223,15 @@ void RenderTreeBuilder::Block::insertChildIgnoringContinuation(RenderBlock& pare
// No suitable existing anonymous box - create a new one.
auto newBox = parent.createAnonymousBlock();
auto& box = *newBox;
parent.RenderElement::addChild(m_builder, WTFMove(newBox), beforeChild);
m_builder.insertChildToRenderElement(parent, WTFMove(newBox), beforeChild);
m_builder.insertChild(box, WTFMove(child));
return;
}
}

parent.invalidateLineLayoutPath();

parent.RenderElement::addChild(m_builder, WTFMove(child), beforeChild);
m_builder.insertChildToRenderElement(parent, WTFMove(child), beforeChild);

if (madeBoxesNonInline && is<RenderBlock>(parent.parent()) && parent.isAnonymousBlock())
removeLeftoverAnonymousBlock(parent);
Expand Down
Expand Up @@ -188,7 +188,7 @@ void RenderTreeBuilder::Inline::insertChildIgnoringContinuation(RenderInline& pa
}

auto& childToAdd = *child;
parent.RenderElement::addChild(m_builder, WTFMove(child), beforeChild);
m_builder.insertChildToRenderElement(parent, WTFMove(child), beforeChild);
childToAdd.setNeedsLayoutAndPrefWidthsRecalc();
}

Expand Down
4 changes: 2 additions & 2 deletions Source/WebCore/rendering/updating/RenderTreeBuilderSVG.cpp
Expand Up @@ -43,7 +43,7 @@ RenderTreeBuilder::SVG::SVG(RenderTreeBuilder& builder)
void RenderTreeBuilder::SVG::insertChild(RenderSVGContainer& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
{
auto& childToAdd = *child;
parent.RenderElement::addChild(m_builder, WTFMove(child), beforeChild);
m_builder.insertChildToRenderElement(parent, WTFMove(child), beforeChild);
SVGResourcesCache::clientWasAddedToTree(childToAdd);
}

Expand All @@ -60,7 +60,7 @@ void RenderTreeBuilder::SVG::insertChild(RenderSVGInline& parent, RenderPtr<Rend
void RenderTreeBuilder::SVG::insertChild(RenderSVGRoot& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
{
auto& childToAdd = *child;
parent.RenderElement::addChild(m_builder, WTFMove(child), beforeChild);
m_builder.insertChildToRenderElement(parent, WTFMove(child), beforeChild);
SVGResourcesCache::clientWasAddedToTree(childToAdd);
}

Expand Down
6 changes: 3 additions & 3 deletions Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp
Expand Up @@ -168,7 +168,7 @@ void RenderTreeBuilder::Table::insertChild(RenderTableRow& parent, RenderPtr<Ren

auto& newChild = *child.get();
ASSERT(!beforeChild || is<RenderTableCell>(*beforeChild));
parent.RenderElement::addChild(m_builder, WTFMove(child), beforeChild);
m_builder.insertChildToRenderElement(parent, WTFMove(child), beforeChild);
// FIXME: child should always be a RenderTableCell at this point.
if (is<RenderTableCell>(newChild))
parent.didInsertTableCell(downcast<RenderTableCell>(newChild), beforeChild);
Expand All @@ -183,7 +183,7 @@ void RenderTreeBuilder::Table::insertChild(RenderTableSection& parent, RenderPtr
if (is<RenderTableRow>(*child.get()))
parent.willInsertTableRow(downcast<RenderTableRow>(*child.get()), beforeChild);
ASSERT(!beforeChild || is<RenderTableRow>(*beforeChild));
parent.RenderElement::addChild(m_builder, WTFMove(child), beforeChild);
m_builder.insertChildToRenderElement(parent, WTFMove(child), beforeChild);
}

void RenderTreeBuilder::Table::insertChild(RenderTable& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
Expand All @@ -197,7 +197,7 @@ void RenderTreeBuilder::Table::insertChild(RenderTable& parent, RenderPtr<Render
else if (is<RenderTableCol>(newChild))
parent.willInsertTableColumn(downcast<RenderTableCol>(newChild), beforeChild);

parent.RenderElement::addChild(m_builder, WTFMove(child), beforeChild);
m_builder.insertChildToRenderElement(parent, WTFMove(child), beforeChild);
}

bool RenderTreeBuilder::Table::childRequiresTable(const RenderElement& parent, const RenderObject& child)
Expand Down

0 comments on commit 733700e

Please sign in to comment.