#include "config.h"
#include "CacheModel.h"
#include <algorithm>
namespace WebKit {
void calculateCacheSizes(CacheModel cacheModel, uint64_t memorySize, uint64_t diskFreeSize,
unsigned& cacheTotalCapacity, unsigned& cacheMinDeadCapacity, unsigned& cacheMaxDeadCapacity, std::chrono::seconds& deadDecodedDataDeletionInterval,
unsigned& pageCacheCapacity, unsigned long& urlCacheMemoryCapacity, unsigned long& urlCacheDiskCapacity)
{
switch (cacheModel) {
case CacheModelDocumentViewer: {
pageCacheCapacity = 0;
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;
urlCacheMemoryCapacity = 0;
urlCacheDiskCapacity = 0;
break;
}
case CacheModelDocumentBrowser: {
if (memorySize >= 1024)
pageCacheCapacity = 3;
else if (memorySize >= 512)
pageCacheCapacity = 2;
else if (memorySize >= 256)
pageCacheCapacity = 1;
else
pageCacheCapacity = 0;
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;
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;
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: {
if (memorySize >= 1024)
pageCacheCapacity = 3;
else if (memorySize >= 512)
pageCacheCapacity = 2;
else if (memorySize >= 256)
pageCacheCapacity = 1;
else
pageCacheCapacity = 0;
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;
cacheMaxDeadCapacity = std::max(24u, cacheMaxDeadCapacity);
deadDecodedDataDeletionInterval = std::chrono::seconds { 60 };
#if PLATFORM(IOS)
if (memorySize >= 1024)
urlCacheMemoryCapacity = 16 * 1024 * 1024;
else
urlCacheMemoryCapacity = 8 * 1024 * 1024;
#else
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;
#endif
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();
};
}
}