Title: [153816] trunk/Source/WebCore
Revision
153816
Author
an...@apple.com
Date
2013-08-08 00:18:36 -0700 (Thu, 08 Aug 2013)

Log Message

Move more style recalc code to StyleResolveTree.cpp
https://bugs.webkit.org/show_bug.cgi?id=119553

Reviewed by Andreas Kling.

* css/StyleResolver.cpp:
* css/StyleResolver.h:
        
    Remove now unused StyleResolver::styleForText.

* dom/ElementShadow.cpp:
* dom/ElementShadow.h:
        
    Remove ElementShadow::recalcStyle.

* dom/ShadowRoot.cpp:
(WebCore::ShadowRoot::setResetStyleInheritance):
        
    Use Style::resolveTree instead of ElementShadow::recalcStyle.

* dom/ShadowRoot.h:
        
    Remove ShadowRoot::recalcStyle.

* dom/Text.cpp:
* dom/Text.h:
        
    Remove Text::recalcTextStyle.

* style/StyleResolveTree.cpp:
(WebCore::Style::updateTextStyle):
        
    Moved from Text::recalcTextStyle. Speed up by just setting the parent style on common case.

(WebCore::Style::resolveShadowTree):
        
    Moved from ShadowRoot::recalcStyle. 
    Simplified to cover only cases that can occur with the current shadow DOM support.

(WebCore::Style::resolveTree):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (153815 => 153816)


--- trunk/Source/WebCore/ChangeLog	2013-08-08 07:16:51 UTC (rev 153815)
+++ trunk/Source/WebCore/ChangeLog	2013-08-08 07:18:36 UTC (rev 153816)
@@ -1,3 +1,46 @@
+2013-08-08  Antti Koivisto  <an...@apple.com>
+
+        Move more style recalc code to StyleResolveTree.cpp
+        https://bugs.webkit.org/show_bug.cgi?id=119553
+
+        Reviewed by Andreas Kling.
+
+        * css/StyleResolver.cpp:
+        * css/StyleResolver.h:
+        
+            Remove now unused StyleResolver::styleForText.
+
+        * dom/ElementShadow.cpp:
+        * dom/ElementShadow.h:
+        
+            Remove ElementShadow::recalcStyle.
+
+        * dom/ShadowRoot.cpp:
+        (WebCore::ShadowRoot::setResetStyleInheritance):
+        
+            Use Style::resolveTree instead of ElementShadow::recalcStyle.
+
+        * dom/ShadowRoot.h:
+        
+            Remove ShadowRoot::recalcStyle.
+
+        * dom/Text.cpp:
+        * dom/Text.h:
+        
+            Remove Text::recalcTextStyle.
+
+        * style/StyleResolveTree.cpp:
+        (WebCore::Style::updateTextStyle):
+        
+            Moved from Text::recalcTextStyle. Speed up by just setting the parent style on common case.
+
+        (WebCore::Style::resolveShadowTree):
+        
+            Moved from ShadowRoot::recalcStyle. 
+            Simplified to cover only cases that can occur with the current shadow DOM support.
+
+        (WebCore::Style::resolveTree):
+
 2013-08-08  Andreas Kling  <akl...@apple.com>
 
         REGRESSION(r139282): Old caret sometimes gets "stuck" (not repainted) in contenteditable elements.

Modified: trunk/Source/WebCore/css/StyleResolver.cpp (153815 => 153816)


--- trunk/Source/WebCore/css/StyleResolver.cpp	2013-08-08 07:16:51 UTC (rev 153815)
+++ trunk/Source/WebCore/css/StyleResolver.cpp	2013-08-08 07:18:36 UTC (rev 153816)
@@ -1221,16 +1221,6 @@
     return m_state.takeStyle();
 }
 
-PassRefPtr<RenderStyle> StyleResolver::styleForText(Text* textNode)
-{
-    ASSERT(textNode);
-
-    NodeRenderingContext context(textNode);
-    Node* parentNode = context.parentNodeForRenderingAndStyle();
-    return context.resetStyleInheritance() || !parentNode || !parentNode->renderStyle() ?
-        defaultStyleForElement() : parentNode->renderStyle();
-}
-
 static void addIntrinsicMargins(RenderStyle* style)
 {
     // Intrinsic margin value.

Modified: trunk/Source/WebCore/css/StyleResolver.h (153815 => 153816)


--- trunk/Source/WebCore/css/StyleResolver.h	2013-08-08 07:16:51 UTC (rev 153815)
+++ trunk/Source/WebCore/css/StyleResolver.h	2013-08-08 07:18:36 UTC (rev 153816)
@@ -189,7 +189,6 @@
 
     PassRefPtr<RenderStyle> styleForPage(int pageIndex);
     PassRefPtr<RenderStyle> defaultStyleForElement();
-    PassRefPtr<RenderStyle> styleForText(Text*);
 
     static PassRefPtr<RenderStyle> styleForDocument(Document*, CSSFontSelector* = 0);
 

Modified: trunk/Source/WebCore/dom/ElementShadow.cpp (153815 => 153816)


--- trunk/Source/WebCore/dom/ElementShadow.cpp	2013-08-08 07:16:51 UTC (rev 153815)
+++ trunk/Source/WebCore/dom/ElementShadow.cpp	2013-08-08 07:18:36 UTC (rev 153816)
@@ -113,12 +113,6 @@
     return shadowRoot()->needsStyleRecalc();
 }
 
-void ElementShadow::recalcStyle(Style::Change change)
-{
-    if (ShadowRoot* root = shadowRoot())
-        root->recalcStyle(change);
-}
-
 void ElementShadow::removeAllEventListeners()
 {
     if (ShadowRoot* root = shadowRoot()) {

Modified: trunk/Source/WebCore/dom/ElementShadow.h (153815 => 153816)


--- trunk/Source/WebCore/dom/ElementShadow.h	2013-08-08 07:16:51 UTC (rev 153815)
+++ trunk/Source/WebCore/dom/ElementShadow.h	2013-08-08 07:18:36 UTC (rev 153816)
@@ -61,7 +61,6 @@
 
     bool childNeedsStyleRecalc() const;
     bool needsStyleRecalc() const;
-    void recalcStyle(Style::Change);
     void removeAllEventListeners();
 
     void invalidateDistribution() { m_distributor.invalidateDistribution(host()); }

Modified: trunk/Source/WebCore/dom/ShadowRoot.cpp (153815 => 153816)


--- trunk/Source/WebCore/dom/ShadowRoot.cpp	2013-08-08 07:16:51 UTC (rev 153815)
+++ trunk/Source/WebCore/dom/ShadowRoot.cpp	2013-08-08 07:18:36 UTC (rev 153816)
@@ -122,26 +122,6 @@
     }
 }
 
-void ShadowRoot::recalcStyle(Style::Change change)
-{
-    // ShadowRoot doesn't support custom callbacks.
-    ASSERT(!hasCustomStyleCallbacks());
-
-    StyleResolver* styleResolver = document()->ensureStyleResolver();
-    styleResolver->pushParentShadowRoot(this);
-
-    for (Node* child = firstChild(); child; child = child->nextSibling()) {
-        if (child->isElementNode())
-            Style::resolveTree(toElement(child), change);
-        else if (child->isTextNode())
-            toText(child)->recalcTextStyle(change);
-    }
-
-    styleResolver->popParentShadowRoot(this);
-    clearNeedsStyleRecalc();
-    clearChildNeedsStyleRecalc();
-}
-
 void ShadowRoot::setApplyAuthorStyles(bool value)
 {
     if (isOrphan())
@@ -160,8 +140,8 @@
 
     if (value != m_resetStyleInheritance) {
         m_resetStyleInheritance = value;
-        if (attached() && owner())
-            owner()->recalcStyle(Style::Force);
+        if (attached() && host())
+            Style::resolveTree(host(), Style::Force);
     }
 }
 

Modified: trunk/Source/WebCore/dom/ShadowRoot.h (153815 => 153816)


--- trunk/Source/WebCore/dom/ShadowRoot.h	2013-08-08 07:16:51 UTC (rev 153815)
+++ trunk/Source/WebCore/dom/ShadowRoot.h	2013-08-08 07:18:36 UTC (rev 153816)
@@ -56,8 +56,6 @@
 
     virtual ~ShadowRoot();
 
-    void recalcStyle(Style::Change);
-
     virtual bool applyAuthorStyles() const OVERRIDE { return m_applyAuthorStyles; }
     void setApplyAuthorStyles(bool);
     virtual bool resetStyleInheritance() const OVERRIDE { return m_resetStyleInheritance; }

Modified: trunk/Source/WebCore/dom/Text.cpp (153815 => 153816)


--- trunk/Source/WebCore/dom/Text.cpp	2013-08-08 07:16:51 UTC (rev 153815)
+++ trunk/Source/WebCore/dom/Text.cpp	2013-08-08 07:18:36 UTC (rev 153816)
@@ -282,22 +282,6 @@
     CharacterData::attach(context);
 }
 
-void Text::recalcTextStyle(Style::Change change)
-{
-    RenderText* renderer = toRenderText(this->renderer());
-
-    if (change != Style::NoChange && renderer)
-        renderer->setStyle(document()->ensureStyleResolver()->styleForText(this));
-
-    if (needsStyleRecalc()) {
-        if (renderer)
-            renderer->setText(dataImpl());
-        else
-            reattach();
-    }
-    clearNeedsStyleRecalc();
-}
-
 void Text::updateTextRenderer(unsigned offsetOfReplacedData, unsigned lengthOfReplacedData)
 {
     if (!attached())

Modified: trunk/Source/WebCore/dom/Text.h (153815 => 153816)


--- trunk/Source/WebCore/dom/Text.h	2013-08-08 07:16:51 UTC (rev 153815)
+++ trunk/Source/WebCore/dom/Text.h	2013-08-08 07:18:36 UTC (rev 153816)
@@ -45,7 +45,6 @@
     String wholeText() const;
     PassRefPtr<Text> replaceWholeText(const String&, ExceptionCode&);
     
-    void recalcTextStyle(Style::Change);
     void createTextRendererIfNeeded();
     bool textRendererIsNeeded(const NodeRenderingContext&);
     RenderText* createTextRenderer(RenderArena*, RenderStyle*);

Modified: trunk/Source/WebCore/style/StyleResolveTree.cpp (153815 => 153816)


--- trunk/Source/WebCore/style/StyleResolveTree.cpp	2013-08-08 07:16:51 UTC (rev 153815)
+++ trunk/Source/WebCore/style/StyleResolveTree.cpp	2013-08-08 07:18:36 UTC (rev 153816)
@@ -31,6 +31,7 @@
 #include "NodeRenderStyle.h"
 #include "NodeTraversal.h"
 #include "RenderObject.h"
+#include "RenderText.h"
 #include "Settings.h"
 #include "ShadowRoot.h"
 #include "StyleResolver.h"
@@ -176,6 +177,43 @@
     return localChange;
 }
 
+static void updateTextStyle(Text* text, RenderStyle* parentElementStyle, Style::Change change)
+{
+    RenderText* renderer = toRenderText(text->renderer());
+
+    if (change != Style::NoChange && renderer)
+        renderer->setStyle(parentElementStyle);
+
+    if (!text->needsStyleRecalc())
+        return;
+    if (renderer)
+        renderer->setText(text->dataImpl());
+    else
+        text->reattach();
+    text->clearNeedsStyleRecalc();
+}
+
+static void resolveShadowTree(ShadowRoot* shadowRoot, RenderStyle* parentElementStyle, Style::Change change)
+{
+    if (!shadowRoot)
+        return;
+    StyleResolver* styleResolver = shadowRoot->document()->ensureStyleResolver();
+    styleResolver->pushParentShadowRoot(shadowRoot);
+
+    for (Node* child = shadowRoot->firstChild(); child; child = child->nextSibling()) {
+        if (child->isTextNode()) {
+            // Current user agent ShadowRoots don't have immediate text children so this branch is never actually taken.
+            updateTextStyle(toText(child), parentElementStyle, change);
+            continue;
+        }
+        resolveTree(toElement(child), change);
+    }
+
+    styleResolver->popParentShadowRoot(shadowRoot);
+    shadowRoot->clearNeedsStyleRecalc();
+    shadowRoot->clearChildNeedsStyleRecalc();
+}
+
 void resolveTree(Element* current, Change change)
 {
     ASSERT(change != Detach);
@@ -198,10 +236,12 @@
     if (change != Detach) {
         StyleResolverParentPusher parentPusher(current);
 
+        RenderStyle* currentStyle = current->renderStyle();
+
         if (ElementShadow* shadow = current->shadow()) {
             if (change >= Inherit || shadow->childNeedsStyleRecalc() || shadow->needsStyleRecalc()) {
                 parentPusher.push();
-                shadow->recalcStyle(change);
+                resolveShadowTree(shadow->shadowRoot(), currentStyle, change);
             }
         }
 
@@ -214,7 +254,7 @@
         bool forceCheckOfAnyElementSibling = false;
         for (Node* child = current->firstChild(); child; child = child->nextSibling()) {
             if (child->isTextNode()) {
-                toText(child)->recalcTextStyle(change);
+                updateTextStyle(toText(child), currentStyle, change);
                 continue;
             }
             if (!child->isElementNode())
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to