Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 598 | 598 |
| 599 { | 599 { |
| 600 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, state.style(), m_inspectorCSSOMWrappers); | 600 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, state.style(), m_inspectorCSSOMWrappers); |
| 601 collector.setRegionForStyling(regionForStyling); | 601 collector.setRegionForStyling(regionForStyling); |
| 602 | 602 |
| 603 if (matchingBehavior == MatchOnlyUserAgentRules) | 603 if (matchingBehavior == MatchOnlyUserAgentRules) |
| 604 matchUARules(collector); | 604 matchUARules(collector); |
| 605 else | 605 else |
| 606 matchAllRules(state, collector, m_matchAuthorAndUserStyles, matching Behavior != MatchAllRulesExcludingSMIL); | 606 matchAllRules(state, collector, m_matchAuthorAndUserStyles, matching Behavior != MatchAllRulesExcludingSMIL); |
| 607 | 607 |
| 608 applyMatchedProperties(state, collector.matchedResult(), element); | 608 applyMatchedProperties(state, collector.matchedResult()); |
| 609 } | 609 } |
| 610 { | 610 { |
| 611 StyleAdjuster adjuster(state.cachedUAStyle(), m_document->inQuirksMode() ); | 611 StyleAdjuster adjuster(state.cachedUAStyle(), m_document->inQuirksMode() ); |
| 612 adjuster.adjustRenderStyle(state.style(), state.parentStyle(), element); | 612 adjuster.adjustRenderStyle(state.style(), state.parentStyle(), element); |
| 613 } | 613 } |
| 614 document()->didAccessStyleResolver(); | 614 document()->didAccessStyleResolver(); |
| 615 | 615 |
| 616 // FIXME: Shouldn't this be on RenderBody::styleDidChange? | 616 // FIXME: Shouldn't this be on RenderBody::styleDidChange? |
| 617 if (element->hasTagName(bodyTag)) | 617 if (element->hasTagName(bodyTag)) |
| 618 document()->textLinkColors().setTextColor(state.style()->visitedDependen tColor(CSSPropertyColor)); | 618 document()->textLinkColors().setTextColor(state.style()->visitedDependen tColor(CSSPropertyColor)); |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 793 if (m_matchAuthorAndUserStyles) { | 793 if (m_matchAuthorAndUserStyles) { |
| 794 matchUserRules(collector, false); | 794 matchUserRules(collector, false); |
| 795 matchAuthorRules(state.element(), collector, false); | 795 matchAuthorRules(state.element(), collector, false); |
| 796 } | 796 } |
| 797 | 797 |
| 798 if (collector.matchedResult().matchedProperties.isEmpty()) | 798 if (collector.matchedResult().matchedProperties.isEmpty()) |
| 799 return 0; | 799 return 0; |
| 800 | 800 |
| 801 state.style()->setStyleType(pseudoStyleRequest.pseudoId); | 801 state.style()->setStyleType(pseudoStyleRequest.pseudoId); |
| 802 | 802 |
| 803 applyMatchedProperties(state, collector.matchedResult(), e); | 803 applyMatchedProperties(state, collector.matchedResult()); |
| 804 } | 804 } |
| 805 { | 805 { |
| 806 StyleAdjuster adjuster(state.cachedUAStyle(), m_document->inQuirksMode() ); | 806 StyleAdjuster adjuster(state.cachedUAStyle(), m_document->inQuirksMode() ); |
| 807 // FIXME: Passing 0 as the Element* introduces a lot of complexity | 807 // FIXME: Passing 0 as the Element* introduces a lot of complexity |
| 808 // in the adjustRenderStyle code. | 808 // in the adjustRenderStyle code. |
| 809 adjuster.adjustRenderStyle(state.style(), state.parentStyle(), 0); | 809 adjuster.adjustRenderStyle(state.style(), state.parentStyle(), 0); |
| 810 } | 810 } |
| 811 | 811 |
| 812 // Start loading resources referenced by this style. | 812 // Start loading resources referenced by this style. |
| 813 m_styleResourceLoader.loadPendingResources(state.style(), state.elementStyle Resources()); | 813 m_styleResourceLoader.loadPendingResources(state.style(), state.elementStyle Resources()); |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1181 static unsigned computeMatchedPropertiesHash(const MatchedProperties* properties , unsigned size) | 1181 static unsigned computeMatchedPropertiesHash(const MatchedProperties* properties , unsigned size) |
| 1182 { | 1182 { |
| 1183 return StringHasher::hashMemory(properties, sizeof(MatchedProperties) * size ); | 1183 return StringHasher::hashMemory(properties, sizeof(MatchedProperties) * size ); |
| 1184 } | 1184 } |
| 1185 | 1185 |
| 1186 void StyleResolver::invalidateMatchedPropertiesCache() | 1186 void StyleResolver::invalidateMatchedPropertiesCache() |
| 1187 { | 1187 { |
| 1188 m_matchedPropertiesCache.clear(); | 1188 m_matchedPropertiesCache.clear(); |
| 1189 } | 1189 } |
| 1190 | 1190 |
| 1191 void StyleResolver::applyMatchedProperties(StyleResolverState& state, const Matc hResult& matchResult, const Element* element) | 1191 void StyleResolver::applyMatchedProperties(StyleResolverState& state, const Matc hResult& matchResult) |
| 1192 { | 1192 { |
| 1193 const Element* element = state.element(); | |
| 1193 ASSERT(element); | 1194 ASSERT(element); |
| 1194 STYLE_STATS_ADD_MATCHED_PROPERTIES_SEARCH(); | 1195 STYLE_STATS_ADD_MATCHED_PROPERTIES_SEARCH(); |
| 1195 | 1196 |
| 1196 unsigned cacheHash = matchResult.isCacheable ? computeMatchedPropertiesHash( matchResult.matchedProperties.data(), matchResult.matchedProperties.size()) : 0; | 1197 unsigned cacheHash = matchResult.isCacheable ? computeMatchedPropertiesHash( matchResult.matchedProperties.data(), matchResult.matchedProperties.size()) : 0; |
| 1197 bool applyInheritedOnly = false; | 1198 bool applyInheritedOnly = false; |
| 1198 const CachedMatchedProperties* cachedMatchedProperties = 0; | 1199 const CachedMatchedProperties* cachedMatchedProperties = 0; |
| 1199 | 1200 |
| 1200 if (cacheHash && (cachedMatchedProperties = m_matchedPropertiesCache.find(ca cheHash, state, matchResult))) { | 1201 if (cacheHash && (cachedMatchedProperties = m_matchedPropertiesCache.find(ca cheHash, state, matchResult)) |
| 1202 && MatchedPropertiesCache::isCacheable(element, state.style(), state.par entStyle())) { | |
|
ojan
2013/07/28 17:42:31
Not a big deal, but it'd be nice if we saved the i
| |
| 1201 STYLE_STATS_ADD_MATCHED_PROPERTIES_HIT(); | 1203 STYLE_STATS_ADD_MATCHED_PROPERTIES_HIT(); |
| 1202 // We can build up the style by copying non-inherited properties from an earlier style object built using the same exact | 1204 // We can build up the style by copying non-inherited properties from an earlier style object built using the same exact |
| 1203 // style declarations. We then only need to apply the inherited properti es, if any, as their values can depend on the | 1205 // style declarations. We then only need to apply the inherited properti es, if any, as their values can depend on the |
| 1204 // element context. This is fast and saves memory by reusing the style d ata structures. | 1206 // element context. This is fast and saves memory by reusing the style d ata structures. |
| 1205 state.style()->copyNonInheritedFrom(cachedMatchedProperties->renderStyle .get()); | 1207 state.style()->copyNonInheritedFrom(cachedMatchedProperties->renderStyle .get()); |
| 1206 if (state.parentStyle()->inheritedDataShared(cachedMatchedProperties->pa rentRenderStyle.get()) && !isAtShadowBoundary(element)) { | 1208 if (state.parentStyle()->inheritedDataShared(cachedMatchedProperties->pa rentRenderStyle.get()) && !isAtShadowBoundary(element)) { |
| 1207 STYLE_STATS_ADD_MATCHED_PROPERTIES_HIT_SHARED_INHERITED(); | 1209 STYLE_STATS_ADD_MATCHED_PROPERTIES_HIT_SHARED_INHERITED(); |
| 1208 | 1210 |
| 1209 EInsideLink linkStatus = state.style()->insideLink(); | 1211 EInsideLink linkStatus = state.style()->insideLink(); |
| 1210 // If the cache item parent style has identical inherited properties to the current parent style then the | 1212 // If the cache item parent style has identical inherited properties to the current parent style then the |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1279 | 1281 |
| 1280 ASSERT(!state.fontBuilder().fontDirty()); | 1282 ASSERT(!state.fontBuilder().fontDirty()); |
| 1281 | 1283 |
| 1282 #ifdef STYLE_STATS | 1284 #ifdef STYLE_STATS |
| 1283 if (!cachedMatchedProperties) | 1285 if (!cachedMatchedProperties) |
| 1284 STYLE_STATS_ADD_MATCHED_PROPERTIES_TO_CACHE(); | 1286 STYLE_STATS_ADD_MATCHED_PROPERTIES_TO_CACHE(); |
| 1285 #endif | 1287 #endif |
| 1286 | 1288 |
| 1287 if (cachedMatchedProperties || !cacheHash) | 1289 if (cachedMatchedProperties || !cacheHash) |
| 1288 return; | 1290 return; |
| 1289 if (!MatchedPropertiesCache::isCacheable(state.element(), state.style(), sta te.parentStyle())) | 1291 if (!MatchedPropertiesCache::isCacheable(element, state.style(), state.paren tStyle())) |
| 1290 return; | 1292 return; |
| 1291 STYLE_STATS_ADD_MATCHED_PROPERTIES_ENTERED_INTO_CACHE(); | 1293 STYLE_STATS_ADD_MATCHED_PROPERTIES_ENTERED_INTO_CACHE(); |
| 1292 m_matchedPropertiesCache.add(state.style(), state.parentStyle(), cacheHash, matchResult); | 1294 m_matchedPropertiesCache.add(state.style(), state.parentStyle(), cacheHash, matchResult); |
| 1293 } | 1295 } |
| 1294 | 1296 |
| 1295 CSSPropertyValue::CSSPropertyValue(CSSPropertyID id, const StylePropertySet& pro pertySet) | 1297 CSSPropertyValue::CSSPropertyValue(CSSPropertyID id, const StylePropertySet& pro pertySet) |
| 1296 : property(id), value(propertySet.getPropertyCSSValue(id).get()) | 1298 : property(id), value(propertySet.getPropertyCSSValue(id).get()) |
| 1297 { } | 1299 { } |
| 1298 | 1300 |
| 1299 void StyleResolver::applyPropertiesToStyle(const CSSPropertyValue* properties, s ize_t count, RenderStyle* style) | 1301 void StyleResolver::applyPropertiesToStyle(const CSSPropertyValue* properties, s ize_t count, RenderStyle* style) |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1458 m_matchedPropertiesSearches, m_matchedPropertiesHit, m_matchedProperties SharedInheritedHit, m_matchedPropertiesToCache, m_matchedPropertiesEnteredIntoCa che); | 1460 m_matchedPropertiesSearches, m_matchedPropertiesHit, m_matchedProperties SharedInheritedHit, m_matchedPropertiesToCache, m_matchedPropertiesEnteredIntoCa che); |
| 1459 | 1461 |
| 1460 fprintf(stderr, "Total:\n"); | 1462 fprintf(stderr, "Total:\n"); |
| 1461 printStyleStats(m_totalSearches, m_totalElementsEligibleForSharing, m_totalS tylesShared, m_totalSearchFoundSiblingForSharing, m_totalSearchesMissedSharing, | 1463 printStyleStats(m_totalSearches, m_totalElementsEligibleForSharing, m_totalS tylesShared, m_totalSearchFoundSiblingForSharing, m_totalSearchesMissedSharing, |
| 1462 m_totalMatchedPropertiesSearches, m_totalMatchedPropertiesHit, m_totalMa tchedPropertiesSharedInheritedHit, m_totalMatchedPropertiesToCache, m_totalMatch edPropertiesEnteredIntoCache); | 1464 m_totalMatchedPropertiesSearches, m_totalMatchedPropertiesHit, m_totalMa tchedPropertiesSharedInheritedHit, m_totalMatchedPropertiesToCache, m_totalMatch edPropertiesEnteredIntoCache); |
| 1463 fprintf(stderr, "----------------------------------------------------------- ---------------------\n"); | 1465 fprintf(stderr, "----------------------------------------------------------- ---------------------\n"); |
| 1464 } | 1466 } |
| 1465 #endif | 1467 #endif |
| 1466 | 1468 |
| 1467 } // namespace WebCore | 1469 } // namespace WebCore |
| OLD | NEW |