Title: [258388] trunk/Source/WebCore
Revision
258388
Author
an...@apple.com
Date
2020-03-13 01:33:54 -0700 (Fri, 13 Mar 2020)

Log Message

Remove unused affectedBy style flags
https://bugs.webkit.org/show_bug.cgi?id=209009

Reviewed by Antoine Quint.

These flags are unused after r258321. Remove the flags and the code that generates them.

* css/SelectorChecker.cpp:
(WebCore::SelectorChecker::checkOne const):
* cssjit/SelectorCompiler.cpp:
(WebCore::SelectorCompiler::addStyleRelationFunction):
(WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsActive):
(WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsHovered):
(WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasFocusWithin):
* dom/Element.cpp:
(WebCore::Element::hasFlagsSetDuringStylingOfChildren const):
(WebCore::Element::resetStyleRelations):
* dom/Element.h:
(WebCore::Element::styleAffectedByEmpty const):
(WebCore::Element::descendantsAffectedByPreviousSibling const):
(WebCore::Element::setStyleAffectedByEmpty):
(WebCore::Element::setDescendantsAffectedByPreviousSibling):
(WebCore::Element::styleAffectedByActive const): Deleted.
(WebCore::Element::styleAffectedByFocusWithin const): Deleted.
(WebCore::Element::childrenAffectedByHover const): Deleted.
(WebCore::Element::setStyleAffectedByFocusWithin): Deleted.
(WebCore::Element::setChildrenAffectedByHover): Deleted.
(WebCore::Element::setStyleAffectedByActive): Deleted.
* dom/Node.h:
* rendering/style/RenderStyle.cpp:
(WebCore::RenderStyle::RenderStyle):
* rendering/style/RenderStyle.h:
(WebCore::RenderStyle::affectedByDrag const):
(WebCore::RenderStyle::NonInheritedFlags::operator== const):
(WebCore::RenderStyle::affectedByHover const): Deleted.
(WebCore::RenderStyle::affectedByActive const): Deleted.
(WebCore::RenderStyle::setAffectedByHover): Deleted.
(WebCore::RenderStyle::setAffectedByActive): Deleted.
* style/StyleRelations.cpp:
(WebCore::Style::commitRelationsToRenderStyle):
(WebCore::Style::commitRelations):
* style/StyleRelations.h:
* style/StyleSharingResolver.cpp:
(WebCore::Style::SharingResolver::canShareStyleWithElement const):

Compare the hasFocusWithin bit instead.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (258387 => 258388)


--- trunk/Source/WebCore/ChangeLog	2020-03-13 07:57:16 UTC (rev 258387)
+++ trunk/Source/WebCore/ChangeLog	2020-03-13 08:33:54 UTC (rev 258388)
@@ -1,3 +1,52 @@
+2020-03-13  Antti Koivisto  <an...@apple.com>
+
+        Remove unused affectedBy style flags
+        https://bugs.webkit.org/show_bug.cgi?id=209009
+
+        Reviewed by Antoine Quint.
+
+        These flags are unused after r258321. Remove the flags and the code that generates them.
+
+        * css/SelectorChecker.cpp:
+        (WebCore::SelectorChecker::checkOne const):
+        * cssjit/SelectorCompiler.cpp:
+        (WebCore::SelectorCompiler::addStyleRelationFunction):
+        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsActive):
+        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsHovered):
+        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasFocusWithin):
+        * dom/Element.cpp:
+        (WebCore::Element::hasFlagsSetDuringStylingOfChildren const):
+        (WebCore::Element::resetStyleRelations):
+        * dom/Element.h:
+        (WebCore::Element::styleAffectedByEmpty const):
+        (WebCore::Element::descendantsAffectedByPreviousSibling const):
+        (WebCore::Element::setStyleAffectedByEmpty):
+        (WebCore::Element::setDescendantsAffectedByPreviousSibling):
+        (WebCore::Element::styleAffectedByActive const): Deleted.
+        (WebCore::Element::styleAffectedByFocusWithin const): Deleted.
+        (WebCore::Element::childrenAffectedByHover const): Deleted.
+        (WebCore::Element::setStyleAffectedByFocusWithin): Deleted.
+        (WebCore::Element::setChildrenAffectedByHover): Deleted.
+        (WebCore::Element::setStyleAffectedByActive): Deleted.
+        * dom/Node.h:
+        * rendering/style/RenderStyle.cpp:
+        (WebCore::RenderStyle::RenderStyle):
+        * rendering/style/RenderStyle.h:
+        (WebCore::RenderStyle::affectedByDrag const):
+        (WebCore::RenderStyle::NonInheritedFlags::operator== const):
+        (WebCore::RenderStyle::affectedByHover const): Deleted.
+        (WebCore::RenderStyle::affectedByActive const): Deleted.
+        (WebCore::RenderStyle::setAffectedByHover): Deleted.
+        (WebCore::RenderStyle::setAffectedByActive): Deleted.
+        * style/StyleRelations.cpp:
+        (WebCore::Style::commitRelationsToRenderStyle):
+        (WebCore::Style::commitRelations):
+        * style/StyleRelations.h:
+        * style/StyleSharingResolver.cpp:
+        (WebCore::Style::SharingResolver::canShareStyleWithElement const):
+
+        Compare the hasFocusWithin bit instead.
+
 2020-03-12  Yusuke Suzuki  <ysuz...@apple.com>
 
         Report crashed cell in jsCast in debug builds

Modified: trunk/Source/WebCore/css/SelectorChecker.cpp (258387 => 258388)


--- trunk/Source/WebCore/css/SelectorChecker.cpp	2020-03-13 07:57:16 UTC (rev 258387)
+++ trunk/Source/WebCore/css/SelectorChecker.cpp	2020-03-13 08:33:54 UTC (rev 258388)
@@ -1007,12 +1007,9 @@
         case CSSSelector::PseudoClassFocus:
             return matchesFocusPseudoClass(element);
         case CSSSelector::PseudoClassFocusWithin:
-            addStyleRelation(checkingContext, element, Style::Relation::AffectedByFocusWithin);
             return element.hasFocusWithin();
         case CSSSelector::PseudoClassHover:
             if (m_strictParsing || element.isLink() || canMatchHoverOrActiveInQuirksMode(context)) {
-                addStyleRelation(checkingContext, element, Style::Relation::AffectedByHover);
-
                 // See the comment in generateElementIsHovered() in SelectorCompiler.
                 if (checkingContext.resolvingMode == SelectorChecker::Mode::CollectingRulesIgnoringVirtualPseudoElements && !context.isMatchElement)
                     return true;
@@ -1023,8 +1020,6 @@
             break;
         case CSSSelector::PseudoClassActive:
             if (m_strictParsing || element.isLink() || canMatchHoverOrActiveInQuirksMode(context)) {
-                addStyleRelation(checkingContext, element, Style::Relation::AffectedByActive);
-
                 if (element.active() || InspectorInstrumentation::forcePseudoState(element, CSSSelector::PseudoClassActive))
                     return true;
             }

Modified: trunk/Source/WebCore/cssjit/SelectorCompiler.cpp (258387 => 258388)


--- trunk/Source/WebCore/cssjit/SelectorCompiler.cpp	2020-03-13 07:57:16 UTC (rev 258387)
+++ trunk/Source/WebCore/cssjit/SelectorCompiler.cpp	2020-03-13 08:33:54 UTC (rev 258388)
@@ -2244,7 +2244,7 @@
 
 static void addStyleRelationFunction(SelectorChecker::CheckingContext* checkingContext, const Element* element)
 {
-    checkingContext->styleRelations.append({ *element, Style::Relation::AffectedByActive, 1 });
+    checkingContext->styleRelations.append({ *element, { }, 1 });
 }
 
 void SelectorCodeGenerator::generateAddStyleRelation(Assembler::RegisterID checkingContext, Assembler::RegisterID element, Style::Relation::Type relationType, Optional<Assembler::RegisterID> value)
@@ -3157,8 +3157,6 @@
 {
     generateSpecialFailureInQuirksModeForActiveAndHoverIfNeeded(failureCases, fragment);
 
-    generateAddStyleRelationIfResolvingStyle(elementAddressRegister, Style::Relation::AffectedByActive);
-
     FunctionCall functionCall(m_assembler, m_registerAllocator, m_stackAllocator, m_functionCalls);
     functionCall.setFunctionAddress(elementIsActive);
     functionCall.setOneArgument(elementAddressRegister);
@@ -3270,24 +3268,10 @@
 {
     generateSpecialFailureInQuirksModeForActiveAndHoverIfNeeded(failureCases, fragment);
 
-    generateAddStyleRelationIfResolvingStyle(elementAddressRegister, Style::Relation::AffectedByHover);
-
-    Assembler::JumpList successCases;
-    if (m_selectorContext != SelectorContext::QuerySelector && fragment.relationToRightFragment != FragmentRelation::Rightmost) {
-        // :hover always matches when not in rightmost position when collecting rules for descendant style invalidation optimization.
-        // Resolving style for a matching descendant will set parent childrenAffectedByHover bit even when the element is not currently hovered.
-        // This bit has to be set for the event based :hover invalidation to work.
-        // FIXME: We should just collect style relation bits and apply them as needed when computing style invalidation optimization.
-        LocalRegister checkingContext(m_registerAllocator);
-        successCases.append(branchOnResolvingMode(Assembler::Equal, SelectorChecker::Mode::CollectingRulesIgnoringVirtualPseudoElements, checkingContext));
-    }
-
     FunctionCall functionCall(m_assembler, m_registerAllocator, m_stackAllocator, m_functionCalls);
     functionCall.setFunctionAddress(elementIsHovered);
     functionCall.setOneArgument(elementAddressRegister);
     failureCases.append(functionCall.callAndBranchOnBooleanReturnValue(Assembler::Zero));
-
-    successCases.link(&m_assembler);
 }
 
 void SelectorCodeGenerator::generateElementIsInLanguage(Assembler::JumpList& failureCases, const SelectorFragment& fragment)
@@ -3895,7 +3879,6 @@
 
 void SelectorCodeGenerator::generateElementHasFocusWithin(Assembler::JumpList& failureCases)
 {
-    generateAddStyleRelationIfResolvingStyle(elementAddressRegister, Style::Relation::AffectedByFocusWithin);
     failureCases.append(m_assembler.branchTest32(Assembler::Zero, Assembler::Address(elementAddressRegister, Node::nodeFlagsMemoryOffset()), Assembler::TrustedImm32(Node::flagHasFocusWithin())));
 }
 

Modified: trunk/Source/WebCore/dom/Element.cpp (258387 => 258388)


--- trunk/Source/WebCore/dom/Element.cpp	2020-03-13 07:57:16 UTC (rev 258387)
+++ trunk/Source/WebCore/dom/Element.cpp	2020-03-13 08:33:54 UTC (rev 258388)
@@ -3401,9 +3401,7 @@
 
 bool Element::hasFlagsSetDuringStylingOfChildren() const
 {
-    return styleAffectedByActive()
-        || childrenAffectedByHover()
-        || childrenAffectedByFirstChildRules()
+    return childrenAffectedByFirstChildRules()
         || childrenAffectedByLastChildRules()
         || childrenAffectedByDrag()
         || childrenAffectedByForwardPositionalRules()
@@ -4125,7 +4123,6 @@
 void Element::resetStyleRelations()
 {
     // FIXME: Make this code more consistent.
-    clearFlag(StyleAffectedByFocusWithinFlag);
     clearStyleFlags();
     if (!hasRareData())
         return;

Modified: trunk/Source/WebCore/dom/Element.h (258387 => 258388)


--- trunk/Source/WebCore/dom/Element.h	2020-03-13 07:57:16 UTC (rev 258387)
+++ trunk/Source/WebCore/dom/Element.h	2020-03-13 08:33:54 UTC (rev 258388)
@@ -349,11 +349,8 @@
     bool isVisibleWithoutResolvingFullStyle() const;
 
     // Methods for indicating the style is affected by dynamic updates (e.g., children changing, our position changing in our sibling list, etc.)
-    bool styleAffectedByActive() const { return hasStyleFlag(ElementStyleFlag::StyleAffectedByActive); }
     bool styleAffectedByEmpty() const { return hasStyleFlag(ElementStyleFlag::StyleAffectedByEmpty); }
-    bool styleAffectedByFocusWithin() const { return getFlag(StyleAffectedByFocusWithinFlag); }
     bool descendantsAffectedByPreviousSibling() const { return getFlag(DescendantsAffectedByPreviousSiblingFlag); }
-    bool childrenAffectedByHover() const { return getFlag(ChildrenAffectedByHoverRulesFlag); }
     bool childrenAffectedByDrag() const { return hasStyleFlag(ElementStyleFlag::ChildrenAffectedByDrag); }
     bool childrenAffectedByFirstChildRules() const { return getFlag(ChildrenAffectedByFirstChildRulesFlag); }
     bool childrenAffectedByLastChildRules() const { return getFlag(ChildrenAffectedByLastChildRulesFlag); }
@@ -368,10 +365,7 @@
     bool hasFlagsSetDuringStylingOfChildren() const;
 
     void setStyleAffectedByEmpty() { setStyleFlag(ElementStyleFlag::StyleAffectedByEmpty); }
-    void setStyleAffectedByFocusWithin() { setFlag(StyleAffectedByFocusWithinFlag); }
     void setDescendantsAffectedByPreviousSibling() { setFlag(DescendantsAffectedByPreviousSiblingFlag); }
-    void setChildrenAffectedByHover() { setFlag(ChildrenAffectedByHoverRulesFlag); }
-    void setStyleAffectedByActive() { setStyleFlag(ElementStyleFlag::StyleAffectedByActive); }
     void setChildrenAffectedByDrag() { setStyleFlag(ElementStyleFlag::ChildrenAffectedByDrag); }
     void setChildrenAffectedByFirstChildRules() { setFlag(ChildrenAffectedByFirstChildRulesFlag); }
     void setChildrenAffectedByLastChildRules() { setFlag(ChildrenAffectedByLastChildRulesFlag); }

Modified: trunk/Source/WebCore/dom/Node.h (258387 => 258388)


--- trunk/Source/WebCore/dom/Node.h	2020-03-13 07:57:16 UTC (rev 258387)
+++ trunk/Source/WebCore/dom/Node.h	2020-03-13 08:33:54 UTC (rev 258388)
@@ -537,7 +537,7 @@
         IsShadowRootFlag = 1 << 7,
         IsConnectedFlag = 1 << 8,
         IsInShadowTreeFlag = 1 << 9,
-        StyleAffectedByFocusWithinFlag = 1 << 10,
+        // UnusedFlag = 1 << 10,
         HasEventTargetDataFlag = 1 << 11,
 
         // These bits are used by derived classes, pulled up here so they can
@@ -561,7 +561,7 @@
 
         ChildrenAffectedByFirstChildRulesFlag = 1 << 25,
         ChildrenAffectedByLastChildRulesFlag = 1 << 26,
-        ChildrenAffectedByHoverRulesFlag = 1 << 27,
+        // UnusedFlag = 1 << 27,
 
         AffectsNextSiblingElementStyle = 1 << 28,
         StyleIsAffectedByPreviousSibling = 1 << 29,
@@ -601,18 +601,17 @@
     static constexpr uint32_t s_refCountMask = ~static_cast<uint32_t>(1);
 
     enum class ElementStyleFlag : uint8_t {
-        StyleAffectedByActive = 1 << 0,
-        StyleAffectedByEmpty = 1 << 1,
-        ChildrenAffectedByDrag = 1 << 2,
+        StyleAffectedByEmpty = 1 << 0,
+        ChildrenAffectedByDrag = 1 << 1,
 
         // 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.
-        ChildrenAffectedByForwardPositionalRules = 1 << 3,
-        DescendantsAffectedByForwardPositionalRules = 1 << 4,
-        ChildrenAffectedByBackwardPositionalRules = 1 << 5,
-        DescendantsAffectedByBackwardPositionalRules = 1 << 6,
-        ChildrenAffectedByPropertyBasedBackwardPositionalRules = 1 << 7,
+        ChildrenAffectedByForwardPositionalRules = 1 << 2,
+        DescendantsAffectedByForwardPositionalRules = 1 << 3,
+        ChildrenAffectedByBackwardPositionalRules = 1 << 4,
+        DescendantsAffectedByBackwardPositionalRules = 1 << 5,
+        ChildrenAffectedByPropertyBasedBackwardPositionalRules = 1 << 6,
     };
 
     bool hasStyleFlag(ElementStyleFlag state) const { return m_rendererWithStyleFlags.type() & static_cast<uint8_t>(state); }

Modified: trunk/Source/WebCore/rendering/style/RenderStyle.cpp (258387 => 258388)


--- trunk/Source/WebCore/rendering/style/RenderStyle.cpp	2020-03-13 07:57:16 UTC (rev 258387)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.cpp	2020-03-13 08:33:54 UTC (rev 258388)
@@ -189,8 +189,6 @@
     m_nonInheritedFlags.emptyState = false;
     m_nonInheritedFlags.firstChildState = false;
     m_nonInheritedFlags.lastChildState = false;
-    m_nonInheritedFlags.affectedByHover = false;
-    m_nonInheritedFlags.affectedByActive = false;
     m_nonInheritedFlags.affectedByDrag = false;
     m_nonInheritedFlags.isLink = false;
     m_nonInheritedFlags.styleType = static_cast<unsigned>(PseudoId::None);

Modified: trunk/Source/WebCore/rendering/style/RenderStyle.h (258387 => 258388)


--- trunk/Source/WebCore/rendering/style/RenderStyle.h	2020-03-13 07:57:16 UTC (rev 258387)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.h	2020-03-13 08:33:54 UTC (rev 258388)
@@ -192,12 +192,7 @@
     void setHasViewportUnits(bool v = true) { m_nonInheritedFlags.hasViewportUnits = v; }
     bool hasViewportUnits() const { return m_nonInheritedFlags.hasViewportUnits; }
 
-    bool affectedByHover() const { return m_nonInheritedFlags.affectedByHover; }
-    bool affectedByActive() const { return m_nonInheritedFlags.affectedByActive; }
     bool affectedByDrag() const { return m_nonInheritedFlags.affectedByDrag; }
-
-    void setAffectedByHover() { m_nonInheritedFlags.affectedByHover = true; }
-    void setAffectedByActive() { m_nonInheritedFlags.affectedByActive = true; }
     void setAffectedByDrag() { m_nonInheritedFlags.affectedByDrag = true; }
 
     void setColumnStylesFromPaginationMode(const Pagination::Mode&);
@@ -1806,8 +1801,6 @@
         unsigned emptyState : 1;
         unsigned firstChildState : 1;
         unsigned lastChildState : 1;
-        unsigned affectedByHover : 1;
-        unsigned affectedByActive : 1;
         unsigned affectedByDrag : 1;
         unsigned isLink : 1;
 
@@ -1940,8 +1933,6 @@
         && emptyState == other.emptyState
         && firstChildState == other.firstChildState
         && lastChildState == other.lastChildState
-        && affectedByHover == other.affectedByHover
-        && affectedByActive == other.affectedByActive
         && affectedByDrag == other.affectedByDrag
         && isLink == other.isLink
         && styleType == other.styleType

Modified: trunk/Source/WebCore/style/StyleRelations.cpp (258387 => 258388)


--- trunk/Source/WebCore/style/StyleRelations.cpp	2020-03-13 07:57:16 UTC (rev 258387)
+++ trunk/Source/WebCore/style/StyleRelations.cpp	2020-03-13 08:33:54 UTC (rev 258388)
@@ -50,10 +50,6 @@
             continue;
         }
         switch (relation.type) {
-        case Relation::AffectedByActive:
-            style.setAffectedByActive();
-            appendStyleRelation(relation);
-            break;
         case Relation::AffectedByDrag:
             style.setAffectedByDrag();
             break;
@@ -61,9 +57,6 @@
             style.setEmptyState(relation.value);
             appendStyleRelation(relation);
             break;
-        case Relation::AffectedByHover:
-            style.setAffectedByHover();
-            break;
         case Relation::FirstChild:
             style.setFirstChildState();
             break;
@@ -73,7 +66,6 @@
         case Relation::Unique:
             style.setUnique();
             break;
-        case Relation::AffectedByFocusWithin:
         case Relation::AffectedByPreviousSibling:
         case Relation::DescendantsAffectedByPreviousSibling:
         case Relation::AffectsNextSibling:
@@ -99,9 +91,6 @@
     for (auto& relation : *relations) {
         auto& element = const_cast<Element&>(*relation.element);
         switch (relation.type) {
-        case Relation::AffectedByActive:
-            element.setStyleAffectedByActive();
-            break;
         case Relation::AffectedByDrag:
             element.setChildrenAffectedByDrag();
             break;
@@ -108,12 +97,6 @@
         case Relation::AffectedByEmpty:
             element.setStyleAffectedByEmpty();
             break;
-        case Relation::AffectedByFocusWithin:
-            element.setStyleAffectedByFocusWithin();
-            break;
-        case Relation::AffectedByHover:
-            element.setChildrenAffectedByHover();
-            break;
         case Relation::AffectedByPreviousSibling:
             element.setStyleIsAffectedByPreviousSibling();
             break;

Modified: trunk/Source/WebCore/style/StyleRelations.h (258387 => 258388)


--- trunk/Source/WebCore/style/StyleRelations.h	2020-03-13 07:57:16 UTC (rev 258387)
+++ trunk/Source/WebCore/style/StyleRelations.h	2020-03-13 08:33:54 UTC (rev 258388)
@@ -38,11 +38,8 @@
 
 struct Relation {
     enum Type {
-        AffectedByActive,
         AffectedByDrag,
         AffectedByEmpty,
-        AffectedByFocusWithin,
-        AffectedByHover,
         AffectedByPreviousSibling,
         DescendantsAffectedByPreviousSibling,
         // For AffectsNextSibling 'value' tells how many element siblings to mark starting with 'element'.

Modified: trunk/Source/WebCore/style/StyleSharingResolver.cpp (258387 => 258388)


--- trunk/Source/WebCore/style/StyleSharingResolver.cpp	2020-03-13 07:57:16 UTC (rev 258387)
+++ trunk/Source/WebCore/style/StyleSharingResolver.cpp	2020-03-13 08:33:54 UTC (rev 258388)
@@ -223,6 +223,8 @@
         return false;
     if (candidateElement.focused() != element.focused())
         return false;
+    if (candidateElement.hasFocusWithin() != element.hasFocusWithin())
+        return false;
     if (candidateElement.shadowPseudoId() != element.shadowPseudoId())
         return false;
     if (&candidateElement == m_document.cssTarget())
@@ -233,8 +235,6 @@
         return false;
     if (candidateElement.affectsNextSiblingElementStyle() || candidateElement.styleIsAffectedByPreviousSibling())
         return false;
-    if (candidateElement.styleAffectedByFocusWithin() || element.styleAffectedByFocusWithin())
-        return false;
 
     auto& candidateElementId = candidateElement.idForStyleResolution();
     if (!candidateElementId.isNull() && m_ruleSets.features().idsInRules.contains(candidateElementId))
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to