void CacheStorageService::MemoryPool::PurgeOverMemoryLimit() { #ifdef PR_LOGGING TimeStamp start(TimeStamp::Now()); #endif uint32_t const memoryLimit = Limit(); if (mMemorySize > memoryLimit) { LOG((" memory data consumption over the limit, abandon expired entries")); PurgeExpired(); } bool frecencyNeedsSort = true; // No longer makes sense since: // Memory entries are never purged partially, only as a whole when the memory // cache limit is overreached. // Disk entries throw the data away ASAP so that only metadata are kept. // TODO when this concept of two separate pools is found working, the code should // clean up. #if 0 if (mMemorySize > memoryLimit) { LOG((" memory data consumption over the limit, abandon disk backed data")); PurgeByFrecency(frecencyNeedsSort, CacheEntry::PURGE_DATA_ONLY_DISK_BACKED); } if (mMemorySize > memoryLimit) { LOG((" metadata consumtion over the limit, abandon disk backed entries")); PurgeByFrecency(frecencyNeedsSort, CacheEntry::PURGE_WHOLE_ONLY_DISK_BACKED); } #endif if (mMemorySize > memoryLimit) { LOG((" memory data consumption over the limit, abandon any entry")); PurgeByFrecency(frecencyNeedsSort, CacheEntry::PURGE_WHOLE); } LOG((" purging took %1.2fms", (TimeStamp::Now() - start).ToMilliseconds())); }
void CacheStorageService::PurgeOverMemoryLimit() { MOZ_ASSERT(IsOnManagementThread()); LOG(("CacheStorageService::PurgeOverMemoryLimit")); #ifdef MOZ_LOGGING TimeStamp start(TimeStamp::Now()); #endif uint32_t const memoryLimit = CacheObserver::MemoryLimit(); if (mMemorySize > memoryLimit) { LOG((" memory data consumption over the limit, abandon expired entries")); PurgeExpired(); } bool frecencyNeedsSort = true; if (mMemorySize > memoryLimit) { LOG((" memory data consumption over the limit, abandon disk backed data")); PurgeByFrecency(frecencyNeedsSort, CacheEntry::PURGE_DATA_ONLY_DISK_BACKED); } if (mMemorySize > memoryLimit) { LOG((" metadata consumtion over the limit, abandon disk backed entries")); PurgeByFrecency(frecencyNeedsSort, CacheEntry::PURGE_WHOLE_ONLY_DISK_BACKED); } if (mMemorySize > memoryLimit) { LOG((" memory data consumption over the limit, abandon any entry")); PurgeByFrecency(frecencyNeedsSort, CacheEntry::PURGE_WHOLE); } LOG((" purging took %1.2fms", (TimeStamp::Now() - start).ToMilliseconds())); mPurging = false; }