void CacheStorageService::MemoryPool::PurgeByFrecency(bool &aFrecencyNeedsSort, uint32_t aWhat) { MOZ_ASSERT(IsOnManagementThread()); if (aFrecencyNeedsSort) { mFrecencyArray.Sort(FrecencyComparator()); aFrecencyNeedsSort = false; } uint32_t const memoryLimit = Limit(); for (uint32_t i = 0; mMemorySize > memoryLimit && i < mFrecencyArray.Length();) { if (CacheIOThread::YieldAndRerun()) return; nsRefPtr<CacheEntry> entry = mFrecencyArray[i]; if (entry->Purge(aWhat)) { LOG((" abandoned (%d), entry=%p, frecency=%1.10f", aWhat, entry.get(), entry->GetFrecency())); 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); }