Title: [159191] trunk/Source/WebCore
Revision
159191
Author
[email protected]
Date
2013-11-13 05:17:19 -0800 (Wed, 13 Nov 2013)

Log Message

Turn some not-so-rare ElementRareData bits into Node flags.
<https://webkit.org/b/124275>

The following 4 bits seem to be the most commonly set:

- childrenAffectedByHover()
- childrenAffectedByFirstChildRules()
- childrenAffectedByLastChildRules()
- childrenAffectedByDirectAdjacentRules()

Turning them into Node flags means we don't have to allocate full
ElementRareData object in many cases. I also took this opportunity
to make Node's flag twiddling functions available to subclasses.

1.38 MB progression on HTML5-8266 locally.

Reviewed by Antti Koivisto.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (159190 => 159191)


--- trunk/Source/WebCore/ChangeLog	2013-11-13 12:42:45 UTC (rev 159190)
+++ trunk/Source/WebCore/ChangeLog	2013-11-13 13:17:19 UTC (rev 159191)
@@ -1,3 +1,23 @@
+2013-11-13  Andreas Kling  <[email protected]>
+
+        Turn some not-so-rare ElementRareData bits into Node flags.
+        <https://webkit.org/b/124275>
+
+        The following 4 bits seem to be the most commonly set:
+
+        - childrenAffectedByHover()
+        - childrenAffectedByFirstChildRules()
+        - childrenAffectedByLastChildRules()
+        - childrenAffectedByDirectAdjacentRules()
+
+        Turning them into Node flags means we don't have to allocate full
+        ElementRareData object in many cases. I also took this opportunity
+        to make Node's flag twiddling functions available to subclasses.
+
+        1.38 MB progression on HTML5-8266 locally.
+
+        Reviewed by Antti Koivisto.
+
 2013-11-13  Tibor Meszaros  <[email protected]>
 
         Cleanup the build from unused parameters in WebCore

Modified: trunk/Source/WebCore/dom/Element.cpp (159190 => 159191)


--- trunk/Source/WebCore/dom/Element.cpp	2013-11-13 12:42:45 UTC (rev 159190)
+++ trunk/Source/WebCore/dom/Element.cpp	2013-11-13 13:17:19 UTC (rev 159191)
@@ -2168,12 +2168,6 @@
     ensureElementRareData().setStyleAffectedByEmpty(true);
 }
 
-void Element::setChildrenAffectedByHover(bool value)
-{
-    if (value || hasRareData())
-        ensureElementRareData().setChildrenAffectedByHover(value);
-}
-
 void Element::setChildrenAffectedByActive(bool value)
 {
     if (value || hasRareData())
@@ -2186,21 +2180,6 @@
         ensureElementRareData().setChildrenAffectedByDrag(value);
 }
 
-void Element::setChildrenAffectedByFirstChildRules()
-{
-    ensureElementRareData().setChildrenAffectedByFirstChildRules(true);
-}
-
-void Element::setChildrenAffectedByLastChildRules()
-{
-    ensureElementRareData().setChildrenAffectedByLastChildRules(true);
-}
-
-void Element::setChildrenAffectedByDirectAdjacentRules()
-{
-    ensureElementRareData().setChildrenAffectedByDirectAdjacentRules(true);
-}
-
 void Element::setChildrenAffectedByForwardPositionalRules()
 {
     ensureElementRareData().setChildrenAffectedByForwardPositionalRules(true);
@@ -2221,14 +2200,13 @@
 
 bool Element::hasFlagsSetDuringStylingOfChildren() const
 {
+    if (childrenAffectedByHover() || childrenAffectedByFirstChildRules() || childrenAffectedByLastChildRules() || childrenAffectedByDirectAdjacentRules())
+        return true;
+
     if (!hasRareData())
         return false;
-    return rareDataChildrenAffectedByHover()
-        || rareDataChildrenAffectedByActive()
+    return rareDataChildrenAffectedByActive()
         || rareDataChildrenAffectedByDrag()
-        || rareDataChildrenAffectedByFirstChildRules()
-        || rareDataChildrenAffectedByLastChildRules()
-        || rareDataChildrenAffectedByDirectAdjacentRules()
         || rareDataChildrenAffectedByForwardPositionalRules()
         || rareDataChildrenAffectedByBackwardPositionalRules();
 }
@@ -2239,12 +2217,6 @@
     return elementRareData()->styleAffectedByEmpty();
 }
 
-bool Element::rareDataChildrenAffectedByHover() const
-{
-    ASSERT(hasRareData());
-    return elementRareData()->childrenAffectedByHover();
-}
-
 bool Element::rareDataChildrenAffectedByActive() const
 {
     ASSERT(hasRareData());
@@ -2257,24 +2229,6 @@
     return elementRareData()->childrenAffectedByDrag();
 }
 
-bool Element::rareDataChildrenAffectedByFirstChildRules() const
-{
-    ASSERT(hasRareData());
-    return elementRareData()->childrenAffectedByFirstChildRules();
-}
-
-bool Element::rareDataChildrenAffectedByLastChildRules() const
-{
-    ASSERT(hasRareData());
-    return elementRareData()->childrenAffectedByLastChildRules();
-}
-
-bool Element::rareDataChildrenAffectedByDirectAdjacentRules() const
-{
-    ASSERT(hasRareData());
-    return elementRareData()->childrenAffectedByDirectAdjacentRules();
-}
-
 bool Element::rareDataChildrenAffectedByForwardPositionalRules() const
 {
     ASSERT(hasRareData());

Modified: trunk/Source/WebCore/dom/Element.h (159190 => 159191)


--- trunk/Source/WebCore/dom/Element.h	2013-11-13 12:42:45 UTC (rev 159190)
+++ trunk/Source/WebCore/dom/Element.h	2013-11-13 13:17:19 UTC (rev 159191)
@@ -342,13 +342,13 @@
 
     // Methods for indicating the style is affected by dynamic updates (e.g., children changing, our position changing in our sibling list, etc.)
     bool styleAffectedByEmpty() const { return hasRareData() && rareDataStyleAffectedByEmpty(); }
-    bool childrenAffectedByHover() const { return hasRareData() && rareDataChildrenAffectedByHover(); }
+    bool childrenAffectedByHover() const { return getFlag(ChildrenAffectedByHoverRulesFlag); }
     bool childrenAffectedByActive() const { return hasRareData() && rareDataChildrenAffectedByActive(); }
     bool childrenAffectedByDrag() const { return hasRareData() && rareDataChildrenAffectedByDrag(); }
     bool childrenAffectedByPositionalRules() const { return hasRareData() && (rareDataChildrenAffectedByForwardPositionalRules() || rareDataChildrenAffectedByBackwardPositionalRules()); }
-    bool childrenAffectedByFirstChildRules() const { return hasRareData() && rareDataChildrenAffectedByFirstChildRules(); }
-    bool childrenAffectedByLastChildRules() const { return hasRareData() && rareDataChildrenAffectedByLastChildRules(); }
-    bool childrenAffectedByDirectAdjacentRules() const { return hasRareData() && rareDataChildrenAffectedByDirectAdjacentRules(); }
+    bool childrenAffectedByFirstChildRules() const { return getFlag(ChildrenAffectedByFirstChildRulesFlag); }
+    bool childrenAffectedByLastChildRules() const { return getFlag(ChildrenAffectedByLastChildRulesFlag); }
+    bool childrenAffectedByDirectAdjacentRules() const { return getFlag(ChildrenAffectedByDirectAdjacentRulesFlag); }
     bool childrenAffectedByForwardPositionalRules() const { return hasRareData() && rareDataChildrenAffectedByForwardPositionalRules(); }
     bool childrenAffectedByBackwardPositionalRules() const { return hasRareData() && rareDataChildrenAffectedByBackwardPositionalRules(); }
     unsigned childIndex() const { return hasRareData() ? rareDataChildIndex() : 0; }
@@ -356,12 +356,12 @@
     bool hasFlagsSetDuringStylingOfChildren() const;
 
     void setStyleAffectedByEmpty();
-    void setChildrenAffectedByHover(bool);
+    void setChildrenAffectedByHover(bool flag) { setFlag(flag, ChildrenAffectedByHoverRulesFlag); }
     void setChildrenAffectedByActive(bool);
     void setChildrenAffectedByDrag(bool);
-    void setChildrenAffectedByFirstChildRules();
-    void setChildrenAffectedByLastChildRules();
-    void setChildrenAffectedByDirectAdjacentRules();
+    void setChildrenAffectedByFirstChildRules() { setFlag(ChildrenAffectedByFirstChildRulesFlag); }
+    void setChildrenAffectedByLastChildRules() { setFlag(ChildrenAffectedByLastChildRulesFlag); }
+    void setChildrenAffectedByDirectAdjacentRules() { setFlag(ChildrenAffectedByDirectAdjacentRulesFlag); }
     void setChildrenAffectedByForwardPositionalRules();
     void setChildrenAffectedByBackwardPositionalRules();
     void setChildIndex(unsigned);
@@ -653,9 +653,7 @@
     bool rareDataChildrenAffectedByHover() const;
     bool rareDataChildrenAffectedByActive() const;
     bool rareDataChildrenAffectedByDrag() const;
-    bool rareDataChildrenAffectedByFirstChildRules() const;
     bool rareDataChildrenAffectedByLastChildRules() const;
-    bool rareDataChildrenAffectedByDirectAdjacentRules() const;
     bool rareDataChildrenAffectedByForwardPositionalRules() const;
     bool rareDataChildrenAffectedByBackwardPositionalRules() const;
     unsigned rareDataChildIndex() const;

Modified: trunk/Source/WebCore/dom/ElementRareData.h (159190 => 159191)


--- trunk/Source/WebCore/dom/ElementRareData.h	2013-11-13 12:42:45 UTC (rev 159190)
+++ trunk/Source/WebCore/dom/ElementRareData.h	2013-11-13 13:17:19 UTC (rev 159191)
@@ -74,19 +74,13 @@
     void setContainsFullScreenElement(bool value) { m_containsFullScreenElement = value; }
 #endif
 
-    bool childrenAffectedByHover() const { return m_childrenAffectedByHover; }
-    void setChildrenAffectedByHover(bool value) { m_childrenAffectedByHover = value; }
     bool childrenAffectedByActive() const { return m_childrenAffectedByActive; }
     void setChildrenAffectedByActive(bool value) { m_childrenAffectedByActive = value; }
     bool childrenAffectedByDrag() const { return m_childrenAffectedByDrag; }
     void setChildrenAffectedByDrag(bool value) { m_childrenAffectedByDrag = value; }
 
-    bool childrenAffectedByFirstChildRules() const { return m_childrenAffectedByFirstChildRules; }
-    void setChildrenAffectedByFirstChildRules(bool value) { m_childrenAffectedByFirstChildRules = value; }
     bool childrenAffectedByLastChildRules() const { return m_childrenAffectedByLastChildRules; }
     void setChildrenAffectedByLastChildRules(bool value) { m_childrenAffectedByLastChildRules = value; }
-    bool childrenAffectedByDirectAdjacentRules() const { return m_childrenAffectedByDirectAdjacentRules; }
-    void setChildrenAffectedByDirectAdjacentRules(bool value) { m_childrenAffectedByDirectAdjacentRules = value; }
     bool childrenAffectedByForwardPositionalRules() const { return m_childrenAffectedByForwardPositionalRules; }
     void setChildrenAffectedByForwardPositionalRules(bool value) { m_childrenAffectedByForwardPositionalRules = value; }
     bool childrenAffectedByBackwardPositionalRules() const { return m_childrenAffectedByBackwardPositionalRules; }
@@ -146,9 +140,7 @@
     // Bits for dynamic child matching.
     // We optimize for :first-child and :last-child. The other positional child selectors like nth-child or
     // *-child-of-type, we will just give up and re-evaluate whenever children change at all.
-    unsigned m_childrenAffectedByFirstChildRules : 1;
     unsigned m_childrenAffectedByLastChildRules : 1;
-    unsigned m_childrenAffectedByDirectAdjacentRules : 1;
     unsigned m_childrenAffectedByForwardPositionalRules : 1;
     unsigned m_childrenAffectedByBackwardPositionalRules : 1;
 
@@ -193,9 +185,7 @@
     , m_childrenAffectedByHover(false)
     , m_childrenAffectedByActive(false)
     , m_childrenAffectedByDrag(false)
-    , m_childrenAffectedByFirstChildRules(false)
     , m_childrenAffectedByLastChildRules(false)
-    , m_childrenAffectedByDirectAdjacentRules(false)
     , m_childrenAffectedByForwardPositionalRules(false)
     , m_childrenAffectedByBackwardPositionalRules(false)
     , m_isInsideRegion(false)
@@ -232,12 +222,9 @@
 
 inline void ElementRareData::resetDynamicRestyleObservations()
 {
-    setChildrenAffectedByHover(false);
     setChildrenAffectedByActive(false);
     setChildrenAffectedByDrag(false);
-    setChildrenAffectedByFirstChildRules(false);
     setChildrenAffectedByLastChildRules(false);
-    setChildrenAffectedByDirectAdjacentRules(false);
     setChildrenAffectedByForwardPositionalRules(false);
     setChildrenAffectedByBackwardPositionalRules(false);
 }

Modified: trunk/Source/WebCore/dom/Node.h (159190 => 159191)


--- trunk/Source/WebCore/dom/Node.h	2013-11-13 12:42:45 UTC (rev 159190)
+++ trunk/Source/WebCore/dom/Node.h	2013-11-13 13:17:19 UTC (rev 159191)
@@ -561,7 +561,7 @@
 
     void markAncestorsWithChildNeedsStyleRecalc();
 
-private:
+protected:
     enum NodeFlags {
         IsTextFlag = 1,
         IsContainerFlag = 1 << 1,
@@ -592,18 +592,20 @@
         IsInShadowTreeFlag = 1 << 23,
         IsMathMLFlag = 1 << 24,
 
+        ChildrenAffectedByFirstChildRulesFlag = 1 << 25,
+        ChildrenAffectedByLastChildRulesFlag = 1 << 26,
+        ChildrenAffectedByDirectAdjacentRulesFlag = 1 << 27,
+        ChildrenAffectedByHoverRulesFlag = 1 << 28,
+
         DefaultNodeFlags = IsParsingChildrenFinishedFlag
     };
 
-    // 8 bits remaining
-
     bool getFlag(NodeFlags mask) const { return m_nodeFlags & mask; }
     void setFlag(bool f, NodeFlags mask) const { m_nodeFlags = (m_nodeFlags & ~mask) | (-(int32_t)f & mask); } 
     void setFlag(NodeFlags mask) const { m_nodeFlags |= mask; } 
-    void clearFlag(NodeFlags mask) const { m_nodeFlags &= ~mask; } 
+    void clearFlag(NodeFlags mask) const { m_nodeFlags &= ~mask; }
 
-protected:
-    enum ConstructionType { 
+    enum ConstructionType {
         CreateOther = DefaultNodeFlags,
         CreateText = DefaultNodeFlags | IsTextFlag,
         CreateContainer = DefaultNodeFlags | IsContainerFlag, 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to