Title: [275657] trunk
Revision
275657
Author
[email protected]
Date
2021-04-08 06:16:19 -0700 (Thu, 08 Apr 2021)

Log Message

Revert r273621 because iPhone PLT regression
https://bugs.webkit.org/show_bug.cgi?id=224323

Unreviewed.


Source/WebCore:

* dom/CharacterData.cpp:
(WebCore::CharacterData::parserAppendData):
(WebCore::CharacterData::setDataAndUpdate):
* dom/Document.cpp:
(WebCore::Document::removedLastRef):
(WebCore::Document::resolveStyle):
(WebCore::Document::updateTextRenderer):
(WebCore::Document::needsStyleRecalc const):
* dom/Document.h:
* dom/Text.cpp:
(WebCore::Text::splitText):
(WebCore::Text::updateRendererAfterContentChange):
* editing/CompositeEditCommand.cpp:
(WebCore::CompositeEditCommand::deleteInsignificantText):
* editing/markup.cpp:
(WebCore::replaceChildrenWithFragment):
* rendering/updating/RenderTreeUpdater.cpp:
* style/StyleTreeResolver.cpp:
(WebCore::Style::TreeResolver::TreeResolver):
(WebCore::Style::TreeResolver::resolve):
* style/StyleTreeResolver.h:
(WebCore::Style::TreeResolver::TreeResolver): Deleted.
* style/StyleUpdate.cpp:
(WebCore::Style::Update::addText):
(WebCore::Style::Update::addPossibleRoot):
* style/StyleUpdate.h:
(WebCore::Style::Update:: const):
(WebCore::Style::Update::roots const): Deleted.

LayoutTests:

* fast/text/splitText-dirty-lines-expected.txt:
* fast/text/text-combine-surroundContents-crash-expected.txt:
* imported/blink/fast/css/first-letter-range-insert-expected.txt:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (275656 => 275657)


--- trunk/LayoutTests/ChangeLog	2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/LayoutTests/ChangeLog	2021-04-08 13:16:19 UTC (rev 275657)
@@ -1,3 +1,14 @@
+2021-04-08  Antti Koivisto  <[email protected]>
+
+        Revert r273621 because iPhone PLT regression
+        https://bugs.webkit.org/show_bug.cgi?id=224323
+
+        Unreviewed.
+
+        * fast/text/splitText-dirty-lines-expected.txt:
+        * fast/text/text-combine-surroundContents-crash-expected.txt:
+        * imported/blink/fast/css/first-letter-range-insert-expected.txt:
+
 2021-04-08  Youenn Fablet  <[email protected]>
 
         Update SFrame implementation to latest version

Modified: trunk/LayoutTests/fast/text/splitText-dirty-lines-expected.txt (275656 => 275657)


--- trunk/LayoutTests/fast/text/splitText-dirty-lines-expected.txt	2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/LayoutTests/fast/text/splitText-dirty-lines-expected.txt	2021-04-08 13:16:19 UTC (rev 275657)
@@ -15,6 +15,7 @@
       text run at (80,120) width 40: "E"
 layer at (8,8) size 200x160
   RenderBlock (positioned) {DIV} at (0,0) size 200x160 [color=#008000]
+    RenderText {#text} at (0,0) size 0x0
     RenderText {#text} at (0,0) size 160x160
       text run at (0,0) width 160: "AAAA"
       text run at (0,40) width 40: "B"

Modified: trunk/LayoutTests/fast/text/text-combine-surroundContents-crash-expected.txt (275656 => 275657)


--- trunk/LayoutTests/fast/text/text-combine-surroundContents-crash-expected.txt	2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/LayoutTests/fast/text/text-combine-surroundContents-crash-expected.txt	2021-04-08 13:16:19 UTC (rev 275657)
@@ -1,15 +1,16 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
-layer at (0,0) size 800x56
-  RenderBlock {HTML} at (0,0) size 800x56
-    RenderBody {BODY} at (8,8) size 784x40
-      RenderBlock {DIV} at (0,0) size 20x20
-        RenderInline {SPAN} at (0,0) size 0x0
-        RenderCombineText {#text} at (0,0) size 20x20
-          text run at (0,0) width 20: "\x{FFFC}"
-      RenderBlock (anonymous) at (0,20) size 784x0
+layer at (0,0) size 800x76
+  RenderBlock {HTML} at (0,0) size 800x76
+    RenderBody {BODY} at (8,8) size 784x60
+      RenderBlock {DIV} at (0,0) size 20x40
+        RenderCombineText {#text} at (0,0) size 0x0
+        RenderInline {SPAN} at (0,0) size 20x0
+        RenderCombineText {#text} at (0,20) size 20x20
+          text run at (0,20) width 20: "\x{FFFC}"
+      RenderBlock (anonymous) at (0,40) size 784x0
         RenderText {#text} at (0,0) size 0x0
         RenderText {#text} at (0,0) size 0x0
-      RenderBlock {DIV} at (0,20) size 784x20
+      RenderBlock {DIV} at (0,40) size 784x20
         RenderText {#text} at (0,0) size 400x20
           text run at (0,0) width 400: "PASS, did not crash."

Modified: trunk/LayoutTests/imported/blink/fast/css/first-letter-range-insert-expected.txt (275656 => 275657)


--- trunk/LayoutTests/imported/blink/fast/css/first-letter-range-insert-expected.txt	2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/LayoutTests/imported/blink/fast/css/first-letter-range-insert-expected.txt	2021-04-08 13:16:19 UTC (rev 275657)
@@ -1 +1,2 @@
+B
 

Modified: trunk/Source/WebCore/ChangeLog (275656 => 275657)


--- trunk/Source/WebCore/ChangeLog	2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/ChangeLog	2021-04-08 13:16:19 UTC (rev 275657)
@@ -1,3 +1,39 @@
+2021-04-08  Antti Koivisto  <[email protected]>
+
+        Revert r273621 because iPhone PLT regression
+        https://bugs.webkit.org/show_bug.cgi?id=224323
+
+        Unreviewed.
+
+        * dom/CharacterData.cpp:
+        (WebCore::CharacterData::parserAppendData):
+        (WebCore::CharacterData::setDataAndUpdate):
+        * dom/Document.cpp:
+        (WebCore::Document::removedLastRef):
+        (WebCore::Document::resolveStyle):
+        (WebCore::Document::updateTextRenderer):
+        (WebCore::Document::needsStyleRecalc const):
+        * dom/Document.h:
+        * dom/Text.cpp:
+        (WebCore::Text::splitText):
+        (WebCore::Text::updateRendererAfterContentChange):
+        * editing/CompositeEditCommand.cpp:
+        (WebCore::CompositeEditCommand::deleteInsignificantText):
+        * editing/markup.cpp:
+        (WebCore::replaceChildrenWithFragment):
+        * rendering/updating/RenderTreeUpdater.cpp:
+        * style/StyleTreeResolver.cpp:
+        (WebCore::Style::TreeResolver::TreeResolver):
+        (WebCore::Style::TreeResolver::resolve):
+        * style/StyleTreeResolver.h:
+        (WebCore::Style::TreeResolver::TreeResolver): Deleted.
+        * style/StyleUpdate.cpp:
+        (WebCore::Style::Update::addText):
+        (WebCore::Style::Update::addPossibleRoot):
+        * style/StyleUpdate.h:
+        (WebCore::Style::Update:: const):
+        (WebCore::Style::Update::roots const): Deleted.
+
 2021-04-08  Youenn Fablet  <[email protected]>
 
         Update SFrame implementation to latest version

Modified: trunk/Source/WebCore/dom/CharacterData.cpp (275656 => 275657)


--- trunk/Source/WebCore/dom/CharacterData.cpp	2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/dom/CharacterData.cpp	2021-04-08 13:16:19 UTC (rev 275657)
@@ -102,7 +102,7 @@
         m_data.append(string.characters16() + offset, characterLengthLimit);
 
     ASSERT(!renderer() || is<Text>(*this));
-    if (is<Text>(*this))
+    if (is<Text>(*this) && parentNode())
         downcast<Text>(*this).updateRendererAfterContentChange(oldLength, 0);
 
     notifyParentAfterChange(ContainerNode::ChildChange::Source::Parser);
@@ -182,7 +182,7 @@
         document().textInserted(*this, offsetOfReplacedData, newLength);
 
     ASSERT(!renderer() || is<Text>(*this));
-    if (is<Text>(*this))
+    if (is<Text>(*this) && parentNode())
         downcast<Text>(*this).updateRendererAfterContentChange(offsetOfReplacedData, oldLength);
 
     if (is<ProcessingInstruction>(*this))

Modified: trunk/Source/WebCore/dom/Document.cpp (275656 => 275657)


--- trunk/Source/WebCore/dom/Document.cpp	2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/dom/Document.cpp	2021-04-08 13:16:19 UTC (rev 275657)
@@ -805,7 +805,6 @@
         m_fullscreenManager->clear();
 #endif
         m_associatedFormControls.clear();
-        m_pendingRenderTreeTextUpdate = { };
 
         m_fontSelector->stopLoadingAndClearFonts();
 
@@ -2051,7 +2050,7 @@
                 documentElement->invalidateStyleForSubtree();
         }
 
-        Style::TreeResolver resolver(*this, WTFMove(m_pendingRenderTreeTextUpdate));
+        Style::TreeResolver resolver(*this);
         auto styleUpdate = resolver.resolve();
 
         m_lastStyleUpdateSizeForTesting = styleUpdate ? styleUpdate->size() : 0;
@@ -2099,12 +2098,10 @@
 
 void Document::updateTextRenderer(Text& text, unsigned offsetOfReplacedText, unsigned lengthOfReplacedText)
 {
-    if (!m_pendingRenderTreeTextUpdate)
-        m_pendingRenderTreeTextUpdate = makeUnique<Style::Update>(*this);
+    auto textUpdate = makeUnique<Style::Update>(*this);
+    textUpdate->addText(text, { offsetOfReplacedText, lengthOfReplacedText, WTF::nullopt });
 
-    m_pendingRenderTreeTextUpdate->addText(text, { offsetOfReplacedText, lengthOfReplacedText, WTF::nullopt });
-
-    scheduleRenderingUpdate({ });
+    updateRenderTree(WTFMove(textUpdate));
 }
 
 bool Document::needsStyleRecalc() const
@@ -2118,9 +2115,6 @@
     if (childNeedsStyleRecalc())
         return true;
 
-    if (m_pendingRenderTreeTextUpdate)
-        return true;
-
     if (styleScope().hasPendingUpdate())
         return true;
 

Modified: trunk/Source/WebCore/dom/Document.h (275656 => 275657)


--- trunk/Source/WebCore/dom/Document.h	2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/dom/Document.h	2021-04-08 13:16:19 UTC (rev 275657)
@@ -1802,8 +1802,6 @@
     
     Timer m_styleRecalcTimer;
 
-    std::unique_ptr<Style::Update> m_pendingRenderTreeTextUpdate;
-
     Element* m_cssTarget { nullptr };
 
     std::unique_ptr<LazyLoadImageObserver> m_lazyLoadImageObserver;

Modified: trunk/Source/WebCore/dom/Text.cpp (275656 => 275657)


--- trunk/Source/WebCore/dom/Text.cpp	2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/dom/Text.cpp	2021-04-08 13:16:19 UTC (rev 275657)
@@ -76,7 +76,8 @@
 
     document().textNodeSplit(*this);
 
-    updateRendererAfterContentChange(0, oldData.length());
+    if (renderer())
+        renderer()->setTextWithOffset(data(), 0, oldData.length());
 
     return newText;
 }
@@ -214,9 +215,7 @@
 
 void Text::updateRendererAfterContentChange(unsigned offsetOfReplacedData, unsigned lengthOfReplacedData)
 {
-    if (!isConnected())
-        return;
-
+    ASSERT(parentNode());
     if (styleValidity() >= Style::Validity::SubtreeAndRenderersInvalid)
         return;
 

Modified: trunk/Source/WebCore/editing/CompositeEditCommand.cpp (275656 => 275657)


--- trunk/Source/WebCore/editing/CompositeEditCommand.cpp	2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/editing/CompositeEditCommand.cpp	2021-04-08 13:16:19 UTC (rev 275657)
@@ -1079,10 +1079,6 @@
         int endOffset = textNode.ptr() == end.deprecatedNode() ? end.deprecatedEditingOffset() : static_cast<int>(textNode->length());
         deleteInsignificantText(textNode, startOffset, endOffset);
     }
-    if (!nodes.isEmpty()) {
-        // Callers expect render tree to be in sync.
-        document().updateLayoutIgnorePendingStylesheets();
-    }
 }
 
 void CompositeEditCommand::deleteInsignificantTextDownstream(const Position& position)

Modified: trunk/Source/WebCore/editing/markup.cpp (275656 => 275657)


--- trunk/Source/WebCore/editing/markup.cpp	2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/editing/markup.cpp	2021-04-08 13:16:19 UTC (rev 275657)
@@ -1387,6 +1387,7 @@
     auto* containerChild = containerNode->firstChild();
     if (containerChild && !containerChild->nextSibling()) {
         if (is<Text>(*containerChild) && hasOneTextChild(fragment) && canUseSetDataOptimization(downcast<Text>(*containerChild), mutation)) {
+            ASSERT(!fragment->firstChild()->refCount());
             downcast<Text>(*containerChild).setData(downcast<Text>(*fragment->firstChild()).data());
             return { };
         }

Modified: trunk/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp (275656 => 275657)


--- trunk/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp	2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp	2021-04-08 13:16:19 UTC (rev 275657)
@@ -102,7 +102,7 @@
 static ListHashSet<ContainerNode*> findRenderingRoots(const Style::Update& update)
 {
     ListHashSet<ContainerNode*> renderingRoots;
-    for (auto& root : update.roots()) {
+    for (auto* root : update.roots()) {
         auto* renderingRoot = findRenderingRoot(*root);
         if (!renderingRoot)
             continue;

Modified: trunk/Source/WebCore/style/StyleTreeResolver.cpp (275656 => 275657)


--- trunk/Source/WebCore/style/StyleTreeResolver.cpp	2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/style/StyleTreeResolver.cpp	2021-04-08 13:16:19 UTC (rev 275657)
@@ -63,9 +63,8 @@
 
 DEFINE_ALLOCATOR_WITH_HEAP_IDENTIFIER(TreeResolverScope);
 
-TreeResolver::TreeResolver(Document& document, std::unique_ptr<Update> update)
+TreeResolver::TreeResolver(Document& document)
     : m_document(document)
-    , m_update(WTFMove(update))
 {
 }
 
@@ -584,12 +583,11 @@
         return nullptr;
     }
     if (!documentElement->childNeedsStyleRecalc() && !documentElement->needsStyleRecalc())
-        return WTFMove(m_update);
+        return nullptr;
 
     m_didSeePendingStylesheet = m_document.styleScope().hasPendingSheetsBeforeBody();
 
-    if (!m_update)
-        m_update = makeUnique<Update>(m_document);
+    m_update = makeUnique<Update>(m_document);
     m_scopeStack.append(adoptRef(*new Scope(m_document)));
     m_parentStack.append(Parent(m_document));
 

Modified: trunk/Source/WebCore/style/StyleTreeResolver.h (275656 => 275657)


--- trunk/Source/WebCore/style/StyleTreeResolver.h	2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/style/StyleTreeResolver.h	2021-04-08 13:16:19 UTC (rev 275657)
@@ -49,7 +49,7 @@
 DECLARE_ALLOCATOR_WITH_HEAP_IDENTIFIER(TreeResolverScope);
 class TreeResolver {
 public:
-    TreeResolver(Document&, std::unique_ptr<Update> = { });
+    TreeResolver(Document&);
     ~TreeResolver();
 
     std::unique_ptr<Update> resolve();

Modified: trunk/Source/WebCore/style/StyleUpdate.cpp (275656 => 275657)


--- trunk/Source/WebCore/style/StyleUpdate.cpp	2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/style/StyleUpdate.cpp	2021-04-08 13:16:19 UTC (rev 275657)
@@ -98,24 +98,12 @@
 
 void Update::addText(Text& text, Element* parent, TextUpdate&& textUpdate)
 {
+    ASSERT(!m_texts.contains(&text));
     ASSERT(composedTreeAncestors(text).first() == parent);
 
     addPossibleRoot(parent);
-
-    auto result = m_texts.ensure(&text, [&] {
-        return WTFMove(textUpdate);
-    });
-    if (!result.isNewEntry) {
-        auto& entry = result.iterator->value;
-        auto startOffset = std::min(entry.offset, textUpdate.offset);
-        auto endOffset = std::max(entry.offset + entry.length, textUpdate.offset + textUpdate.length);
-        entry.offset = startOffset;
-        entry.length = endOffset - startOffset;
-        
-        ASSERT(!entry.inheritedDisplayContentsStyle || !textUpdate.inheritedDisplayContentsStyle);
-        if (!entry.inheritedDisplayContentsStyle)
-            entry.inheritedDisplayContentsStyle = WTFMove(textUpdate.inheritedDisplayContentsStyle);
-    }
+    
+    m_texts.add(&text, WTFMove(textUpdate));
 }
 
 void Update::addText(Text& text, TextUpdate&& textUpdate)
@@ -126,7 +114,7 @@
 void Update::addPossibleRoot(Element* element)
 {
     if (!element) {
-        m_roots.add(m_document.ptr());
+        m_roots.add(&m_document);
         return;
     }
     if (m_elements.contains(element))

Modified: trunk/Source/WebCore/style/StyleUpdate.h (275656 => 275657)


--- trunk/Source/WebCore/style/StyleUpdate.h	2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/style/StyleUpdate.h	2021-04-08 13:16:19 UTC (rev 275657)
@@ -69,7 +69,7 @@
 public:
     Update(Document&);
 
-    const ListHashSet<RefPtr<ContainerNode>>& roots() const { return m_roots; }
+    const ListHashSet<ContainerNode*>& roots() const { return m_roots; }
 
     const ElementUpdates* elementUpdates(const Element&) const;
     ElementUpdates* elementUpdates(const Element&);
@@ -90,10 +90,10 @@
 private:
     void addPossibleRoot(Element*);
 
-    Ref<Document> m_document;
-    ListHashSet<RefPtr<ContainerNode>> m_roots;
-    HashMap<RefPtr<const Element>, ElementUpdates> m_elements;
-    HashMap<RefPtr<const Text>, TextUpdate> m_texts;
+    Document& m_document;
+    ListHashSet<ContainerNode*> m_roots;
+    HashMap<const Element*, ElementUpdates> m_elements;
+    HashMap<const Text*, TextUpdate> m_texts;
 };
 
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to