[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

weinig at apple.com weinig at apple.com
Wed Dec 22 15:38:16 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit f7baae05209037d15412e257eda819f0169b2746
Author: weinig at apple.com <weinig at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Nov 9 19:28:56 2010 +0000

    Factor calculation of cache sizes based on cache model into shared function
    https://bugs.webkit.org/show_bug.cgi?id=48706
    
    Reviewed by Adam Roben.
    
    * WebProcess/WebProcess.cpp:
    (WebKit::WebProcess::calculateCacheSizes):
    * WebProcess/WebProcess.h:
    * WebProcess/mac/WebProcessMac.mm:
    (WebKit::volumeFreeSize):
    (WebKit::WebProcess::platformSetCacheModel):
    * WebProcess/win/WebProcessWin.cpp:
    (WebKit::memorySize):
    (WebKit::volumeFreeSize):
    (WebKit::WebProcess::platformSetCacheModel):
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@71658 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index b21c883..5e6df3d 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,5 +1,23 @@
 2010-11-09  Sam Weinig  <sam at webkit.org>
 
+        Reviewed by Adam Roben.
+
+        Factor calculation of cache sizes based on cache model into shared function
+        https://bugs.webkit.org/show_bug.cgi?id=48706
+
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::calculateCacheSizes):
+        * WebProcess/WebProcess.h:
+        * WebProcess/mac/WebProcessMac.mm:
+        (WebKit::volumeFreeSize):
+        (WebKit::WebProcess::platformSetCacheModel):
+        * WebProcess/win/WebProcessWin.cpp:
+        (WebKit::memorySize):
+        (WebKit::volumeFreeSize):
+        (WebKit::WebProcess::platformSetCacheModel):
+
+2010-11-09  Sam Weinig  <sam at webkit.org>
+
         Reviewed by Anders Carlsson.
 
         Context menus show up in the wrong place when the page is scrolled
diff --git a/WebKit2/WebProcess/WebProcess.cpp b/WebKit2/WebProcess/WebProcess.cpp
index 774e9cc..5ffa301 100644
--- a/WebKit2/WebProcess/WebProcess.cpp
+++ b/WebKit2/WebProcess/WebProcess.cpp
@@ -235,6 +235,150 @@ void WebProcess::setCacheModel(uint32_t cm)
     }
 }
 
+void WebProcess::calculateCacheSizes(CacheModel cacheModel, uint64_t memorySize, uint64_t diskFreeSize,
+    unsigned& cacheTotalCapacity, unsigned& cacheMinDeadCapacity, unsigned& cacheMaxDeadCapacity, double& deadDecodedDataDeletionInterval,
+    unsigned& pageCacheCapacity, unsigned long& urlCacheMemoryCapacity, unsigned long& urlCacheDiskCapacity)
+{
+    switch (cacheModel) {
+    case CacheModelDocumentViewer: {
+        // Page cache capacity (in pages)
+        pageCacheCapacity = 0;
+
+        // Object cache capacities (in bytes)
+        if (memorySize >= 2048)
+            cacheTotalCapacity = 96 * 1024 * 1024;
+        else if (memorySize >= 1536)
+            cacheTotalCapacity = 64 * 1024 * 1024;
+        else if (memorySize >= 1024)
+            cacheTotalCapacity = 32 * 1024 * 1024;
+        else if (memorySize >= 512)
+            cacheTotalCapacity = 16 * 1024 * 1024;
+
+        cacheMinDeadCapacity = 0;
+        cacheMaxDeadCapacity = 0;
+
+        // Foundation memory cache capacity (in bytes)
+        urlCacheMemoryCapacity = 0;
+
+        // Foundation disk cache capacity (in bytes)
+        urlCacheDiskCapacity = 0;
+
+        break;
+    }
+    case CacheModelDocumentBrowser: {
+        // Page cache capacity (in pages)
+        if (memorySize >= 1024)
+            pageCacheCapacity = 3;
+        else if (memorySize >= 512)
+            pageCacheCapacity = 2;
+        else if (memorySize >= 256)
+            pageCacheCapacity = 1;
+        else
+            pageCacheCapacity = 0;
+
+        // Object cache capacities (in bytes)
+        if (memorySize >= 2048)
+            cacheTotalCapacity = 96 * 1024 * 1024;
+        else if (memorySize >= 1536)
+            cacheTotalCapacity = 64 * 1024 * 1024;
+        else if (memorySize >= 1024)
+            cacheTotalCapacity = 32 * 1024 * 1024;
+        else if (memorySize >= 512)
+            cacheTotalCapacity = 16 * 1024 * 1024;
+
+        cacheMinDeadCapacity = cacheTotalCapacity / 8;
+        cacheMaxDeadCapacity = cacheTotalCapacity / 4;
+
+        // Foundation memory cache capacity (in bytes)
+        if (memorySize >= 2048)
+            urlCacheMemoryCapacity = 4 * 1024 * 1024;
+        else if (memorySize >= 1024)
+            urlCacheMemoryCapacity = 2 * 1024 * 1024;
+        else if (memorySize >= 512)
+            urlCacheMemoryCapacity = 1 * 1024 * 1024;
+        else
+            urlCacheMemoryCapacity =      512 * 1024; 
+
+        // Foundation disk cache capacity (in bytes)
+        if (diskFreeSize >= 16384)
+            urlCacheDiskCapacity = 50 * 1024 * 1024;
+        else if (diskFreeSize >= 8192)
+            urlCacheDiskCapacity = 40 * 1024 * 1024;
+        else if (diskFreeSize >= 4096)
+            urlCacheDiskCapacity = 30 * 1024 * 1024;
+        else
+            urlCacheDiskCapacity = 20 * 1024 * 1024;
+
+        break;
+    }
+    case CacheModelPrimaryWebBrowser: {
+        // Page cache capacity (in pages)
+        // (Research indicates that value / page drops substantially after 3 pages.)
+        if (memorySize >= 2048)
+            pageCacheCapacity = 5;
+        else if (memorySize >= 1024)
+            pageCacheCapacity = 4;
+        else if (memorySize >= 512)
+            pageCacheCapacity = 3;
+        else if (memorySize >= 256)
+            pageCacheCapacity = 2;
+        else
+            pageCacheCapacity = 1;
+
+        // Object cache capacities (in bytes)
+        // (Testing indicates that value / MB depends heavily on content and
+        // browsing pattern. Even growth above 128MB can have substantial 
+        // value / MB for some content / browsing patterns.)
+        if (memorySize >= 2048)
+            cacheTotalCapacity = 128 * 1024 * 1024;
+        else if (memorySize >= 1536)
+            cacheTotalCapacity = 96 * 1024 * 1024;
+        else if (memorySize >= 1024)
+            cacheTotalCapacity = 64 * 1024 * 1024;
+        else if (memorySize >= 512)
+            cacheTotalCapacity = 32 * 1024 * 1024;
+
+        cacheMinDeadCapacity = cacheTotalCapacity / 4;
+        cacheMaxDeadCapacity = cacheTotalCapacity / 2;
+
+        // This code is here to avoid a PLT regression. We can remove it if we
+        // can prove that the overall system gain would justify the regression.
+        cacheMaxDeadCapacity = std::max(24u, cacheMaxDeadCapacity);
+
+        deadDecodedDataDeletionInterval = 60;
+
+        // Foundation memory cache capacity (in bytes)
+        // (These values are small because WebCore does most caching itself.)
+        if (memorySize >= 1024)
+            urlCacheMemoryCapacity = 4 * 1024 * 1024;
+        else if (memorySize >= 512)
+            urlCacheMemoryCapacity = 2 * 1024 * 1024;
+        else if (memorySize >= 256)
+            urlCacheMemoryCapacity = 1 * 1024 * 1024;
+        else
+            urlCacheMemoryCapacity =      512 * 1024; 
+
+        // Foundation disk cache capacity (in bytes)
+        if (diskFreeSize >= 16384)
+            urlCacheDiskCapacity = 175 * 1024 * 1024;
+        else if (diskFreeSize >= 8192)
+            urlCacheDiskCapacity = 150 * 1024 * 1024;
+        else if (diskFreeSize >= 4096)
+            urlCacheDiskCapacity = 125 * 1024 * 1024;
+        else if (diskFreeSize >= 2048)
+            urlCacheDiskCapacity = 100 * 1024 * 1024;
+        else if (diskFreeSize >= 1024)
+            urlCacheDiskCapacity = 75 * 1024 * 1024;
+        else
+            urlCacheDiskCapacity = 50 * 1024 * 1024;
+
+        break;
+    }
+    default:
+        ASSERT_NOT_REACHED();
+    };
+}
+
 #if PLATFORM(WIN)
 void WebProcess::setShouldPaintNativeControls(bool shouldPaintNativeControls)
 {
diff --git a/WebKit2/WebProcess/WebProcess.h b/WebKit2/WebProcess/WebProcess.h
index e95ccd4..efccdfc 100644
--- a/WebKit2/WebProcess/WebProcess.h
+++ b/WebKit2/WebProcess/WebProcess.h
@@ -103,6 +103,9 @@ private:
 
     void setCacheModel(uint32_t);
     void platformSetCacheModel(CacheModel);
+    static void calculateCacheSizes(CacheModel cacheModel, uint64_t memorySize, uint64_t diskFreeSize,
+        unsigned& cacheTotalCapacity, unsigned& cacheMinDeadCapacity, unsigned& cacheMaxDeadCapacity, double& deadDecodedDataDeletionInterval,
+        unsigned& pageCacheCapacity, unsigned long& urlCacheMemoryCapacity, unsigned long& urlCacheDiskCapacity);
 
     // CoreIPC::Connection::Client
     void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
diff --git a/WebKit2/WebProcess/mac/WebProcessMac.mm b/WebKit2/WebProcess/mac/WebProcessMac.mm
index 119d242..d117f1f 100644
--- a/WebKit2/WebProcess/mac/WebProcessMac.mm
+++ b/WebKit2/WebProcess/mac/WebProcessMac.mm
@@ -57,7 +57,7 @@ static uint64_t memorySize()
     return hostInfo.max_mem;
 }
 
-static unsigned long long volumeFreeSize(NSString *path)
+static uint64_t volumeFreeSize(NSString *path)
 {
     NSDictionary *fileSystemAttributesDictionary = [[NSFileManager defaultManager] attributesOfFileSystemForPath:path error:NULL];
     return [[fileSystemAttributesDictionary objectForKey:NSFileSystemFreeSize] unsignedLongLongValue];
@@ -72,166 +72,28 @@ void WebProcess::platformSetCacheModel(CacheModel cacheModel)
     // As a fudge factor, use 1000 instead of 1024, in case the reported byte 
     // count doesn't align exactly to a megabyte boundary.
     uint64_t memSize = memorySize() / 1024 / 1000;
-    unsigned long long diskFreeSize = volumeFreeSize(nsurlCacheDirectory.get()) / 1024 / 1000;
-    NSURLCache *nsurlCache = [NSURLCache sharedURLCache];
+    uint64_t diskFreeSize = volumeFreeSize(nsurlCacheDirectory.get()) / 1024 / 1000;
 
     unsigned cacheTotalCapacity = 0;
     unsigned cacheMinDeadCapacity = 0;
     unsigned cacheMaxDeadCapacity = 0;
     double deadDecodedDataDeletionInterval = 0;
-
     unsigned pageCacheCapacity = 0;
+    unsigned long urlCacheMemoryCapacity = 0;
+    unsigned long urlCacheDiskCapacity = 0;
+
+    calculateCacheSizes(cacheModel, memSize, diskFreeSize,
+        cacheTotalCapacity, cacheMinDeadCapacity, cacheMaxDeadCapacity, deadDecodedDataDeletionInterval,
+        pageCacheCapacity, urlCacheMemoryCapacity, urlCacheDiskCapacity);
 
-    NSUInteger nsurlCacheMemoryCapacity = 0;
-    NSUInteger nsurlCacheDiskCapacity = 0;
-
-    switch (cacheModel) {
-    case CacheModelDocumentViewer: {
-        // Page cache capacity (in pages)
-        pageCacheCapacity = 0;
-
-        // Object cache capacities (in bytes)
-        if (memSize >= 2048)
-            cacheTotalCapacity = 96 * 1024 * 1024;
-        else if (memSize >= 1536)
-            cacheTotalCapacity = 64 * 1024 * 1024;
-        else if (memSize >= 1024)
-            cacheTotalCapacity = 32 * 1024 * 1024;
-        else if (memSize >= 512)
-            cacheTotalCapacity = 16 * 1024 * 1024;
-
-        cacheMinDeadCapacity = 0;
-        cacheMaxDeadCapacity = 0;
-
-        // Foundation memory cache capacity (in bytes)
-        nsurlCacheMemoryCapacity = 0;
-
-        // Foundation disk cache capacity (in bytes)
-        nsurlCacheDiskCapacity = [nsurlCache diskCapacity];
-
-        break;
-    }
-    case CacheModelDocumentBrowser: {
-        // Page cache capacity (in pages)
-        if (memSize >= 1024)
-            pageCacheCapacity = 3;
-        else if (memSize >= 512)
-            pageCacheCapacity = 2;
-        else if (memSize >= 256)
-            pageCacheCapacity = 1;
-        else
-            pageCacheCapacity = 0;
-
-        // Object cache capacities (in bytes)
-        if (memSize >= 2048)
-            cacheTotalCapacity = 96 * 1024 * 1024;
-        else if (memSize >= 1536)
-            cacheTotalCapacity = 64 * 1024 * 1024;
-        else if (memSize >= 1024)
-            cacheTotalCapacity = 32 * 1024 * 1024;
-        else if (memSize >= 512)
-            cacheTotalCapacity = 16 * 1024 * 1024;
-
-        cacheMinDeadCapacity = cacheTotalCapacity / 8;
-        cacheMaxDeadCapacity = cacheTotalCapacity / 4;
-
-        // Foundation memory cache capacity (in bytes)
-        if (memSize >= 2048)
-            nsurlCacheMemoryCapacity = 4 * 1024 * 1024;
-        else if (memSize >= 1024)
-            nsurlCacheMemoryCapacity = 2 * 1024 * 1024;
-        else if (memSize >= 512)
-            nsurlCacheMemoryCapacity = 1 * 1024 * 1024;
-        else
-            nsurlCacheMemoryCapacity =      512 * 1024; 
-
-        // Foundation disk cache capacity (in bytes)
-        if (diskFreeSize >= 16384)
-            nsurlCacheDiskCapacity = 50 * 1024 * 1024;
-        else if (diskFreeSize >= 8192)
-            nsurlCacheDiskCapacity = 40 * 1024 * 1024;
-        else if (diskFreeSize >= 4096)
-            nsurlCacheDiskCapacity = 30 * 1024 * 1024;
-        else
-            nsurlCacheDiskCapacity = 20 * 1024 * 1024;
-
-        break;
-    }
-    case CacheModelPrimaryWebBrowser: {
-        // Page cache capacity (in pages)
-        // (Research indicates that value / page drops substantially after 3 pages.)
-        if (memSize >= 2048)
-            pageCacheCapacity = 5;
-        else if (memSize >= 1024)
-            pageCacheCapacity = 4;
-        else if (memSize >= 512)
-            pageCacheCapacity = 3;
-        else if (memSize >= 256)
-            pageCacheCapacity = 2;
-        else
-            pageCacheCapacity = 1;
-
-        // Object cache capacities (in bytes)
-        // (Testing indicates that value / MB depends heavily on content and
-        // browsing pattern. Even growth above 128MB can have substantial 
-        // value / MB for some content / browsing patterns.)
-        if (memSize >= 2048)
-            cacheTotalCapacity = 128 * 1024 * 1024;
-        else if (memSize >= 1536)
-            cacheTotalCapacity = 96 * 1024 * 1024;
-        else if (memSize >= 1024)
-            cacheTotalCapacity = 64 * 1024 * 1024;
-        else if (memSize >= 512)
-            cacheTotalCapacity = 32 * 1024 * 1024;
-
-        cacheMinDeadCapacity = cacheTotalCapacity / 4;
-        cacheMaxDeadCapacity = cacheTotalCapacity / 2;
-
-        // This code is here to avoid a PLT regression. We can remove it if we
-        // can prove that the overall system gain would justify the regression.
-        cacheMaxDeadCapacity = max(24u, cacheMaxDeadCapacity);
-
-        deadDecodedDataDeletionInterval = 60;
-
-        // Foundation memory cache capacity (in bytes)
-        // (These values are small because WebCore does most caching itself.)
-        if (memSize >= 1024)
-            nsurlCacheMemoryCapacity = 4 * 1024 * 1024;
-        else if (memSize >= 512)
-            nsurlCacheMemoryCapacity = 2 * 1024 * 1024;
-        else if (memSize >= 256)
-            nsurlCacheMemoryCapacity = 1 * 1024 * 1024;
-        else
-            nsurlCacheMemoryCapacity =      512 * 1024; 
-
-        // Foundation disk cache capacity (in bytes)
-        if (diskFreeSize >= 16384)
-            nsurlCacheDiskCapacity = 175 * 1024 * 1024;
-        else if (diskFreeSize >= 8192)
-            nsurlCacheDiskCapacity = 150 * 1024 * 1024;
-        else if (diskFreeSize >= 4096)
-            nsurlCacheDiskCapacity = 125 * 1024 * 1024;
-        else if (diskFreeSize >= 2048)
-            nsurlCacheDiskCapacity = 100 * 1024 * 1024;
-        else if (diskFreeSize >= 1024)
-            nsurlCacheDiskCapacity = 75 * 1024 * 1024;
-        else
-            nsurlCacheDiskCapacity = 50 * 1024 * 1024;
-
-        break;
-    }
-    default:
-        ASSERT_NOT_REACHED();
-    };
-
-    // Don't shrink a big disk cache, since that would cause churn.
-    nsurlCacheDiskCapacity = max(nsurlCacheDiskCapacity, [nsurlCache diskCapacity]);
 
     cache()->setCapacities(cacheMinDeadCapacity, cacheMaxDeadCapacity, cacheTotalCapacity);
     cache()->setDeadDecodedDataDeletionInterval(deadDecodedDataDeletionInterval);
     pageCache()->setCapacity(pageCacheCapacity);
-    [nsurlCache setMemoryCapacity:nsurlCacheMemoryCapacity];
-    [nsurlCache setDiskCapacity:nsurlCacheDiskCapacity];
+
+    NSURLCache *nsurlCache = [NSURLCache sharedURLCache];
+    [nsurlCache setMemoryCapacity:urlCacheMemoryCapacity];
+    [nsurlCache setDiskCapacity:max(urlCacheDiskCapacity, [nsurlCache diskCapacity])]; // Don't shrink a big disk cache, since that would cause churn.
 }
 
 } // namespace WebKit
diff --git a/WebKit2/WebProcess/win/WebProcessWin.cpp b/WebKit2/WebProcess/win/WebProcessWin.cpp
index 556a267..1ff1d1f 100644
--- a/WebKit2/WebProcess/win/WebProcessWin.cpp
+++ b/WebKit2/WebProcess/win/WebProcessWin.cpp
@@ -38,12 +38,12 @@
 #include <wtf/RetainPtr.h>
 #endif
 
-using namespace std;
 using namespace WebCore;
+using namespace std;
 
 namespace WebKit {
 
-static unsigned long long memorySize()
+static uint64_t memorySize()
 {
     MEMORYSTATUSEX statex;
     statex.dwLength = sizeof(statex);
@@ -51,188 +51,47 @@ static unsigned long long memorySize()
     return statex.ullTotalPhys;
 }
 
-static unsigned long long volumeFreeSize(CFStringRef cfstringPath)
+static uint64_t volumeFreeSize(CFStringRef cfstringPath)
 {
     WTF::String path(cfstringPath);
     ULARGE_INTEGER freeBytesToCaller;
     BOOL result = GetDiskFreeSpaceExW((LPCWSTR)path.charactersWithNullTermination(), &freeBytesToCaller, 0, 0);
     if (!result)
         return 0;
-
     return freeBytesToCaller.QuadPart;
 }
 
 void WebProcess::platformSetCacheModel(CacheModel cacheModel)
 {
 #if USE(CFNETWORK)
-    RetainPtr<CFURLCacheRef> cfurlCache(AdoptCF, CFURLCacheCopySharedURLCache());
     RetainPtr<CFStringRef> cfurlCacheDirectory(AdoptCF, wkCopyFoundationCacheDirectory());
     if (!cfurlCacheDirectory)
         cfurlCacheDirectory.adoptCF(WebCore::localUserSpecificStorageDirectory().createCFString());
 
     // As a fudge factor, use 1000 instead of 1024, in case the reported byte 
     // count doesn't align exactly to a megabyte boundary.
-    unsigned long long memSize = memorySize() / 1024 / 1000;
-    unsigned long long diskFreeSize = volumeFreeSize(cfurlCacheDirectory.get()) / 1024 / 1000;
+    uint64_t memSize = memorySize() / 1024 / 1000;
+    uint64_t diskFreeSize = volumeFreeSize(cfurlCacheDirectory.get()) / 1024 / 1000;
 
     unsigned cacheTotalCapacity = 0;
     unsigned cacheMinDeadCapacity = 0;
     unsigned cacheMaxDeadCapacity = 0;
     double deadDecodedDataDeletionInterval = 0;
-
     unsigned pageCacheCapacity = 0;
+    unsigned long urlCacheMemoryCapacity = 0;
+    unsigned long urlCacheDiskCapacity = 0;
 
-    CFIndex cfurlCacheMemoryCapacity = 0;
-    CFIndex cfurlCacheDiskCapacity = 0;
-
-    switch (cacheModel) {
-    case CacheModelDocumentViewer: {
-        // Page cache capacity (in pages)
-        pageCacheCapacity = 0;
-
-        // Object cache capacities (in bytes)
-        if (memSize >= 2048)
-            cacheTotalCapacity = 96 * 1024 * 1024;
-        else if (memSize >= 1536)
-            cacheTotalCapacity = 64 * 1024 * 1024;
-        else if (memSize >= 1024)
-            cacheTotalCapacity = 32 * 1024 * 1024;
-        else if (memSize >= 512)
-            cacheTotalCapacity = 16 * 1024 * 1024; 
-
-        cacheMinDeadCapacity = 0;
-        cacheMaxDeadCapacity = 0;
-
-        // Foundation memory cache capacity (in bytes)
-        cfurlCacheMemoryCapacity = 0;
-
-        // Foundation disk cache capacity (in bytes)
-        cfurlCacheDiskCapacity = CFURLCacheDiskCapacity(cfurlCache.get());
-
-        break;
-    }
-    case CacheModelDocumentBrowser: {
-        // Page cache capacity (in pages)
-        if (memSize >= 1024)
-            pageCacheCapacity = 3;
-        else if (memSize >= 512)
-            pageCacheCapacity = 2;
-        else if (memSize >= 256)
-            pageCacheCapacity = 1;
-        else
-            pageCacheCapacity = 0;
-
-        // Object cache capacities (in bytes)
-        if (memSize >= 2048)
-            cacheTotalCapacity = 96 * 1024 * 1024;
-        else if (memSize >= 1536)
-            cacheTotalCapacity = 64 * 1024 * 1024;
-        else if (memSize >= 1024)
-            cacheTotalCapacity = 32 * 1024 * 1024;
-        else if (memSize >= 512)
-            cacheTotalCapacity = 16 * 1024 * 1024; 
-
-        cacheMinDeadCapacity = cacheTotalCapacity / 8;
-        cacheMaxDeadCapacity = cacheTotalCapacity / 4;
-
-        // Foundation memory cache capacity (in bytes)
-        if (memSize >= 2048)
-            cfurlCacheMemoryCapacity = 4 * 1024 * 1024;
-        else if (memSize >= 1024)
-            cfurlCacheMemoryCapacity = 2 * 1024 * 1024;
-        else if (memSize >= 512)
-            cfurlCacheMemoryCapacity = 1 * 1024 * 1024;
-        else
-            cfurlCacheMemoryCapacity =      512 * 1024; 
-
-        // Foundation disk cache capacity (in bytes)
-        if (diskFreeSize >= 16384)
-            cfurlCacheDiskCapacity = 50 * 1024 * 1024;
-        else if (diskFreeSize >= 8192)
-            cfurlCacheDiskCapacity = 40 * 1024 * 1024;
-        else if (diskFreeSize >= 4096)
-            cfurlCacheDiskCapacity = 30 * 1024 * 1024;
-        else
-            cfurlCacheDiskCapacity = 20 * 1024 * 1024;
-
-        break;
-    }
-    case CacheModelPrimaryWebBrowser: {
-        // Page cache capacity (in pages)
-        // (Research indicates that value / page drops substantially after 3 pages.)
-        if (memSize >= 2048)
-            pageCacheCapacity = 5;
-        else if (memSize >= 1024)
-            pageCacheCapacity = 4;
-        else if (memSize >= 512)
-            pageCacheCapacity = 3;
-        else if (memSize >= 256)
-            pageCacheCapacity = 2;
-        else
-            pageCacheCapacity = 1;
-
-        // Object cache capacities (in bytes)
-        // (Testing indicates that value / MB depends heavily on content and
-        // browsing pattern. Even growth above 128MB can have substantial 
-        // value / MB for some content / browsing patterns.)
-        if (memSize >= 2048)
-            cacheTotalCapacity = 128 * 1024 * 1024;
-        else if (memSize >= 1536)
-            cacheTotalCapacity = 96 * 1024 * 1024;
-        else if (memSize >= 1024)
-            cacheTotalCapacity = 64 * 1024 * 1024;
-        else if (memSize >= 512)
-            cacheTotalCapacity = 32 * 1024 * 1024; 
-
-        cacheMinDeadCapacity = cacheTotalCapacity / 4;
-        cacheMaxDeadCapacity = cacheTotalCapacity / 2;
-
-        // This code is here to avoid a PLT regression. We can remove it if we
-        // can prove that the overall system gain would justify the regression.
-        cacheMaxDeadCapacity = max(24u, cacheMaxDeadCapacity);
-
-        deadDecodedDataDeletionInterval = 60;
-
-        // Foundation memory cache capacity (in bytes)
-        // (These values are small because WebCore does most caching itself.)
-        if (memSize >= 1024)
-            cfurlCacheMemoryCapacity = 4 * 1024 * 1024;
-        else if (memSize >= 512)
-            cfurlCacheMemoryCapacity = 2 * 1024 * 1024;
-        else if (memSize >= 256)
-            cfurlCacheMemoryCapacity = 1 * 1024 * 1024;
-        else
-            cfurlCacheMemoryCapacity =      512 * 1024; 
-
-        // Foundation disk cache capacity (in bytes)
-        if (diskFreeSize >= 16384)
-            cfurlCacheDiskCapacity = 175 * 1024 * 1024;
-        else if (diskFreeSize >= 8192)
-            cfurlCacheDiskCapacity = 150 * 1024 * 1024;
-        else if (diskFreeSize >= 4096)
-            cfurlCacheDiskCapacity = 125 * 1024 * 1024;
-        else if (diskFreeSize >= 2048)
-            cfurlCacheDiskCapacity = 100 * 1024 * 1024;
-        else if (diskFreeSize >= 1024)
-            cfurlCacheDiskCapacity = 75 * 1024 * 1024;
-        else
-            cfurlCacheDiskCapacity = 50 * 1024 * 1024;
-
-        break;
-    }
-    default:
-        ASSERT_NOT_REACHED();
-    }
-
-    // Don't shrink a big disk cache, since that would cause churn.
-    cfurlCacheDiskCapacity = max(cfurlCacheDiskCapacity, CFURLCacheDiskCapacity(cfurlCache.get()));
+    calculateCacheSizes(cacheModel, memSize, diskFreeSize,
+        cacheTotalCapacity, cacheMinDeadCapacity, cacheMaxDeadCapacity, deadDecodedDataDeletionInterval,
+        pageCacheCapacity, urlCacheMemoryCapacity, urlCacheDiskCapacity);
 
     cache()->setCapacities(cacheMinDeadCapacity, cacheMaxDeadCapacity, cacheTotalCapacity);
     cache()->setDeadDecodedDataDeletionInterval(deadDecodedDataDeletionInterval);
     pageCache()->setCapacity(pageCacheCapacity);
 
-    CFURLCacheSetMemoryCapacity(cfurlCache.get(), cfurlCacheMemoryCapacity);
-    CFURLCacheSetDiskCapacity(cfurlCache.get(), cfurlCacheDiskCapacity);
+    RetainPtr<CFURLCacheRef> cfurlCache(AdoptCF, CFURLCacheCopySharedURLCache());
+    CFURLCacheSetMemoryCapacity(cfurlCache.get(), urlCacheMemoryCapacity);
+    CFURLCacheSetDiskCapacity(cfurlCache.get(), max(urlCacheDiskCapacity, CFURLCacheDiskCapacity(cfurlCache.get()))); // Don't shrink a big disk cache, since that would cause churn.
 #endif
 }
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list