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