Shrink some style-related classes and enums
authorsimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 15 Jul 2018 00:29:28 +0000 (00:29 +0000)
committersimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 15 Jul 2018 00:29:28 +0000 (00:29 +0000)
https://bugs.webkit.org/show_bug.cgi?id=187680

Reviewed by Antti Koivisto.

Make all the enum classes in RenderStyleConstants be one byte big (all have less
than 256 values).

Shrink DocumentRuleSet from 384 to 368 bytes by re-ordering, which also helps shrink
StyleResolver from 1024 to 952 bytes.

Shrink BorderValue by re-ordering (now that the layout of Color has changed) which
shrinks BorderData from 168 to 136 bytes.

Convert a couple of other enums to enum class so that they can have explicit size.

* css/DocumentRuleSets.h:
* css/MediaQueryMatcher.cpp:
(WebCore::MediaQueryMatcher::documentElementUserAgentStyle const):
* css/StyleMedia.cpp:
(WebCore::StyleMedia::matchMedium const):
* css/StyleResolver.cpp:
(WebCore::StyleResolver::StyleResolver):
(WebCore::StyleResolver::State::State):
(WebCore::StyleResolver::styleForElement):
(WebCore::StyleResolver::cascadedPropertiesForRollback):
(WebCore::StyleResolver::applyProperty):
(WebCore::cascadeLevelForIndex):
* css/StyleResolver.h:
* rendering/style/BorderValue.h:
* rendering/style/RenderStyle.cpp:
* rendering/style/RenderStyleConstants.h:
* style/StyleTreeResolver.cpp:
(WebCore::Style::TreeResolver::styleForElement):
* svg/SVGElementRareData.h:
(WebCore::SVGElementRareData::overrideComputedStyle):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@233838 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/css/DocumentRuleSets.h
Source/WebCore/css/MediaQueryMatcher.cpp
Source/WebCore/css/StyleMedia.cpp
Source/WebCore/css/StyleResolver.cpp
Source/WebCore/css/StyleResolver.h
Source/WebCore/rendering/style/BorderValue.h
Source/WebCore/rendering/style/RenderStyle.cpp
Source/WebCore/rendering/style/RenderStyleConstants.h
Source/WebCore/style/StyleTreeResolver.cpp
Source/WebCore/svg/SVGElementRareData.h

index 79a2cde..9b83756 100644 (file)
@@ -1,3 +1,42 @@
+2018-07-14  Simon Fraser  <simon.fraser@apple.com>
+
+        Shrink some style-related classes and enums
+        https://bugs.webkit.org/show_bug.cgi?id=187680
+
+        Reviewed by Antti Koivisto.
+        
+        Make all the enum classes in RenderStyleConstants be one byte big (all have less
+        than 256 values).
+        
+        Shrink DocumentRuleSet from 384 to 368 bytes by re-ordering, which also helps shrink
+        StyleResolver from 1024 to 952 bytes.
+        
+        Shrink BorderValue by re-ordering (now that the layout of Color has changed) which
+        shrinks BorderData from 168 to 136 bytes.
+        
+        Convert a couple of other enums to enum class so that they can have explicit size.
+
+        * css/DocumentRuleSets.h:
+        * css/MediaQueryMatcher.cpp:
+        (WebCore::MediaQueryMatcher::documentElementUserAgentStyle const):
+        * css/StyleMedia.cpp:
+        (WebCore::StyleMedia::matchMedium const):
+        * css/StyleResolver.cpp:
+        (WebCore::StyleResolver::StyleResolver):
+        (WebCore::StyleResolver::State::State):
+        (WebCore::StyleResolver::styleForElement):
+        (WebCore::StyleResolver::cascadedPropertiesForRollback):
+        (WebCore::StyleResolver::applyProperty):
+        (WebCore::cascadeLevelForIndex):
+        * css/StyleResolver.h:
+        * rendering/style/BorderValue.h:
+        * rendering/style/RenderStyle.cpp:
+        * rendering/style/RenderStyleConstants.h:
+        * style/StyleTreeResolver.cpp:
+        (WebCore::Style::TreeResolver::styleForElement):
+        * svg/SVGElementRareData.h:
+        (WebCore::SVGElementRareData::overrideComputedStyle):
+
 2018-07-14  Kocsen Chung  <kocsen_chung@apple.com>
 
         Ensure WebKit stack is ad-hoc signed
index b38e745..9414b8c 100644 (file)
@@ -81,22 +81,25 @@ private:
     void collectRulesFromUserStyleSheets(const Vector<RefPtr<CSSStyleSheet>>&, RuleSet& userStyle, const MediaQueryEvaluator&, StyleResolver&);
     void updateUserAgentMediaQueryStyleIfNeeded() const;
 
-    bool m_isForShadowScope { false };
-    bool m_isAuthorStyleDefined { false };
     std::unique_ptr<RuleSet> m_authorStyle;
     mutable std::unique_ptr<RuleSet> m_userAgentMediaQueryStyle;
     std::unique_ptr<RuleSet> m_userStyle;
-    bool m_usesSharedUserStyle { false };
 
     StyleResolver& m_styleResolver;
     mutable RuleFeatureSet m_features;
-    mutable unsigned m_defaultStyleVersionOnFeatureCollection { 0 };
-    mutable unsigned m_userAgentMediaQueryRuleCountOnUpdate { 0 };
     mutable std::unique_ptr<RuleSet> m_siblingRuleSet;
     mutable std::unique_ptr<RuleSet> m_uncommonAttributeRuleSet;
     mutable HashMap<AtomicString, std::unique_ptr<Vector<InvalidationRuleSet>>> m_classInvalidationRuleSets;
     mutable HashMap<AtomicString, std::unique_ptr<Vector<InvalidationRuleSet>>> m_attributeInvalidationRuleSets;
+
     mutable std::optional<bool> m_cachedHasComplexSelectorsForStyleAttribute;
+
+    mutable unsigned m_defaultStyleVersionOnFeatureCollection { 0 };
+    mutable unsigned m_userAgentMediaQueryRuleCountOnUpdate { 0 };
+
+    bool m_usesSharedUserStyle { false };
+    bool m_isForShadowScope { false };
+    bool m_isAuthorStyleDefined { false };
 };
 
 inline const RuleFeatureSet& DocumentRuleSets::features() const
index 78ea357..a60344c 100644 (file)
@@ -67,7 +67,7 @@ std::unique_ptr<RenderStyle> MediaQueryMatcher::documentElementUserAgentStyle()
     if (!documentElement)
         return nullptr;
 
-    return m_document->styleScope().resolver().styleForElement(*documentElement, m_document->renderStyle(), nullptr, MatchOnlyUserAgentRules).renderStyle;
+    return m_document->styleScope().resolver().styleForElement(*documentElement, m_document->renderStyle(), nullptr, RuleMatchingBehavior::MatchOnlyUserAgentRules).renderStyle;
 }
 
 bool MediaQueryMatcher::evaluate(const MediaQuerySet& media)
index ad647a0..be64d14 100644 (file)
@@ -64,7 +64,7 @@ bool StyleMedia::matchMedium(const String& query) const
     if (!documentElement)
         return false;
 
-    auto rootStyle = document->styleScope().resolver().styleForElement(*documentElement, document->renderStyle(), nullptr, MatchOnlyUserAgentRules).renderStyle;
+    auto rootStyle = document->styleScope().resolver().styleForElement(*documentElement, document->renderStyle(), nullptr, RuleMatchingBehavior::MatchOnlyUserAgentRules).renderStyle;
 
     auto media = MediaQuerySet::create(query, MediaQueryParserContext(*document));
 
index 4da5092..1ba6730 100644 (file)
@@ -193,14 +193,13 @@ void StyleResolver::MatchResult::addMatchedProperties(const StyleProperties& pro
 
 StyleResolver::StyleResolver(Document& document)
     : m_ruleSets(*this)
-    , m_matchedPropertiesCacheAdditionsSinceLastSweep(0)
     , m_matchedPropertiesCacheSweepTimer(*this, &StyleResolver::sweepMatchedPropertiesCache)
     , m_document(document)
-    , m_matchAuthorAndUserStyles(m_document.settings().authorAndUserStylesEnabled())
 #if ENABLE(CSS_DEVICE_ADAPTATION)
     , m_viewportStyleResolver(ViewportStyleResolver::create(&document))
 #endif
     , m_styleMap(this)
+    , m_matchAuthorAndUserStyles(m_document.settings().authorAndUserStylesEnabled())
 {
     Element* root = m_document.documentElement();
 
@@ -219,7 +218,7 @@ StyleResolver::StyleResolver(Document& document)
         m_mediaQueryEvaluator = MediaQueryEvaluator { "all" };
 
     if (root) {
-        m_rootDefaultStyle = styleForElement(*root, m_document.renderStyle(), nullptr, MatchOnlyUserAgentRules).renderStyle;
+        m_rootDefaultStyle = styleForElement(*root, m_document.renderStyle(), nullptr, RuleMatchingBehavior::MatchOnlyUserAgentRules).renderStyle;
         // Turn off assertion against font lookups during style resolver initialization. We may need root style font for media queries.
         m_document.fontSelector().incrementIsComputingRootStyleFont();
         m_rootDefaultStyle->fontCascade().update(&m_document.fontSelector());
@@ -300,8 +299,8 @@ void StyleResolver::sweepMatchedPropertiesCache()
 StyleResolver::State::State(const Element& element, const RenderStyle* parentStyle, const RenderStyle* documentElementStyle, const SelectorFilter* selectorFilter)
     : m_element(&element)
     , m_parentStyle(parentStyle)
-    , m_elementLinkState(element.document().visitedLinkState().determineLinkState(element))
     , m_selectorFilter(selectorFilter)
+    , m_elementLinkState(element.document().visitedLinkState().determineLinkState(element))
 {
     bool resetStyleInheritance = hasShadowRootParent(element) && downcast<ShadowRoot>(element.parentNode())->resetStyleInheritance();
     if (resetStyleInheritance)
@@ -379,10 +378,10 @@ ElementStyle StyleResolver::styleForElement(const Element& element, const Render
     ElementRuleCollector collector(element, m_ruleSets, m_state.selectorFilter());
     collector.setMedium(&m_mediaQueryEvaluator);
 
-    if (matchingBehavior == MatchOnlyUserAgentRules)
+    if (matchingBehavior == RuleMatchingBehavior::MatchOnlyUserAgentRules)
         collector.matchUARules();
     else
-        collector.matchAllRules(m_matchAuthorAndUserStyles, matchingBehavior != MatchAllRulesExcludingSMIL);
+        collector.matchAllRules(m_matchAuthorAndUserStyles, matchingBehavior != RuleMatchingBehavior::MatchAllRulesExcludingSMIL);
 
     if (collector.matchedPseudoElementIds())
         style.setHasPseudoStyles(collector.matchedPseudoElementIds());
@@ -1564,13 +1563,13 @@ bool StyleResolver::useSVGZoomRulesForLength()
 
 StyleResolver::CascadedProperties* StyleResolver::cascadedPropertiesForRollback(const MatchResult& matchResult)
 {
-    ASSERT(cascadeLevel() != UserAgentLevel);
+    ASSERT(cascadeLevel() != CascadeLevel::UserAgentLevel);
 
     TextDirection direction;
     WritingMode writingMode;
     extractDirectionAndWritingMode(*state().style(), matchResult, direction, writingMode);
 
-    if (cascadeLevel() == AuthorLevel) {
+    if (cascadeLevel() == CascadeLevel::AuthorLevel) {
         CascadedProperties* authorRollback = state().authorRollback();
         if (authorRollback)
             return authorRollback;
@@ -1587,7 +1586,7 @@ StyleResolver::CascadedProperties* StyleResolver::cascadedPropertiesForRollback(
         return state().authorRollback();
     }
 
-    if (cascadeLevel() == UserLevel) {
+    if (cascadeLevel() == CascadeLevel::UserLevel) {
         CascadedProperties* userRollback = state().userRollback();
         if (userRollback)
             return userRollback;
@@ -1644,7 +1643,7 @@ void StyleResolver::applyProperty(CSSPropertyID id, CSSValue* value, SelectorChe
     bool isRevert = valueToCheckForInheritInitial->isRevertValue() || customPropertyValueID == CSSValueRevert;
 
     if (isRevert) {
-        if (cascadeLevel() == UserAgentLevel || !matchResult)
+        if (cascadeLevel() == CascadeLevel::UserAgentLevel || !matchResult)
             isUnset = true;
         else {
             // Fetch the correct rollback object from the state, building it if necessary.
@@ -2124,10 +2123,10 @@ void StyleResolver::CascadedProperties::setDeferred(CSSPropertyID id, CSSValue&
 static CascadeLevel cascadeLevelForIndex(const StyleResolver::MatchResult& matchResult, int index)
 {
     if (index >= matchResult.ranges.firstUARule && index <= matchResult.ranges.lastUARule)
-        return UserAgentLevel;
+        return CascadeLevel::UserAgentLevel;
     if (index >= matchResult.ranges.firstUserRule && index <= matchResult.ranges.lastUserRule)
-        return UserLevel;
-    return AuthorLevel;
+        return CascadeLevel::UserLevel;
+    return CascadeLevel::AuthorLevel;
 }
 
 void StyleResolver::CascadedProperties::addMatch(const MatchResult& matchResult, unsigned index, bool isImportant, bool inheritedOnly)
index 0e83c0e..ecde64a 100644 (file)
@@ -86,13 +86,13 @@ struct ResourceLoaderOptions;
 // are interpreted according to the document root element style, and styled only
 // from the User Agent Stylesheet rules.
 
-enum RuleMatchingBehavior {
+enum class RuleMatchingBehavior: uint8_t {
     MatchAllRules,
     MatchAllRulesExcludingSMIL,
     MatchOnlyUserAgentRules,
 };
 
-enum CascadeLevel {
+enum class CascadeLevel: uint8_t {
     UserAgentLevel,
     AuthorLevel,
     UserLevel
@@ -129,7 +129,7 @@ public:
     StyleResolver(Document&);
     ~StyleResolver();
 
-    ElementStyle styleForElement(const Element&, const RenderStyle* parentStyle, const RenderStyle* parentBoxStyle = nullptr, RuleMatchingBehavior = MatchAllRules, const SelectorFilter* = nullptr);
+    ElementStyle styleForElement(const Element&, const RenderStyle* parentStyle, const RenderStyle* parentBoxStyle = nullptr, RuleMatchingBehavior = RuleMatchingBehavior::MatchAllRules, const SelectorFilter* = nullptr);
 
     void keyframeStylesForAnimation(const Element&, const RenderStyle*, KeyframeList&);
 
@@ -408,27 +408,27 @@ public:
         const RenderStyle* m_parentStyle { nullptr };
         std::unique_ptr<RenderStyle> m_ownedParentStyle;
         const RenderStyle* m_rootElementStyle { nullptr };
+        std::unique_ptr<CascadedProperties> m_authorRollback;
+        std::unique_ptr<CascadedProperties> m_userRollback;
 
-        InsideLink m_elementLinkState { InsideLink::NotInside };
-
-        bool m_applyPropertyToRegularStyle { true };
-        bool m_applyPropertyToVisitedLinkStyle { false };
-        bool m_fontDirty { false };
-        bool m_fontSizeHasViewportUnits { false };
-        bool m_hasUAAppearance { false };
+        const SelectorFilter* m_selectorFilter { nullptr };
 
         BorderData m_borderData;
         FillLayer m_backgroundData { FillLayerType::Background };
         Color m_backgroundColor;
 
         CSSToLengthConversionData m_cssToLengthConversionData;
-        
-        CascadeLevel m_cascadeLevel { UserAgentLevel };
+
         Style::ScopeOrdinal m_styleScopeOrdinal { Style::ScopeOrdinal::Element };
-        std::unique_ptr<CascadedProperties> m_authorRollback;
-        std::unique_ptr<CascadedProperties> m_userRollback;
 
-        const SelectorFilter* m_selectorFilter { nullptr };
+        InsideLink m_elementLinkState { InsideLink::NotInside };
+        CascadeLevel m_cascadeLevel { CascadeLevel::UserAgentLevel };
+
+        bool m_applyPropertyToRegularStyle { true };
+        bool m_applyPropertyToVisitedLinkStyle { false };
+        bool m_fontDirty { false };
+        bool m_fontSizeHasViewportUnits { false };
+        bool m_hasUAAppearance { false };
     };
 
     State& state() { return m_state; }
@@ -486,8 +486,6 @@ private:
     // the last reference to a style declaration are garbage collected.
     void sweepMatchedPropertiesCache();
 
-    unsigned m_matchedPropertiesCacheAdditionsSinceLastSweep;
-
     typedef HashMap<unsigned, MatchedPropertiesCacheItem> MatchedPropertiesCache;
     MatchedPropertiesCache m_matchedPropertiesCache;
 
@@ -498,8 +496,6 @@ private:
 
     Document& m_document;
 
-    bool m_matchAuthorAndUserStyles;
-
     RenderStyle* m_overrideDocumentElementStyle { nullptr };
 
     Vector<MediaQueryResult> m_viewportDependentMediaQueryResults;
@@ -514,6 +510,9 @@ private:
 
     State m_state;
 
+    unsigned m_matchedPropertiesCacheAdditionsSinceLastSweep { 0 };
+
+    bool m_matchAuthorAndUserStyles { true };
     // See if we still have crashes where StyleResolver gets deleted early.
     bool m_isDeleted { false };
 
index 6f7f821..bfe9a12 100644 (file)
@@ -76,9 +76,10 @@ public:
     float boxModelWidth() const;
 
 protected:
-    float m_width { 3 };
     Color m_color;
 
+    float m_width { 3 };
+
     unsigned m_style : 4; // BorderStyle
 
     // This is only used by OutlineValue but moved here to keep the bits packed.
index 779b0f4..ff43e3b 100644 (file)
@@ -58,8 +58,8 @@
 namespace WebCore {
 
 struct SameSizeAsBorderValue {
-    float m_width;
     Color m_color;
+    float m_width;
     int m_restBits;
 };
 
index c5e7a9c..53349c2 100644 (file)
@@ -34,7 +34,7 @@ class TextStream;
 namespace WebCore {
 
 static const size_t PrintColorAdjustBits = 1;
-enum class PrintColorAdjust {
+enum class PrintColorAdjust : uint8_t {
     Economy,
     Exact
 };
@@ -77,7 +77,7 @@ enum class StyleDifferenceContextSensitiveProperty {
 };
 
 // Static pseudo styles. Dynamic ones are produced on the fly.
-enum class PseudoId : unsigned char {
+enum class PseudoId : uint8_t {
     // The order must be None, public IDs, and then internal IDs.
     None,
 
@@ -169,24 +169,24 @@ private:
     unsigned m_data;
 };
 
-enum class ColumnFill {
+enum class ColumnFill : uint8_t {
     Balance,
     Auto
 };
 
-enum class ColumnSpan {
+enum class ColumnSpan : uint8_t {
     None = 0,
     All
 };
 
-enum class BorderCollapse {
+enum class BorderCollapse : uint8_t {
     Separate = 0,
     Collapse
 };
 
 // These have been defined in the order of their precedence for border-collapsing. Do
 // not change this order! This order also must match the order in CSSValueKeywords.in.
-enum class BorderStyle {
+enum class BorderStyle : uint8_t {
     None,
     Hidden,
     Inset,
@@ -199,7 +199,7 @@ enum class BorderStyle {
     Double
 };
 
-enum class BorderPrecedence {
+enum class BorderPrecedence : uint8_t {
     Off,
     Table,
     ColumnGroup,
@@ -209,12 +209,12 @@ enum class BorderPrecedence {
     Cell
 };
 
-enum class OutlineIsAuto {
+enum class OutlineIsAuto : uint8_t {
     Off = 0,
     On
 };
 
-enum class PositionType {
+enum class PositionType : uint8_t {
     Static = 0,
     Relative = 1,
     Absolute = 2,
@@ -223,13 +223,13 @@ enum class PositionType {
     Fixed = 6
 };
 
-enum class Float {
+enum class Float : uint8_t {
     No,
     Left,
     Right
 };
 
-enum class MarginCollapse {
+enum class MarginCollapse : uint8_t {
     Collapse,
     Separate,
     Discard
@@ -237,21 +237,21 @@ enum class MarginCollapse {
 
 // Box decoration attributes. Not inherited.
 
-enum class BoxDecorationBreak {
+enum class BoxDecorationBreak : uint8_t {
     Slice,
     Clone
 };
 
 // Box attributes. Not inherited.
 
-enum class BoxSizing {
+enum class BoxSizing : uint8_t {
     ContentBox,
     BorderBox
 };
 
 // Random visual rendering model attributes. Not inherited.
 
-enum class Overflow {
+enum class Overflow : uint8_t {
     Visible,
     Hidden,
     Scroll,
@@ -261,7 +261,7 @@ enum class Overflow {
     PagedY
 };
 
-enum class VerticalAlign {
+enum class VerticalAlign : uint8_t {
     Baseline,
     Middle,
     Sub,
@@ -274,50 +274,50 @@ enum class VerticalAlign {
     Length
 };
 
-enum class Clear {
+enum class Clear : uint8_t {
     None = 0,
     Left = 1,
     Right = 2,
     Both = 3
 };
 
-enum class TableLayoutType {
+enum class TableLayoutType : uint8_t {
     Auto,
     Fixed
 };
 
-enum class TextCombine {
+enum class TextCombine : uint8_t {
     None,
     Horizontal
 };
 
-enum class FillAttachment {
+enum class FillAttachment : uint8_t {
     ScrollBackground,
     LocalBackground,
     FixedBackground
 };
 
-enum class FillBox {
+enum class FillBox : uint8_t {
     Border,
     Padding,
     Content,
     Text
 };
 
-enum class FillRepeat {
+enum class FillRepeat : uint8_t {
     Repeat,
     NoRepeat,
     Round,
     Space
 };
 
-enum class FillLayerType {
+enum class FillLayerType : uint8_t {
     Background,
     Mask
 };
 
 // CSS3 Background Values
-enum class FillSizeType {
+enum class FillSizeType : uint8_t {
     Contain,
     Cover,
     Size,
@@ -325,7 +325,7 @@ enum class FillSizeType {
 };
 
 // CSS3 <position>
-enum class Edge {
+enum class Edge : uint8_t {
     Top,
     Right,
     Bottom,
@@ -334,21 +334,21 @@ enum class Edge {
 
 // CSS3 Mask Source Types
 
-enum class MaskSourceType {
+enum class MaskSourceType : uint8_t {
     Alpha,
     Luminance
 };
 
 // CSS3 Marquee Properties
 
-enum class MarqueeBehavior {
+enum class MarqueeBehavior : uint8_t {
     None,
     Scroll,
     Slide,
     Alternate
 };
 
-enum class MarqueeDirection {
+enum class MarqueeDirection : uint8_t {
     Auto,
     Left,
     Right,
@@ -360,14 +360,14 @@ enum class MarqueeDirection {
 
 // Deprecated Flexible Box Properties
 
-enum class BoxPack {
+enum class BoxPack : uint8_t {
     Start,
     Center,
     End,
     Justify
 };
 
-enum class BoxAlignment {
+enum class BoxAlignment : uint8_t {
     Stretch,
     Start,
     Center,
@@ -375,24 +375,24 @@ enum class BoxAlignment {
     Baseline
 };
 
-enum class BoxOrient {
+enum class BoxOrient : uint8_t {
     Horizontal,
     Vertical
 };
 
-enum class BoxLines {
+enum class BoxLines : uint8_t {
     Single,
     Multiple
 };
 
-enum class BoxDirection {
+enum class BoxDirection : uint8_t {
     Normal,
     Reverse
 };
 
 // CSS3 Flexbox Properties
 
-enum class AlignContent {
+enum class AlignContent : uint8_t {
     FlexStart,
     FlexEnd,
     Center,
@@ -401,20 +401,20 @@ enum class AlignContent {
     Stretch
 };
 
-enum class FlexDirection {
+enum class FlexDirection : uint8_t {
     Row,
     RowReverse,
     Column,
     ColumnReverse
 };
 
-enum class FlexWrap {
+enum class FlexWrap : uint8_t {
     NoWrap,
     Wrap,
     Reverse
 };
 
-enum class ItemPosition {
+enum class ItemPosition : uint8_t {
     Legacy,
     Auto,
     Normal,
@@ -432,18 +432,18 @@ enum class ItemPosition {
     Right
 };
 
-enum class OverflowAlignment {
+enum class OverflowAlignment : uint8_t {
     Default,
     Unsafe,
     Safe
 };
 
-enum class ItemPositionType {
+enum class ItemPositionType : uint8_t {
     NonLegacy,
     Legacy
 };
 
-enum class ContentPosition {
+enum class ContentPosition : uint8_t {
     Normal,
     Baseline,
     LastBaseline,
@@ -456,7 +456,7 @@ enum class ContentPosition {
     Right
 };
 
-enum class ContentDistribution {
+enum class ContentDistribution : uint8_t {
     Default,
     SpaceBetween,
     SpaceAround,
@@ -465,7 +465,7 @@ enum class ContentDistribution {
 };
 
 
-enum class TextSecurity {
+enum class TextSecurity : uint8_t {
     None,
     Disc,
     Circle,
@@ -474,7 +474,7 @@ enum class TextSecurity {
 
 // CSS3 User Modify Properties
 
-enum class UserModify {
+enum class UserModify : uint8_t {
     ReadOnly,
     ReadWrite,
     ReadWritePlaintextOnly
@@ -482,7 +482,7 @@ enum class UserModify {
 
 // CSS3 User Drag Values
 
-enum class UserDrag {
+enum class UserDrag : uint8_t {
     Auto,
     None,
     Element
@@ -490,14 +490,14 @@ enum class UserDrag {
 
 // CSS3 User Select Values
 
-enum class UserSelect {
+enum class UserSelect : uint8_t {
     None,
     Text,
     All
 };
 
 // CSS3 Image Values
-enum class ObjectFit {
+enum class ObjectFit : uint8_t {
     Fill,
     Contain,
     Cover,
@@ -505,31 +505,31 @@ enum class ObjectFit {
     ScaleDown
 };
 
-enum class AspectRatioType {
+enum class AspectRatioType : uint8_t {
     Auto,
     FromIntrinsic,
     FromDimensions,
     Specified
 };
 
-enum class WordBreak {
+enum class WordBreak : uint8_t {
     Normal,
     BreakAll,
     KeepAll,
     Break
 };
 
-enum class OverflowWrap {
+enum class OverflowWrap : uint8_t {
     Normal,
     Break
 };
 
-enum class NBSPMode {
+enum class NBSPMode : uint8_t {
     Normal,
     Space
 };
 
-enum class LineBreak {
+enum class LineBreak : uint8_t {
     Auto,
     Loose,
     Normal,
@@ -537,7 +537,7 @@ enum class LineBreak {
     AfterWhiteSpace
 };
 
-enum class Resize {
+enum class Resize : uint8_t {
     None,
     Both,
     Horizontal,
@@ -545,7 +545,7 @@ enum class Resize {
 };
 
 // The order of this enum must match the order of the list style types in CSSValueKeywords.in.
-enum class ListStyleType {
+enum class ListStyleType : uint8_t {
     Disc,
     Circle,
     Square,
@@ -629,31 +629,31 @@ enum class ListStyleType {
     None
 };
 
-enum class QuoteType {
+enum class QuoteType : uint8_t {
     OpenQuote,
     CloseQuote,
     NoOpenQuote,
     NoCloseQuote
 };
 
-enum class BorderFit {
+enum class BorderFit : uint8_t {
     Border,
     Lines
 };
 
-enum class AnimationFillMode {
+enum class AnimationFillMode : uint8_t {
     None,
     Forwards,
     Backwards,
     Both
 };
 
-enum class AnimationPlayState {
+enum class AnimationPlayState : uint8_t {
     Playing = 0x0,
     Paused = 0x1
 };
 
-enum class WhiteSpace {
+enum class WhiteSpace : uint8_t {
     Normal,
     Pre,
     PreWrap,
@@ -663,7 +663,7 @@ enum class WhiteSpace {
 };
 
 // The order of this enum must match the order of the text align values in CSSValueKeywords.in.
-enum class TextAlignMode {
+enum class TextAlignMode : uint8_t {
     Left,
     Right,
     Center,
@@ -675,7 +675,7 @@ enum class TextAlignMode {
     End,
 };
 
-enum class TextTransform {
+enum class TextTransform : uint8_t {
     Capitalize,
     Uppercase,
     Lowercase,
@@ -687,7 +687,7 @@ static const size_t TextDecorationBits = 5;
 #else
 static const size_t TextDecorationBits = 4;
 #endif
-enum class TextDecoration {
+enum class TextDecoration : uint8_t {
     None          = 0,
     Underline     = 1 << 0,
     Overline      = 1 << 1,
@@ -698,7 +698,7 @@ enum class TextDecoration {
 #endif
 };
 
-enum class TextDecorationStyle {
+enum class TextDecorationStyle : uint8_t {
     Solid,
     Double,
     Dotted,
@@ -707,7 +707,7 @@ enum class TextDecorationStyle {
 };
 
 #if ENABLE(CSS3_TEXT)
-enum class TextAlignLast {
+enum class TextAlignLast : uint8_t {
     Auto,
     Start,
     End,
@@ -717,7 +717,7 @@ enum class TextAlignLast {
     Justify
 };
 
-enum class TextJustify {
+enum class TextJustify : uint8_t {
     Auto,
     None,
     InterWord,
@@ -725,7 +725,7 @@ enum class TextJustify {
 };
 #endif // CSS3_TEXT
 
-enum class TextDecorationSkip {
+enum class TextDecorationSkip : uint8_t {
     None      = 0,
     Ink       = 1 << 0,
     Objects   = 1 << 1,
@@ -733,19 +733,19 @@ enum class TextDecorationSkip {
 };
 
 // FIXME: There is no reason for the values in the enum to be powers of two.
-enum class TextUnderlinePosition {
+enum class TextUnderlinePosition : uint8_t {
     // FIXME: Implement support for 'under left' and 'under right' values.
     Auto       = 1 << 0,
     Alphabetic = 1 << 1,
     Under      = 1 << 2
 };
 
-enum class TextZoom {
+enum class TextZoom : uint8_t {
     Normal,
     Reset
 };
 
-enum class BreakBetween {
+enum class BreakBetween : uint8_t {
     Auto,
     Avoid,
     AvoidColumn,
@@ -759,14 +759,14 @@ enum class BreakBetween {
 };
 bool alwaysPageBreak(BreakBetween);
     
-enum class BreakInside {
+enum class BreakInside : uint8_t {
     Auto,
     Avoid,
     AvoidColumn,
     AvoidPage
 };
 
-enum class HangingPunctuation {
+enum class HangingPunctuation : uint8_t {
     None      = 0,
     First     = 1 << 0,
     Last      = 1 << 1,
@@ -774,24 +774,24 @@ enum class HangingPunctuation {
     ForceEnd  = 1 << 3
 };
 
-enum class EmptyCell {
+enum class EmptyCell : uint8_t {
     Show,
     Hide
 };
 
-enum class CaptionSide {
+enum class CaptionSide : uint8_t {
     Top,
     Bottom,
     Left,
     Right
 };
 
-enum class ListStylePosition {
+enum class ListStylePosition : uint8_t {
     Outside,
     Inside
 };
 
-enum class Visibility {
+enum class Visibility : uint8_t {
     Visible,
     Hidden,
     Collapse
@@ -799,7 +799,7 @@ enum class Visibility {
 
 WTF::TextStream& operator<<(WTF::TextStream&, Visibility);
 
-enum class CursorType {
+enum class CursorType : uint8_t {
     // The following must match the order in CSSValueKeywords.in.
     Auto,
     Default,
@@ -844,14 +844,14 @@ enum class CursorType {
 };
 
 #if ENABLE(CURSOR_VISIBILITY)
-enum class CursorVisibility {
+enum class CursorVisibility : uint8_t {
     Auto,
     AutoHide,
 };
 #endif
 
 // The order of this enum must match the order of the display values in CSSValueKeywords.in.
-enum class DisplayType {
+enum class DisplayType : uint8_t {
     Inline,
     Block,
     ListItem,
@@ -879,13 +879,13 @@ enum class DisplayType {
     None
 };
 
-enum class InsideLink {
+enum class InsideLink : uint8_t {
     NotInside,
     InsideUnvisited,
     InsideVisited
 };
     
-enum class PointerEvents {
+enum class PointerEvents : uint8_t {
     None,
     Auto,
     Stroke,
@@ -898,34 +898,34 @@ enum class PointerEvents {
     All
 };
 
-enum class TransformStyle3D {
+enum class TransformStyle3D : uint8_t {
     Flat,
     Preserve3D
 };
 
-enum class BackfaceVisibility {
+enum class BackfaceVisibility : uint8_t {
     Visible,
     Hidden
 };
 
-enum class TransformBox {
+enum class TransformBox : uint8_t {
     BorderBox,
     FillBox,
     ViewBox
 };
 
-enum class LineClamp {
+enum class LineClamp : uint8_t {
     LineCount,
     Percentage
 };
 
-enum class Hyphens {
+enum class Hyphens : uint8_t {
     None,
     Manual,
     Auto
 };
 
-enum class SpeakAs {
+enum class SpeakAs : uint8_t {
     Normal             = 0,
     SpellOut           = 1 << 0,
     Digits             = 1 << 1,
@@ -933,12 +933,12 @@ enum class SpeakAs {
     NoPunctuation      = 1 << 3
 };
 
-enum class TextEmphasisFill {
+enum class TextEmphasisFill : uint8_t {
     Filled,
     Open
 };
 
-enum class TextEmphasisMark {
+enum class TextEmphasisMark : uint8_t {
     None,
     Auto,
     Dot,
@@ -949,25 +949,25 @@ enum class TextEmphasisMark {
     Custom
 };
 
-enum class TextEmphasisPosition {
+enum class TextEmphasisPosition : uint8_t {
     Over  = 1 << 0,
     Under = 1 << 1,
     Left  = 1 << 2,
     Right = 1 << 3
 };
 
-enum class TextOrientation {
+enum class TextOrientation : uint8_t {
     Mixed,
     Upright,
     Sideways
 };
 
-enum class TextOverflow {
+enum class TextOverflow : uint8_t {
     Clip = 0,
     Ellipsis
 };
 
-enum class ImageRendering {
+enum class ImageRendering : uint8_t {
     Auto = 0,
     OptimizeSpeed,
     OptimizeQuality,
@@ -977,44 +977,44 @@ enum class ImageRendering {
 
 WTF::TextStream& operator<<(WTF::TextStream&, ImageRendering);
 
-enum class ImageResolutionSource {
+enum class ImageResolutionSource : uint8_t {
     Specified = 0,
     FromImage
 };
 
-enum class ImageResolutionSnap {
+enum class ImageResolutionSnap : uint8_t {
     None = 0,
     Pixels
 };
 
-enum class Order {
+enum class Order : uint8_t {
     Logical = 0,
     Visual
 };
 
-enum class ColumnAxis {
+enum class ColumnAxis : uint8_t {
     Horizontal,
     Vertical,
     Auto
 };
 
-enum class ColumnProgression {
+enum class ColumnProgression : uint8_t {
     Normal,
     Reverse
 };
 
-enum class LineSnap {
+enum class LineSnap : uint8_t {
     None,
     Baseline,
     Contain
 };
 
-enum class LineAlign {
+enum class LineAlign : uint8_t {
     None,
     Edges
 };
 
-enum class RubyPosition {
+enum class RubyPosition : uint8_t {
     Before,
     After,
     InterCharacter
@@ -1038,7 +1038,7 @@ enum GridAutoFlow {
     AutoFlowColumnDense = InternalAutoFlowAlgorithmDense | InternalAutoFlowDirectionColumn
 };
 
-enum class AutoRepeatType {
+enum class AutoRepeatType : uint8_t {
     None,
     Fill,
     Fit
@@ -1049,25 +1049,25 @@ static const float maximumAllowedFontSize = 1000000.0f;
 
 #if ENABLE(CSS3_TEXT)
 
-enum class TextIndentLine {
+enum class TextIndentLine : uint8_t {
     FirstLine,
     EachLine
 };
 
-enum class TextIndentType {
+enum class TextIndentType : uint8_t {
     Normal,
     Hanging
 };
 
 #endif
 
-enum class Isolation {
+enum class Isolation : uint8_t {
     Auto,
     Isolate
 };
 
 // Fill, Stroke, ViewBox are just used for SVG.
-enum class CSSBoxType {
+enum class CSSBoxType : uint8_t {
     BoxMissing = 0,
     MarginBox,
     BorderBox,
@@ -1079,20 +1079,20 @@ enum class CSSBoxType {
 };
 
 #if ENABLE(TOUCH_EVENTS)
-enum class TouchAction {
+enum class TouchAction : uint8_t {
     Auto,
     Manipulation
 };
 #endif
 
 #if ENABLE(CSS_SCROLL_SNAP)
-enum class ScrollSnapStrictness {
+enum class ScrollSnapStrictness : uint8_t {
     None,
     Proximity,
     Mandatory
 };
 
-enum class ScrollSnapAxis {
+enum class ScrollSnapAxis : uint8_t {
     XAxis,
     YAxis,
     Block,
@@ -1100,7 +1100,7 @@ enum class ScrollSnapAxis {
     Both
 };
 
-enum class ScrollSnapAxisAlignType {
+enum class ScrollSnapAxisAlignType : uint8_t {
     None,
     Start,
     Center,
@@ -1109,20 +1109,20 @@ enum class ScrollSnapAxisAlignType {
 #endif
 
 #if ENABLE(CSS_TRAILING_WORD)
-enum class TrailingWord {
+enum class TrailingWord : uint8_t {
     Auto,
     PartiallyBalanced
 };
 #endif
 
 #if ENABLE(APPLE_PAY)
-enum class ApplePayButtonStyle {
+enum class ApplePayButtonStyle : uint8_t {
     White,
     WhiteOutline,
     Black,
 };
 
-enum class ApplePayButtonType {
+enum class ApplePayButtonType : uint8_t {
     Plain,
     Buy,
     SetUp,
@@ -1138,7 +1138,7 @@ WTF::TextStream& operator<<(WTF::TextStream&, MaskSourceType);
 WTF::TextStream& operator<<(WTF::TextStream&, Edge);
 
 // These are all minimized combinations of paint-order.
-enum class PaintOrder {
+enum class PaintOrder : uint8_t {
     Normal,
     Fill,
     FillMarkers,
@@ -1148,7 +1148,7 @@ enum class PaintOrder {
     MarkersStroke
 };
 
-enum class PaintType {
+enum class PaintType : uint8_t {
     Fill,
     Stroke,
     Markers
index 5df5637..f4c5c7c 100644 (file)
@@ -128,7 +128,7 @@ std::unique_ptr<RenderStyle> TreeResolver::styleForElement(Element& element, con
     if (auto style = scope().sharingResolver.resolve(element, *m_update))
         return style;
 
-    auto elementStyle = scope().styleResolver.styleForElement(element, &inheritedStyle, parentBoxStyle(), MatchAllRules, &scope().selectorFilter);
+    auto elementStyle = scope().styleResolver.styleForElement(element, &inheritedStyle, parentBoxStyle(), RuleMatchingBehavior::MatchAllRules, &scope().selectorFilter);
 
     if (elementStyle.relations)
         commitRelations(WTFMove(elementStyle.relations), *m_update);
index 60dc538..e461cd2 100644 (file)
@@ -64,7 +64,7 @@ public:
             return nullptr;
         if (!m_overrideComputedStyle || m_needsOverrideComputedStyleUpdate) {
             // The style computed here contains no CSS Animations/Transitions or SMIL induced rules - this is needed to compute the "base value" for the SMIL animation sandwhich model.
-            m_overrideComputedStyle = element.styleResolver().styleForElement(element, parentStyle, nullptr, MatchAllRulesExcludingSMIL).renderStyle;
+            m_overrideComputedStyle = element.styleResolver().styleForElement(element, parentStyle, nullptr, RuleMatchingBehavior::MatchAllRulesExcludingSMIL).renderStyle;
             m_needsOverrideComputedStyleUpdate = false;
         }
         ASSERT(m_overrideComputedStyle);