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,