#include "config.h"
#include "CacheModel.h"
#include <algorithm>
#include <wtf/RAMSize.h>
#include <wtf/Seconds.h>
#include <wtf/StdLibExtras.h>
namespace WebKit {
void calculateMemoryCacheSizes(CacheModel cacheModel, unsigned& cacheTotalCapacity, unsigned& cacheMinDeadCapacity, unsigned& cacheMaxDeadCapacity, Seconds& deadDecodedDataDeletionInterval, unsigned& backForwardCacheCapacity)
{
uint64_t memorySize = ramSize() / MB;
switch (cacheModel) {
case CacheModel::DocumentViewer: {
backForwardCacheCapacity = 0;
if (memorySize >= 2048)
cacheTotalCapacity = 96 * MB;
else if (memorySize >= 1536)
cacheTotalCapacity = 64 * MB;
else if (memorySize >= 1024)
cacheTotalCapacity = 32 * MB;
else if (memorySize >= 512)
cacheTotalCapacity = 16 * MB;
else
cacheTotalCapacity = 8 * MB;
cacheMinDeadCapacity = 0;
cacheMaxDeadCapacity = 0;
break;
}
case CacheModel::DocumentBrowser: {
if (memorySize >= 512)
backForwardCacheCapacity = 2;
else if (memorySize >= 256)
backForwardCacheCapacity = 1;
else
backForwardCacheCapacity = 0;
if (memorySize >= 2048)
cacheTotalCapacity = 96 * MB;
else if (memorySize >= 1536)
cacheTotalCapacity = 64 * MB;
else if (memorySize >= 1024)
cacheTotalCapacity = 32 * MB;
else if (memorySize >= 512)
cacheTotalCapacity = 16 * MB;
else
cacheTotalCapacity = 8 * MB;
cacheMinDeadCapacity = cacheTotalCapacity / 8;
cacheMaxDeadCapacity = cacheTotalCapacity / 4;
break;
}
case CacheModel::PrimaryWebBrowser: {
if (memorySize >= 512)
backForwardCacheCapacity = 2;
else if (memorySize >= 256)
backForwardCacheCapacity = 1;
else
backForwardCacheCapacity = 0;
if (memorySize >= 2048)
cacheTotalCapacity = 128 * MB;
else if (memorySize >= 1536)
cacheTotalCapacity = 96 * MB;
else if (memorySize >= 1024)
cacheTotalCapacity = 64 * MB;
else if (memorySize >= 512)
cacheTotalCapacity = 32 * MB;
else
cacheTotalCapacity = 16 * MB;
cacheMinDeadCapacity = cacheTotalCapacity / 4;
cacheMaxDeadCapacity = cacheTotalCapacity / 2;
cacheMaxDeadCapacity = std::max(24u, cacheMaxDeadCapacity);
deadDecodedDataDeletionInterval = 60_s;
break;
}
default:
ASSERT_NOT_REACHED();
};
}
void calculateURLCacheSizes(CacheModel cacheModel, uint64_t diskFreeSize, unsigned& urlCacheMemoryCapacity, uint64_t& urlCacheDiskCapacity)
{
switch (cacheModel) {
case CacheModel::DocumentViewer: {
urlCacheMemoryCapacity = 0;
urlCacheDiskCapacity = 0;
break;
}
case CacheModel::DocumentBrowser: {
uint64_t memorySize = ramSize() / MB;
if (memorySize >= 2048)
urlCacheMemoryCapacity = 4 * MB;
else if (memorySize >= 1024)
urlCacheMemoryCapacity = 2 * MB;
else if (memorySize >= 512)
urlCacheMemoryCapacity = 1 * MB;
else
urlCacheMemoryCapacity = 512 * KB;
if (diskFreeSize >= 16384)
urlCacheDiskCapacity = 75 * MB;
else if (diskFreeSize >= 8192)
urlCacheDiskCapacity = 40 * MB;
else if (diskFreeSize >= 4096)
urlCacheDiskCapacity = 30 * MB;
else
urlCacheDiskCapacity = 20 * MB;
break;
}
case CacheModel::PrimaryWebBrowser: {
uint64_t memorySize = ramSize() / MB;
#if PLATFORM(IOS_FAMILY)
if (memorySize >= 1024)
urlCacheMemoryCapacity = 16 * MB;
else
urlCacheMemoryCapacity = 8 * MB;
#else
if (memorySize >= 1024)
urlCacheMemoryCapacity = 4 * MB;
else if (memorySize >= 512)
urlCacheMemoryCapacity = 2 * MB;
else if (memorySize >= 256)
urlCacheMemoryCapacity = 1 * MB;
else
urlCacheMemoryCapacity = 512 * KB;
#endif
if (diskFreeSize >= 16384)
urlCacheDiskCapacity = 1 * GB;
else if (diskFreeSize >= 8192)
urlCacheDiskCapacity = 500 * MB;
else if (diskFreeSize >= 4096)
urlCacheDiskCapacity = 250 * MB;
else if (diskFreeSize >= 2048)
urlCacheDiskCapacity = 200 * MB;
else if (diskFreeSize >= 1024)
urlCacheDiskCapacity = 150 * MB;
else
urlCacheDiskCapacity = 100 * MB;
break;
}
default:
ASSERT_NOT_REACHED();
};
}
}