Throw out all live resource decoded data on memory pressure / suspension.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 12 Feb 2016 20:22:54 +0000 (20:22 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 12 Feb 2016 20:22:54 +0000 (20:22 +0000)
<https://webkit.org/b/154176>

Reviewed by Antti Koivisto.

When pruning live resource decoded data from the memory cache,
we normally avoid pruning anything that's been painted in the last second.
This is an optimization to avoid getting into image decoding loops.

For memory pressure / process suspension scenarios this doesn't really
make sense though:

    - In the pressure case, if we have to render again soon it'll likely
      be a new GIF frame which we have to decode anyway.

    - In the process suspension case, we might *never* render again,
      so we should be good citizens and drop all the decoded data we can.

This patch makes us drop all the decoded data, recently painted or not.

* platform/MemoryPressureHandler.cpp:
(WebCore::MemoryPressureHandler::releaseCriticalMemory):

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

Source/WebCore/ChangeLog
Source/WebCore/platform/MemoryPressureHandler.cpp

index 4158364..89bb331 100644 (file)
@@ -1,3 +1,28 @@
+2016-02-12  Andreas Kling  <akling@apple.com>
+
+        Throw out all live resource decoded data on memory pressure / suspension.
+        <https://webkit.org/b/154176>
+
+        Reviewed by Antti Koivisto.
+
+        When pruning live resource decoded data from the memory cache,
+        we normally avoid pruning anything that's been painted in the last second.
+        This is an optimization to avoid getting into image decoding loops.
+
+        For memory pressure / process suspension scenarios this doesn't really
+        make sense though:
+
+            - In the pressure case, if we have to render again soon it'll likely
+              be a new GIF frame which we have to decode anyway.
+
+            - In the process suspension case, we might *never* render again,
+              so we should be good citizens and drop all the decoded data we can.
+
+        This patch makes us drop all the decoded data, recently painted or not.
+
+        * platform/MemoryPressureHandler.cpp:
+        (WebCore::MemoryPressureHandler::releaseCriticalMemory):
+
 2016-02-12  Gavin Barraclough  <barraclough@apple.com>
 
         Separate out !allowsAccess path in JSDOMWindowCustom getOwnPropertySlot
index 9371e39..b5b5495 100644 (file)
@@ -119,7 +119,7 @@ void MemoryPressureHandler::releaseCriticalMemory(Synchronous synchronous)
 
     {
         ReliefLogger log("Prune MemoryCache live resources");
-        MemoryCache::singleton().pruneLiveResourcesToSize(0);
+        MemoryCache::singleton().pruneLiveResourcesToSize(0, /*shouldDestroyDecodedDataForAllLiveResources*/ true);
     }
 
     {