Title: [232173] trunk/Source/WebCore
Revision
232173
Author
[email protected]
Date
2018-05-24 17:09:40 -0700 (Thu, 24 May 2018)

Log Message

Avoid constructing the string "all" repeatedly in MediaQueryParser
https://bugs.webkit.org/show_bug.cgi?id=185961

Reviewed by Simon Fraser.

Avoid constructing the string "all" repeatedly in MediaQueryParser by:
- Having MediaQueryData use an std::optional<String> instead of a String
- Updating MediaQueryParser to use a static to store the default media type
  and use it when the MediaQueryData's media type is std::nullopt.

Also do some cleanup.

* css/parser/MediaQueryParser.cpp:
(WebCore::MediaQueryParser::commitMediaQuery):
(WebCore::MediaQueryParser::MediaQueryData::MediaQueryData):
(WebCore::MediaQueryParser::MediaQueryData::clear):
(WebCore::MediaQueryParser::MediaQueryData::addExpression):
(WebCore::MediaQueryParser::MediaQueryData::lastExpressionValid):
(WebCore::MediaQueryParser::MediaQueryData::removeLastExpression):
* css/parser/MediaQueryParser.h:
(WebCore::MediaQueryParser::MediaQueryData::setMediaType):
(WebCore::MediaQueryParser::MediaQueryData::restrictor const):
(WebCore::MediaQueryParser::MediaQueryData::expressions):
(WebCore::MediaQueryParser::MediaQueryData::mediaType const):
(WebCore::MediaQueryParser::MediaQueryData::currentMediaQueryChanged const):
(WebCore::MediaQueryParser::MediaQueryData::restrictor):
(WebCore::MediaQueryParser::MediaQueryData::setRestrictor):
(WebCore::MediaQueryParser::MediaQueryData::setMediaFeature):
(WebCore::MediaQueryParser::MediaQueryData::setMediaQueryParserContext):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (232172 => 232173)


--- trunk/Source/WebCore/ChangeLog	2018-05-24 23:44:45 UTC (rev 232172)
+++ trunk/Source/WebCore/ChangeLog	2018-05-25 00:09:40 UTC (rev 232173)
@@ -1,3 +1,35 @@
+2018-05-24  Chris Dumez  <[email protected]>
+
+        Avoid constructing the string "all" repeatedly in MediaQueryParser
+        https://bugs.webkit.org/show_bug.cgi?id=185961
+
+        Reviewed by Simon Fraser.
+
+        Avoid constructing the string "all" repeatedly in MediaQueryParser by:
+        - Having MediaQueryData use an std::optional<String> instead of a String
+        - Updating MediaQueryParser to use a static to store the default media type
+          and use it when the MediaQueryData's media type is std::nullopt.
+
+        Also do some cleanup.
+
+        * css/parser/MediaQueryParser.cpp:
+        (WebCore::MediaQueryParser::commitMediaQuery):
+        (WebCore::MediaQueryParser::MediaQueryData::MediaQueryData):
+        (WebCore::MediaQueryParser::MediaQueryData::clear):
+        (WebCore::MediaQueryParser::MediaQueryData::addExpression):
+        (WebCore::MediaQueryParser::MediaQueryData::lastExpressionValid):
+        (WebCore::MediaQueryParser::MediaQueryData::removeLastExpression):
+        * css/parser/MediaQueryParser.h:
+        (WebCore::MediaQueryParser::MediaQueryData::setMediaType):
+        (WebCore::MediaQueryParser::MediaQueryData::restrictor const):
+        (WebCore::MediaQueryParser::MediaQueryData::expressions):
+        (WebCore::MediaQueryParser::MediaQueryData::mediaType const):
+        (WebCore::MediaQueryParser::MediaQueryData::currentMediaQueryChanged const):
+        (WebCore::MediaQueryParser::MediaQueryData::restrictor):
+        (WebCore::MediaQueryParser::MediaQueryData::setRestrictor):
+        (WebCore::MediaQueryParser::MediaQueryData::setMediaFeature):
+        (WebCore::MediaQueryParser::MediaQueryData::setMediaQueryParserContext):
+
 2018-05-24  Joseph Pecoraro  <[email protected]>
 
         [iOS] Hard link AppSupport instead of soft linking

Modified: trunk/Source/WebCore/css/parser/MediaQueryParser.cpp (232172 => 232173)


--- trunk/Source/WebCore/css/parser/MediaQueryParser.cpp	2018-05-24 23:44:45 UTC (rev 232172)
+++ trunk/Source/WebCore/css/parser/MediaQueryParser.cpp	2018-05-25 00:09:40 UTC (rev 232173)
@@ -140,7 +140,8 @@
 {
     // FIXME-NEWPARSER: Convoluted and awful, but we can't change the MediaQuerySet yet because of the
     // old parser.
-    MediaQuery mediaQuery = MediaQuery(m_mediaQueryData.restrictor(), m_mediaQueryData.mediaType(), WTFMove(m_mediaQueryData.expressions()));
+    static const NeverDestroyed<String> defaultMediaType = ASCIILiteral { "all" };
+    MediaQuery mediaQuery { m_mediaQueryData.restrictor(), m_mediaQueryData.mediaType().value_or(defaultMediaType), WTFMove(m_mediaQueryData.expressions()) };
     m_mediaQueryData.clear();
     m_querySet->addMediaQuery(WTFMove(mediaQuery));
 }
@@ -274,43 +275,32 @@
     return m_querySet;
 }
 
-MediaQueryData::MediaQueryData(MediaQueryParserContext context)
-    : m_restrictor(MediaQuery::None)
-    , m_mediaType("all")
-    , m_mediaTypeSet(false)
-    , m_context(context)
+MediaQueryParser::MediaQueryData::MediaQueryData(MediaQueryParserContext context)
+    : m_context(context)
 {
 }
 
-void MediaQueryData::clear()
+void MediaQueryParser::MediaQueryData::clear()
 {
     m_restrictor = MediaQuery::None;
-    m_mediaType = "all";
-    m_mediaTypeSet = false;
+    m_mediaType = std::nullopt;
     m_mediaFeature = String();
     m_expressions.clear();
 }
 
-void MediaQueryData::addExpression(CSSParserTokenRange& range)
+void MediaQueryParser::MediaQueryData::addExpression(CSSParserTokenRange& range)
 {
-    MediaQueryExpression _expression_ = MediaQueryExpression(m_mediaFeature, range, m_context);
-    m_expressions.append(WTFMove(_expression_));
+    m_expressions.append(MediaQueryExpression { m_mediaFeature, range, m_context });
 }
 
-bool MediaQueryData::lastExpressionValid()
+bool MediaQueryParser::MediaQueryData::lastExpressionValid()
 {
     return m_expressions.last().isValid();
 }
 
-void MediaQueryData::removeLastExpression()
+void MediaQueryParser::MediaQueryData::removeLastExpression()
 {
     m_expressions.removeLast();
 }
 
-void MediaQueryData::setMediaType(const String& mediaType)
-{
-    m_mediaType = mediaType;
-    m_mediaTypeSet = true;
-}
-
 } // namespace WebCore

Modified: trunk/Source/WebCore/css/parser/MediaQueryParser.h (232172 => 232173)


--- trunk/Source/WebCore/css/parser/MediaQueryParser.h	2018-05-24 23:44:45 UTC (rev 232172)
+++ trunk/Source/WebCore/css/parser/MediaQueryParser.h	2018-05-25 00:09:40 UTC (rev 232173)
@@ -35,6 +35,7 @@
 #include "MediaQueryBlockWatcher.h"
 #include "MediaQueryExpression.h"
 #include "MediaQueryParserContext.h"
+#include <wtf/Optional.h>
 #include <wtf/text/WTFString.h>
 
 namespace WebCore {
@@ -42,41 +43,6 @@
 class MediaQuerySet;
 struct CSSParserContext;
 
-class MediaQueryData {
-    WTF_MAKE_NONCOPYABLE(MediaQueryData);
-public:
-    MediaQueryData(MediaQueryParserContext context);
-    void clear();
-    void addExpression(CSSParserTokenRange&);
-    bool lastExpressionValid();
-    void removeLastExpression();
-    void setMediaType(const String&);
-    
-    MediaQuery::Restrictor restrictor() const { return m_restrictor; };
-    Vector<MediaQueryExpression>& expressions() { return m_expressions; }
-    String mediaType() const { return m_mediaType; }
-    
-    inline bool currentMediaQueryChanged() const
-    {
-        return (m_restrictor != MediaQuery::None || m_mediaTypeSet || m_expressions.size() > 0);
-    }
-    inline MediaQuery::Restrictor restrictor() { return m_restrictor; }
-
-    inline void setRestrictor(MediaQuery::Restrictor restrictor) { m_restrictor = restrictor; }
-
-    inline void setMediaFeature(const String& str) { m_mediaFeature = str; }
-    
-    inline void setMediaQueryParserContext(MediaQueryParserContext context) { m_context = context; }
-
-private:
-    MediaQuery::Restrictor m_restrictor;
-    String m_mediaType;
-    Vector<MediaQueryExpression> m_expressions;
-    String m_mediaFeature;
-    bool m_mediaTypeSet;
-    MediaQueryParserContext m_context;
-};
-
 class MediaQueryParser {
     WTF_MAKE_NONCOPYABLE(MediaQueryParser);
 public:
@@ -117,6 +83,40 @@
     
     void commitMediaQuery();
 
+    class MediaQueryData {
+        WTF_MAKE_NONCOPYABLE(MediaQueryData);
+    public:
+        explicit MediaQueryData(MediaQueryParserContext);
+        void clear();
+        void addExpression(CSSParserTokenRange&);
+        bool lastExpressionValid();
+        void removeLastExpression();
+        void setMediaType(const String& mediaType) { m_mediaType = mediaType; }
+
+        MediaQuery::Restrictor restrictor() const { return m_restrictor; }
+        Vector<MediaQueryExpression>& expressions() { return m_expressions; }
+        const std::optional<String>& mediaType() const { return m_mediaType; }
+
+        bool currentMediaQueryChanged() const
+        {
+            return (m_restrictor != MediaQuery::None || m_mediaType || !m_expressions.isEmpty());
+        }
+        MediaQuery::Restrictor restrictor() { return m_restrictor; }
+
+        void setRestrictor(MediaQuery::Restrictor restrictor) { m_restrictor = restrictor; }
+
+        void setMediaFeature(const String& str) { m_mediaFeature = str; }
+
+        void setMediaQueryParserContext(MediaQueryParserContext context) { m_context = context; }
+
+    private:
+        MediaQuery::Restrictor m_restrictor { MediaQuery::None };
+        std::optional<String> m_mediaType;
+        Vector<MediaQueryExpression> m_expressions;
+        String m_mediaFeature;
+        MediaQueryParserContext m_context;
+    };
+
     State m_state;
     ParserType m_parserType;
     MediaQueryData m_mediaQueryData;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to