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

Side by Side Diff: sky/engine/core/css/resolver/StyleResolver.cpp

Issue 863883002: Eliminate RuleRange. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 11 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
« no previous file with comments | « sky/engine/core/css/resolver/StyleResolver.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com)
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com)
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved. 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved.
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org>
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved.
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 m_styleSharingList.clear(); 141 m_styleSharingList.clear();
142 } 142 }
143 143
144 StyleResolver::~StyleResolver() 144 StyleResolver::~StyleResolver()
145 { 145 {
146 } 146 }
147 147
148 void StyleResolver::matchRules(Element& element, ElementRuleCollector& collector ) 148 void StyleResolver::matchRules(Element& element, ElementRuleCollector& collector )
149 { 149 {
150 collector.clearMatchedRules(); 150 collector.clearMatchedRules();
151 collector.matchedResult().ranges.lastAuthorRule = collector.matchedResult(). matchedProperties.size() - 1;
152 151
153 CascadeOrder cascadeOrder = 0; 152 CascadeOrder cascadeOrder = 0;
154 153
155 RuleRange ruleRange = collector.matchedResult().ranges.authorRuleRange(); 154 collector.collectMatchingRules(MatchRequest(&defaultStyles()), ++cascadeOrde r);
156 collector.collectMatchingRules(MatchRequest(&defaultStyles()), ruleRange, ++ cascadeOrder);
157 155
158 if (ShadowRoot* shadowRoot = element.shadowRoot()) 156 if (ShadowRoot* shadowRoot = element.shadowRoot())
159 shadowRoot->scopedStyleResolver().collectMatchingHostRules(collector, ++ cascadeOrder); 157 shadowRoot->scopedStyleResolver().collectMatchingHostRules(collector, ++ cascadeOrder);
160 158
161 ScopedStyleResolver& resolver = element.treeScope().scopedStyleResolver(); 159 ScopedStyleResolver& resolver = element.treeScope().scopedStyleResolver();
162 resolver.collectMatchingAuthorRules(collector, ++cascadeOrder); 160 resolver.collectMatchingAuthorRules(collector, ++cascadeOrder);
163 161
164 collector.sortAndTransferMatchedRules(); 162 collector.sortAndTransferMatchedRules();
165 163
166 if (const StylePropertySet* inlineStyle = element.inlineStyle()) { 164 if (const StylePropertySet* inlineStyle = element.inlineStyle()) {
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 state.setLineHeightValue(0); 270 state.setLineHeightValue(0);
273 271
274 state.fontBuilder().initForStyleResolve(state.document(), state.style()); 272 state.fontBuilder().initForStyleResolve(state.document(), state.style());
275 273
276 // We don't need to bother with !important. Since there is only ever one 274 // We don't need to bother with !important. Since there is only ever one
277 // decl, there's nothing to override. So just add the first properties. 275 // decl, there's nothing to override. So just add the first properties.
278 // We also don't need to bother with animation properties since the only 276 // We also don't need to bother with animation properties since the only
279 // relevant one is animation-timing-function and we special-case that in 277 // relevant one is animation-timing-function and we special-case that in
280 // CSSAnimations.cpp 278 // CSSAnimations.cpp
281 bool inheritedOnly = false; 279 bool inheritedOnly = false;
282 applyMatchedProperties<HighPriorityProperties>(state, result, false, 0, resu lt.matchedProperties.size() - 1, inheritedOnly); 280 applyMatchedProperties<HighPriorityProperties>(state, result, false, inherit edOnly);
283 281
284 // If our font got dirtied, go ahead and update it now. 282 // If our font got dirtied, go ahead and update it now.
285 updateFont(state); 283 updateFont(state);
286 284
287 // Line-height is set when we are sure we decided on the font-size 285 // Line-height is set when we are sure we decided on the font-size
288 if (state.lineHeightValue()) 286 if (state.lineHeightValue())
289 StyleBuilder::applyProperty(CSSPropertyLineHeight, state, state.lineHeig htValue()); 287 StyleBuilder::applyProperty(CSSPropertyLineHeight, state, state.lineHeig htValue());
290 288
291 // Now do rest of the properties. 289 // Now do rest of the properties.
292 applyMatchedProperties<LowPriorityProperties>(state, result, false, 0, resul t.matchedProperties.size() - 1, inheritedOnly); 290 applyMatchedProperties<LowPriorityProperties>(state, result, false, inherite dOnly);
293 291
294 loadPendingResources(state); 292 loadPendingResources(state);
295 293
296 return state.takeStyle(); 294 return state.takeStyle();
297 } 295 }
298 296
299 // This function is used by the WebAnimations JavaScript API method animate(). 297 // This function is used by the WebAnimations JavaScript API method animate().
300 // FIXME: Remove this when animate() switches away from resolution-dependent par sing. 298 // FIXME: Remove this when animate() switches away from resolution-dependent par sing.
301 PassRefPtr<AnimatableValue> StyleResolver::createAnimatableValueSnapshot(Element & element, CSSPropertyID property, CSSValue& value) 299 PassRefPtr<AnimatableValue> StyleResolver::createAnimatableValueSnapshot(Element & element, CSSPropertyID property, CSSValue& value)
302 { 300 {
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 if (!isPropertyForPass<pass>(property)) 513 if (!isPropertyForPass<pass>(property))
516 continue; 514 continue;
517 if (pass == HighPriorityProperties && property == CSSPropertyLineHeight) 515 if (pass == HighPriorityProperties && property == CSSPropertyLineHeight)
518 state.setLineHeightValue(current.value()); 516 state.setLineHeightValue(current.value());
519 else 517 else
520 StyleBuilder::applyProperty(current.id(), state, current.value()); 518 StyleBuilder::applyProperty(current.id(), state, current.value());
521 } 519 }
522 } 520 }
523 521
524 template <StyleResolver::StyleApplicationPass pass> 522 template <StyleResolver::StyleApplicationPass pass>
525 void StyleResolver::applyMatchedProperties(StyleResolverState& state, const Matc hResult& matchResult, bool isImportant, int startIndex, int endIndex, bool inher itedOnly) 523 void StyleResolver::applyMatchedProperties(StyleResolverState& state, const Matc hResult& matchResult, bool isImportant, bool inheritedOnly)
526 { 524 {
527 if (startIndex == -1) 525 for (const RefPtr<StylePropertySet>& properties : matchResult.matchedPropert ies) {
528 return; 526 applyProperties<pass>(state, properties.get(), isImportant, inheritedOnl y);
529 for (int i = startIndex; i <= endIndex; ++i) {
530 const MatchedProperties& matchedProperties = matchResult.matchedProperti es[i];
531 applyProperties<pass>(state, matchedProperties.properties.get(), isImpor tant, inheritedOnly);
532 } 527 }
533 } 528 }
534 529
535 static unsigned computeMatchedPropertiesHash(const MatchedProperties* properties , unsigned size) 530 static unsigned computeMatchedPropertiesHash(const RefPtr<StylePropertySet>* pro perties, unsigned size)
536 { 531 {
537 return StringHasher::hashMemory(properties, sizeof(MatchedProperties) * size ); 532 return StringHasher::hashMemory(properties, sizeof(*properties) * size);
538 } 533 }
539 534
540 void StyleResolver::invalidateMatchedPropertiesCache() 535 void StyleResolver::invalidateMatchedPropertiesCache()
541 { 536 {
542 m_matchedPropertiesCache.clear(); 537 m_matchedPropertiesCache.clear();
543 } 538 }
544 539
545 void StyleResolver::notifyResizeForViewportUnits() 540 void StyleResolver::notifyResizeForViewportUnits()
546 { 541 {
547 m_matchedPropertiesCache.clearViewportDependent(); 542 m_matchedPropertiesCache.clearViewportDependent();
(...skipping 27 matching lines...) Expand all
575 return; 570 return;
576 } 571 }
577 applyInheritedOnly = true; 572 applyInheritedOnly = true;
578 } 573 }
579 574
580 // Now we have all of the matched rules in the appropriate order. Walk the r ules and apply 575 // Now we have all of the matched rules in the appropriate order. Walk the r ules and apply
581 // high-priority properties first, i.e., those properties that other propert ies depend on. 576 // high-priority properties first, i.e., those properties that other propert ies depend on.
582 // The order is (1) high-priority not important, (2) high-priority important , (3) normal not important 577 // The order is (1) high-priority not important, (2) high-priority important , (3) normal not important
583 // and (4) normal important. 578 // and (4) normal important.
584 state.setLineHeightValue(0); 579 state.setLineHeightValue(0);
585 applyMatchedProperties<HighPriorityProperties>(state, matchResult, false, 0, matchResult.matchedProperties.size() - 1, applyInheritedOnly); 580 applyMatchedProperties<HighPriorityProperties>(state, matchResult, false, ap plyInheritedOnly);
586 applyMatchedProperties<HighPriorityProperties>(state, matchResult, true, mat chResult.ranges.firstAuthorRule, matchResult.ranges.lastAuthorRule, applyInherit edOnly); 581 applyMatchedProperties<HighPriorityProperties>(state, matchResult, true, app lyInheritedOnly);
587 applyMatchedProperties<HighPriorityProperties>(state, matchResult, true, mat chResult.ranges.firstUARule, matchResult.ranges.lastUARule, applyInheritedOnly);
588 582
589 // If our font got dirtied, go ahead and update it now. 583 // If our font got dirtied, go ahead and update it now.
590 updateFont(state); 584 updateFont(state);
591 585
592 // Line-height is set when we are sure we decided on the font-size. 586 // Line-height is set when we are sure we decided on the font-size.
593 if (state.lineHeightValue()) 587 if (state.lineHeightValue())
594 StyleBuilder::applyProperty(CSSPropertyLineHeight, state, state.lineHeig htValue()); 588 StyleBuilder::applyProperty(CSSPropertyLineHeight, state, state.lineHeig htValue());
595 589
596 // Many properties depend on the font. If it changes we just apply all prope rties. 590 // Many properties depend on the font. If it changes we just apply all prope rties.
597 if (cachedMatchedProperties && cachedMatchedProperties->renderStyle->fontDes cription() != state.style()->fontDescription()) 591 if (cachedMatchedProperties && cachedMatchedProperties->renderStyle->fontDes cription() != state.style()->fontDescription())
598 applyInheritedOnly = false; 592 applyInheritedOnly = false;
599 593
600 // Now do the normal priority UA properties.
601 applyMatchedProperties<LowPriorityProperties>(state, matchResult, false, mat chResult.ranges.firstUARule, matchResult.ranges.lastUARule, applyInheritedOnly);
602
603 // Now do the author and user normal priority properties and all the !import ant properties. 594 // Now do the author and user normal priority properties and all the !import ant properties.
604 applyMatchedProperties<LowPriorityProperties>(state, matchResult, false, mat chResult.ranges.lastUARule + 1, matchResult.matchedProperties.size() - 1, applyI nheritedOnly); 595 applyMatchedProperties<LowPriorityProperties>(state, matchResult, false, app lyInheritedOnly);
605 applyMatchedProperties<LowPriorityProperties>(state, matchResult, true, matc hResult.ranges.firstAuthorRule, matchResult.ranges.lastAuthorRule, applyInherite dOnly); 596 applyMatchedProperties<LowPriorityProperties>(state, matchResult, true, appl yInheritedOnly);
606 applyMatchedProperties<LowPriorityProperties>(state, matchResult, true, matc hResult.ranges.firstUARule, matchResult.ranges.lastUARule, applyInheritedOnly);
607 597
608 loadPendingResources(state); 598 loadPendingResources(state);
609 599
610 if (!cachedMatchedProperties && cacheHash && MatchedPropertiesCache::isCache able(element, state.style(), state.parentStyle())) { 600 if (!cachedMatchedProperties && cacheHash && MatchedPropertiesCache::isCache able(element, state.style(), state.parentStyle())) {
611 INCREMENT_STYLE_STATS_COUNTER(*this, matchedPropertyCacheAdded); 601 INCREMENT_STYLE_STATS_COUNTER(*this, matchedPropertyCacheAdded);
612 m_matchedPropertiesCache.add(state.style(), state.parentStyle(), cacheHa sh, matchResult); 602 m_matchedPropertiesCache.add(state.style(), state.parentStyle(), cacheHa sh, matchResult);
613 } 603 }
614 604
615 ASSERT(!state.fontBuilder().fontDirty()); 605 ASSERT(!state.fontBuilder().fontDirty());
616 } 606 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 break; 657 break;
668 default: 658 default:
669 break; 659 break;
670 } 660 }
671 StyleBuilder::applyProperty(properties[i].property, state, propertie s[i].value); 661 StyleBuilder::applyProperty(properties[i].property, state, propertie s[i].value);
672 } 662 }
673 } 663 }
674 } 664 }
675 665
676 } // namespace blink 666 } // namespace blink
OLDNEW
« no previous file with comments | « sky/engine/core/css/resolver/StyleResolver.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698