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

Unified Diff: third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.cpp

Issue 2290983003: CSSStyleSheetResource should cache decoded text instead of raw bytes (Closed)
Patch Set: Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.cpp
diff --git a/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.cpp b/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.cpp
index f44d16a3fcff570c6df1692629a9cc5dde000860..a18537844a6f7b638c788b2fa77e97d4c7bdf75b 100644
--- a/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.cpp
+++ b/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.cpp
@@ -90,16 +90,25 @@ void CSSStyleSheetResource::didAddClient(ResourceClient* c)
static_cast<StyleSheetResourceClient*>(c)->setCSSStyleSheet(resourceRequest().url(), response().url(), encoding(), this);
}
-const String CSSStyleSheetResource::sheetText(MIMETypeCheck mimeTypeCheck) const
+const String CSSStyleSheetResource::sheetText(MIMETypeCheck mimeTypeCheck)
{
- if (!data() || data()->isEmpty() || !canUseSheet(mimeTypeCheck))
+ if (!canUseSheet(mimeTypeCheck))
return String();
+ // Only cache decoded sheet text when loading is complete.
+ if (isLoading())
+ return decodedText();
+
+ // Use cached decoded sheet text when available.
if (!m_decodedSheetText.isNull())
return m_decodedSheetText;
- // Don't cache the decoded text, regenerating is cheap and it can use quite a bit of memory
- return decodedText();
+ if (!data() || data()->isEmpty())
+ return String();
+
+ m_decodedSheetText = decodedText();
+ clearData();
+ return m_decodedSheetText;
hiroshige 2016/08/31 07:30:25 IIUC, the Lines 106--111 are executed only in shee
kouhei (in TOK) 2016/08/31 10:27:43 Done.
}
void CSSStyleSheetResource::appendData(const char* data, size_t length)
@@ -116,14 +125,11 @@ void CSSStyleSheetResource::appendData(const char* data, size_t length)
void CSSStyleSheetResource::checkNotify()
{
// Decode the data to find out the encoding and keep the sheet text around during checkNotify()
- if (data())
- m_decodedSheetText = decodedText();
+ sheetText();
hiroshige 2016/08/31 07:30:25 I think we call sheetText() here to ensure |m_data
kouhei (in TOK) 2016/08/31 10:27:43 Done.
ResourceClientWalker<StyleSheetResourceClient> w(clients());
while (StyleSheetResourceClient* c = w.next())
c->setCSSStyleSheet(resourceRequest().url(), response().url(), encoding(), this);
- // Clear the decoded text as it is unlikely to be needed immediately again and is cheap to regenerate.
- m_decodedSheetText = String();
}
void CSSStyleSheetResource::destroyDecodedDataIfPossible()

Powered by Google App Engine
This is Rietveld 408576698