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))