Changeset 207291 in webkit
- Timestamp:
- Oct 13, 2016 10:25:24 AM (8 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r207290 r207291 1 2016-10-13 Ryan Haddad <ryanhaddad@apple.com> 2 3 Unreviewed, rolling out r207286. 4 5 Caused LayoutTest http/tests/misc/acid3.html to fail. 6 7 Reverted changeset: 8 9 "Share inline stylesheets between shadow trees" 10 https://bugs.webkit.org/show_bug.cgi?id=163353 11 http://trac.webkit.org/changeset/207286 12 1 13 2016-10-13 Sergio Villar Senin <svillar@igalia.com> 2 14 -
trunk/Source/WebCore/css/parser/CSSParserMode.h
r207286 r207291 33 33 34 34 #include "URL.h" 35 #include "URLHash.h"36 #include <wtf/HashFunctions.h>37 #include <wtf/text/StringHash.h>38 35 39 36 namespace WebCore { … … 118 115 WEBCORE_EXPORT const CSSParserContext& strictCSSParserContext(); 119 116 120 struct CSSParserContextHash {121 static unsigned hash(const CSSParserContext& key)122 {123 auto hash = URLHash::hash(key.baseURL);124 hash ^= StringHash::hash(key.charset);125 unsigned bits = key.isHTMLDocument << 0126 & key.isHTMLDocument << 1127 #if ENABLE(CSS_GRID_LAYOUT)128 & key.cssGridLayoutEnabled << 2129 #endif130 #if ENABLE(TEXT_AUTOSIZING)131 & key.textAutosizingEnabled << 3132 #endif133 & key.needsSiteSpecificQuirks << 4134 & key.enforcesCSSMIMETypeInNoQuirksMode << 5135 & key.useLegacyBackgroundSizeShorthandBehavior << 6136 & key.springTimingFunctionEnabled << 7137 & key.useNewParser << 8138 #if ENABLE(VARIATION_FONTS)139 & key.variationFontsEnabled << 9140 #endif141 & key.mode << 10;142 hash ^= WTF::intHash(bits);143 return hash;144 }145 static bool equal(const CSSParserContext& a, const CSSParserContext& b)146 {147 return a == b;148 }149 static const bool safeToCompareToEmptyOrDeleted = false;150 117 }; 151 118 152 }153 154 namespace WTF {155 template<> struct HashTraits<WebCore::CSSParserContext> : GenericHashTraits<WebCore::CSSParserContext> {156 static void constructDeletedValue(WebCore::CSSParserContext& slot) { new (NotNull, &slot.baseURL) WebCore::URL(WTF::HashTableDeletedValue); }157 static bool isDeletedValue(const WebCore::CSSParserContext& value) { return value.baseURL.isHashTableDeletedValue(); }158 static WebCore::CSSParserContext emptyValue() { return WebCore::CSSParserContext(WebCore::HTMLStandardMode); }159 };160 161 template<> struct DefaultHash<WebCore::CSSParserContext> {162 typedef WebCore::CSSParserContextHash Hash;163 };164 }165 166 119 #endif // CSSParserMode_h -
trunk/Source/WebCore/dom/InlineStyleSheetOwner.cpp
r207286 r207291 31 31 #include "StyleSheetContents.h" 32 32 #include "TextNodeTraversal.h" 33 #include <wtf/HashMap.h>34 33 #include <wtf/NeverDestroyed.h> 35 34 36 35 namespace WebCore { 37 38 using InlineStyleSheetCacheKey = std::pair<String, CSSParserContext>;39 using InlineStyleSheetCache = HashMap<InlineStyleSheetCacheKey, RefPtr<StyleSheetContents>>;40 41 static InlineStyleSheetCache& inlineStyleSheetCache()42 {43 static NeverDestroyed<InlineStyleSheetCache> cache;44 return cache;45 }46 47 static URL inlineStyleSheetBaseURLForElement(const Element& element)48 {49 auto* shadowRoot = element.containingShadowRoot();50 // User agent shadow trees can't contain document-relative URLs. Use blank URL as base allowing cross-document sharing.51 return shadowRoot && shadowRoot->mode() == ShadowRoot::Mode::UserAgent ? blankURL() : element.document().baseURL();52 }53 54 static Optional<InlineStyleSheetCacheKey> makeInlineStyleSheetCacheKey(const String& text, const Element& element)55 {56 if (text.isEmpty())57 return { };58 // Only cache for shadow trees. Main document inline stylesheets are generally unique and can't be shared between documents.59 // FIXME: This could be relaxed when a stylesheet does not contain document-relative URLs (or #urls).60 if (!element.isInShadowTree())61 return { };62 63 CSSParserContext context { element.document(), inlineStyleSheetBaseURLForElement(element) };64 return std::make_pair(text, context);65 }66 36 67 37 InlineStyleSheetOwner::InlineStyleSheetOwner(Document& document, bool createdByParser) … … 183 153 m_styleScope->addPendingSheet(); 184 154 185 auto cacheKey = makeInlineStyleSheetCacheKey(text, element);186 if (cacheKey) {187 if (auto* cachedSheet = inlineStyleSheetCache().get(*cacheKey)) {188 ASSERT(cachedSheet->isCacheable());189 m_sheet = CSSStyleSheet::create(*cachedSheet, element);190 sheetLoaded(element);191 element.notifyLoadedSheetAndAllCriticalSubresources(false);192 return;193 }194 }195 196 155 m_loading = true; 197 156 198 m_sheet = CSSStyleSheet::createInline(element, inlineStyleSheetBaseURLForElement(element), m_startTextPosition, document.encoding());157 m_sheet = CSSStyleSheet::createInline(element, URL(), m_startTextPosition, document.encoding()); 199 158 m_sheet->setMediaQueries(mediaQueries.releaseNonNull()); 200 159 m_sheet->setTitle(element.title()); … … 205 164 if (m_sheet) 206 165 m_sheet->contents().checkLoaded(); 207 208 if (cacheKey && m_sheet && m_sheet->contents().isCacheable()) {209 inlineStyleSheetCache().add(*cacheKey, &m_sheet->contents());210 211 // Prevent pathological growth.212 const size_t maximumInlineStyleSheetCacheSize = 50;213 if (inlineStyleSheetCache().size() > maximumInlineStyleSheetCacheSize)214 inlineStyleSheetCache().remove(inlineStyleSheetCache().begin());215 }216 166 } 217 167 … … 240 190 } 241 191 242 void InlineStyleSheetOwner::clearCache()243 {244 inlineStyleSheetCache().clear();245 192 } 246 247 } -
trunk/Source/WebCore/dom/InlineStyleSheetOwner.h
r207286 r207291 53 53 Style::Scope* styleScope() { return m_styleScope; } 54 54 55 static void clearCache();56 57 55 private: 58 56 void createSheet(Element&, const String& text); -
trunk/Source/WebCore/platform/MemoryPressureHandler.cpp
r207286 r207291 34 34 #include "GCController.h" 35 35 #include "HTMLMediaElement.h" 36 #include "InlineStyleSheetOwner.h"37 36 #include "InspectorInstrumentation.h" 38 37 #include "Logging.h" … … 105 104 StyledElement::clearPresentationAttributeCache(); 106 105 } 107 108 {109 ReliefLogger log("Clear inline stylesheet cache");110 InlineStyleSheetOwner::clearCache();111 }112 106 } 113 107
Note: See TracChangeset
for help on using the changeset viewer.