Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(694)

Side by Side Diff: third_party/WebKit/Source/core/css/parser/CSSParserImpl.cpp

Issue 2282303002: [test] lazily parse css style rules
Patch Set: use string pool Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/css/parser/CSSParserImpl.h" 5 #include "core/css/parser/CSSParserImpl.h"
6 6
7 #include "core/css/CSSCustomIdentValue.h" 7 #include "core/css/CSSCustomIdentValue.h"
8 #include "core/css/CSSCustomPropertyDeclaration.h" 8 #include "core/css/CSSCustomPropertyDeclaration.h"
9 #include "core/css/CSSKeyframesRule.h" 9 #include "core/css/CSSKeyframesRule.h"
10 #include "core/css/CSSStyleSheet.h" 10 #include "core/css/CSSStyleSheet.h"
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 "blink,blink_style", "CSSParserImpl::parseStyleSheet", 165 "blink,blink_style", "CSSParserImpl::parseStyleSheet",
166 "baseUrl", context.baseURL().getString().utf8(), 166 "baseUrl", context.baseURL().getString().utf8(),
167 "mode", context.mode()); 167 "mode", context.mode());
168 168
169 TRACE_EVENT_BEGIN0("blink,blink_style", "CSSParserImpl::parseStyleSheet.toke nize"); 169 TRACE_EVENT_BEGIN0("blink,blink_style", "CSSParserImpl::parseStyleSheet.toke nize");
170 CSSTokenizer::Scope scope(string); 170 CSSTokenizer::Scope scope(string);
171 TRACE_EVENT_END0("blink,blink_style", "CSSParserImpl::parseStyleSheet.tokeni ze"); 171 TRACE_EVENT_END0("blink,blink_style", "CSSParserImpl::parseStyleSheet.tokeni ze");
172 172
173 TRACE_EVENT_BEGIN0("blink,blink_style", "CSSParserImpl::parseStyleSheet.pars e"); 173 TRACE_EVENT_BEGIN0("blink,blink_style", "CSSParserImpl::parseStyleSheet.pars e");
174 CSSParserImpl parser(context, styleSheet); 174 CSSParserImpl parser(context, styleSheet);
175 parser.enableLazyParsing();
175 bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRul eList, [&styleSheet](StyleRuleBase* rule) { 176 bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRul eList, [&styleSheet](StyleRuleBase* rule) {
176 if (rule->isCharsetRule()) 177 if (rule->isCharsetRule())
177 return; 178 return;
178 styleSheet->parserAppendRule(rule); 179 styleSheet->parserAppendRule(rule);
179 }); 180 });
180 styleSheet->setHasSyntacticallyValidCSSHeader(firstRuleValid); 181 styleSheet->setHasSyntacticallyValidCSSHeader(firstRuleValid);
182 styleSheet->populateStringPool(scope.stringPool());
181 TRACE_EVENT_END0("blink,blink_style", "CSSParserImpl::parseStyleSheet.parse" ); 183 TRACE_EVENT_END0("blink,blink_style", "CSSParserImpl::parseStyleSheet.parse" );
182 184
183 TRACE_EVENT_END2( 185 TRACE_EVENT_END2(
184 "blink,blink_style", "CSSParserImpl::parseStyleSheet", 186 "blink,blink_style", "CSSParserImpl::parseStyleSheet",
185 "tokenCount", scope.tokenCount(), 187 "tokenCount", scope.tokenCount(),
186 "length", string.length()); 188 "length", string.length());
187 } 189 }
188 190
189 CSSSelectorList CSSParserImpl::parsePageSelector(CSSParserTokenRange range, Styl eSheetContents* styleSheet) 191 CSSSelectorList CSSParserImpl::parsePageSelector(CSSParserTokenRange range, Styl eSheetContents* styleSheet)
190 { 192 {
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 { 271 {
270 CSSParserImpl parser(context); 272 CSSParserImpl parser(context);
271 CSSParserObserverWrapper wrapper(observer); 273 CSSParserObserverWrapper wrapper(observer);
272 parser.m_observerWrapper = &wrapper; 274 parser.m_observerWrapper = &wrapper;
273 CSSTokenizer::Scope scope(declaration, wrapper); 275 CSSTokenizer::Scope scope(declaration, wrapper);
274 observer.startRuleHeader(StyleRule::Style, 0); 276 observer.startRuleHeader(StyleRule::Style, 0);
275 observer.endRuleHeader(1); 277 observer.endRuleHeader(1);
276 parser.consumeDeclarationList(scope.tokenRange(), StyleRule::Style); 278 parser.consumeDeclarationList(scope.tokenRange(), StyleRule::Style);
277 } 279 }
278 280
281 ImmutableStylePropertySet* CSSParserImpl::parseDeclarationListForLazyStyle(CSSPa rserTokenRange block, const CSSParserContext& context)
282 {
283 CSSParserImpl parser(context);
284 parser.consumeDeclarationList(block, StyleRule::Style);
285 return createStylePropertySet(parser.m_parsedProperties, context.mode());
286 }
287
279 void CSSParserImpl::parseStyleSheetForInspector(const String& string, const CSSP arserContext& context, StyleSheetContents* styleSheet, CSSParserObserver& observ er) 288 void CSSParserImpl::parseStyleSheetForInspector(const String& string, const CSSP arserContext& context, StyleSheetContents* styleSheet, CSSParserObserver& observ er)
280 { 289 {
281 CSSParserImpl parser(context, styleSheet); 290 CSSParserImpl parser(context, styleSheet);
282 CSSParserObserverWrapper wrapper(observer); 291 CSSParserObserverWrapper wrapper(observer);
283 parser.m_observerWrapper = &wrapper; 292 parser.m_observerWrapper = &wrapper;
284 CSSTokenizer::Scope scope(string, wrapper); 293 CSSTokenizer::Scope scope(string, wrapper);
285 bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRul eList, [&styleSheet](StyleRuleBase* rule) { 294 bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRul eList, [&styleSheet](StyleRuleBase* rule) {
286 if (rule->isCharsetRule()) 295 if (rule->isCharsetRule())
287 return; 296 return;
288 styleSheet->parserAppendRule(rule); 297 styleSheet->parserAppendRule(rule);
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 686
678 StyleRule* CSSParserImpl::consumeStyleRule(CSSParserTokenRange prelude, CSSParse rTokenRange block) 687 StyleRule* CSSParserImpl::consumeStyleRule(CSSParserTokenRange prelude, CSSParse rTokenRange block)
679 { 688 {
680 CSSSelectorList selectorList = CSSSelectorParser::parseSelector(prelude, m_c ontext, m_styleSheet); 689 CSSSelectorList selectorList = CSSSelectorParser::parseSelector(prelude, m_c ontext, m_styleSheet);
681 if (!selectorList.isValid()) 690 if (!selectorList.isValid())
682 return nullptr; // Parse error, invalid selector list 691 return nullptr; // Parse error, invalid selector list
683 692
684 if (m_observerWrapper) 693 if (m_observerWrapper)
685 observeSelectors(*m_observerWrapper, prelude); 694 observeSelectors(*m_observerWrapper, prelude);
686 695
696 // TODO(csharrison): How should we lazily parse css that needs the observer?
697 if (m_shouldUseLazyParsing && !m_observerWrapper) {
698 return StyleRule::createLazy(std::move(selectorList), block, &m_context) ;
699 }
687 consumeDeclarationList(block, StyleRule::Style); 700 consumeDeclarationList(block, StyleRule::Style);
688
689 return StyleRule::create(std::move(selectorList), createStylePropertySet(m_p arsedProperties, m_context.mode())); 701 return StyleRule::create(std::move(selectorList), createStylePropertySet(m_p arsedProperties, m_context.mode()));
690 } 702 }
691 703
692 void CSSParserImpl::consumeDeclarationList(CSSParserTokenRange range, StyleRule: :RuleType ruleType) 704 void CSSParserImpl::consumeDeclarationList(CSSParserTokenRange range, StyleRule: :RuleType ruleType)
693 { 705 {
694 ASSERT(m_parsedProperties.isEmpty()); 706 ASSERT(m_parsedProperties.isEmpty());
695 707
696 bool useObserver = m_observerWrapper && (ruleType == StyleRule::Style || rul eType == StyleRule::Keyframe); 708 bool useObserver = m_observerWrapper && (ruleType == StyleRule::Style || rul eType == StyleRule::Keyframe);
697 if (useObserver) { 709 if (useObserver) {
698 m_observerWrapper->observer().startRuleBody(m_observerWrapper->previousT okenStartOffset(range)); 710 m_observerWrapper->observer().startRuleBody(m_observerWrapper->previousT okenStartOffset(range));
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 else 825 else
814 return nullptr; // Parser error, invalid value in keyframe selector 826 return nullptr; // Parser error, invalid value in keyframe selector
815 if (range.atEnd()) 827 if (range.atEnd())
816 return result; 828 return result;
817 if (range.consume().type() != CommaToken) 829 if (range.consume().type() != CommaToken)
818 return nullptr; // Parser error 830 return nullptr; // Parser error
819 } 831 }
820 } 832 }
821 833
822 } // namespace blink 834 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/css/parser/CSSParserImpl.h ('k') | third_party/WebKit/Source/core/css/parser/CSSTokenizer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698