void CacheStorageService::MemoryPool::PurgeExpired() { MOZ_ASSERT(IsOnManagementThread()); mExpirationArray.Sort(ExpirationComparator()); uint32_t now = NowInSeconds(); uint32_t const memoryLimit = Limit(); for (uint32_t i = 0; mMemorySize > memoryLimit && i < mExpirationArray.Length();) { if (CacheIOThread::YieldAndRerun()) return; nsRefPtr<CacheEntry> entry = mExpirationArray[i]; uint32_t expirationTime = entry->GetExpirationTime(); if (expirationTime > 0 && expirationTime <= now) { LOG((" dooming expired entry=%p, exptime=%u (now=%u)", entry.get(), entry->GetExpirationTime(), now)); entry->PurgeAndDoom(); continue; } // not purged, move to the next one ++i; } }
void CacheStorageService::RegisterEntry(CacheEntry* aEntry) { MOZ_ASSERT(IsOnManagementThread()); if (mShutdown || !aEntry->CanRegister()) return; LOG(("CacheStorageService::RegisterEntry [entry=%p]", aEntry)); mFrecencyArray.InsertElementSorted(aEntry, FrecencyComparator()); mExpirationArray.InsertElementSorted(aEntry, ExpirationComparator()); aEntry->SetRegistered(true); }