DocumentLoader keeps a reference to all URL strings ever loaded in m_resourcesClientK...
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Jul 2011 20:17:44 +0000 (20:17 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Jul 2011 20:17:44 +0000 (20:17 +0000)
https://bugs.webkit.org/show_bug.cgi?id=61894

Patch by Scott Graham <scottmg@chromium.org> on 2011-07-22
Reviewed by James Robinson.

DocumentLoader::m_resourcesClientKnowsAbout is a set of all the URLs
that have passed through FrameLoader::dispatchWillSendRequest() and is
used by FrameLoader::loadedResourceFromMemoryCached to decide whether
to inform the FrameLoader's m_client about this load.  Unfortunately,
this set holds a reference to the URL string for every resource
loaded, so on pages that use data URLs to "load" large amounts of data
this leaks lots of memory. The cache improves performance going through
FrameLoader::loadResourceFromMemoryCache, so rather than removing it,
simply exclude 'data:' urls from the cache to save the majority of
memory that is held for too long.

* loader/DocumentLoader.h:
(WebCore::DocumentLoader::didTellClientAboutLoad):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@91600 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/loader/DocumentLoader.h

index 764634c..514fade 100644 (file)
@@ -1,3 +1,24 @@
+2011-07-22  Scott Graham  <scottmg@chromium.org>
+
+        DocumentLoader keeps a reference to all URL strings ever loaded in m_resourcesClientKnowsAbout leading to lots of memory waste
+        https://bugs.webkit.org/show_bug.cgi?id=61894
+
+        Reviewed by James Robinson.
+
+        DocumentLoader::m_resourcesClientKnowsAbout is a set of all the URLs
+        that have passed through FrameLoader::dispatchWillSendRequest() and is
+        used by FrameLoader::loadedResourceFromMemoryCached to decide whether
+        to inform the FrameLoader's m_client about this load.  Unfortunately,
+        this set holds a reference to the URL string for every resource
+        loaded, so on pages that use data URLs to "load" large amounts of data
+        this leaks lots of memory. The cache improves performance going through
+        FrameLoader::loadResourceFromMemoryCache, so rather than removing it,
+        simply exclude 'data:' urls from the cache to save the majority of
+        memory that is held for too long.
+
+        * loader/DocumentLoader.h:
+        (WebCore::DocumentLoader::didTellClientAboutLoad):
+
 2011-07-22  Alok Priyadarshi  <alokp@chromium.org>
 
         Use software rendering for small canvas
index 595b85c..5689fa2 100644 (file)
@@ -230,6 +230,12 @@ namespace WebCore {
         
         void didTellClientAboutLoad(const String& url)
         { 
+#if !PLATFORM(MAC)
+            // Don't include data urls here, as if a lot of data is loaded
+            // that way, we hold on to the (large) url string for too long.
+            if (protocolIs(url, "data"))
+                return;
+#endif
             if (!url.isEmpty())
                 m_resourcesClientKnowsAbout.add(url);
         }