Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1113)

Unified Diff: net/disk_cache/v3/eviction_v3.cc

Issue 14991008: Disk cache: Add base files for implementation of file format version 3. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: rebase Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/disk_cache/v3/eviction_v3.h ('k') | net/disk_cache/v3/sparse_control_v3.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/disk_cache/v3/eviction_v3.cc
===================================================================
--- net/disk_cache/v3/eviction_v3.cc (revision 0)
+++ net/disk_cache/v3/eviction_v3.cc (working copy)
@@ -161,40 +161,56 @@
return;
}
-void Eviction::UpdateRank(EntryImpl* entry, bool modified) {
- if (new_eviction_)
- return UpdateRankV2(entry, modified);
+void Eviction::OnOpenEntryV2(EntryImpl* entry) {
+ EntryStore* info = entry->entry()->Data();
+ DCHECK_EQ(ENTRY_NORMAL, info->state);
- rankings_->UpdateRank(entry->rankings(), modified, GetListForEntry(entry));
-}
+ if (info->reuse_count < kint32max) {
+ info->reuse_count++;
+ entry->entry()->set_modified();
-void Eviction::OnOpenEntry(EntryImpl* entry) {
- if (new_eviction_)
- return OnOpenEntryV2(entry);
+ // We may need to move this to a new list.
+ if (1 == info->reuse_count) {
+ rankings_->Remove(entry->rankings(), Rankings::NO_USE, true);
+ rankings_->Insert(entry->rankings(), false, Rankings::LOW_USE);
+ entry->entry()->Store();
+ } else if (kHighUse == info->reuse_count) {
+ rankings_->Remove(entry->rankings(), Rankings::LOW_USE, true);
+ rankings_->Insert(entry->rankings(), false, Rankings::HIGH_USE);
+ entry->entry()->Store();
+ }
+ }
}
-void Eviction::OnCreateEntry(EntryImpl* entry) {
- if (new_eviction_)
- return OnCreateEntryV2(entry);
+void Eviction::OnCreateEntryV2(EntryImpl* entry) {
+ EntryStore* info = entry->entry()->Data();
+ switch (info->state) {
+ case ENTRY_NORMAL: {
+ DCHECK(!info->reuse_count);
+ DCHECK(!info->refetch_count);
+ break;
+ };
+ case ENTRY_EVICTED: {
+ if (info->refetch_count < kint32max)
+ info->refetch_count++;
- rankings_->Insert(entry->rankings(), true, GetListForEntry(entry));
-}
+ if (info->refetch_count > kHighUse && info->reuse_count < kHighUse) {
+ info->reuse_count = kHighUse;
+ } else {
+ info->reuse_count++;
+ }
+ info->state = ENTRY_NORMAL;
+ entry->entry()->Store();
+ rankings_->Remove(entry->rankings(), Rankings::DELETED, true);
+ break;
+ };
+ default:
+ NOTREACHED();
+ }
-void Eviction::OnDoomEntry(EntryImpl* entry) {
- if (new_eviction_)
- return OnDoomEntryV2(entry);
-
- if (entry->LeaveRankingsBehind())
- return;
-
- rankings_->Remove(entry->rankings(), GetListForEntry(entry), true);
+ rankings_->Insert(entry->rankings(), true, GetListForEntryV2(entry));
}
-void Eviction::OnDestroyEntry(EntryImpl* entry) {
- if (new_eviction_)
- return OnDestroyEntryV2(entry);
-}
-
void Eviction::SetTestMode() {
test_mode_ = true;
}
@@ -204,6 +220,8 @@
TrimDeleted(empty);
}
+// -----------------------------------------------------------------------
+
void Eviction::PostDelayedTrim() {
// Prevent posting multiple tasks.
if (delay_trim_)
@@ -246,38 +264,6 @@
return (!test_mode_ && header_->lru.sizes[Rankings::DELETED] > max_length);
}
-void Eviction::ReportTrimTimes(EntryImpl* entry) {
- if (first_trim_) {
- first_trim_ = false;
- if (backend_->ShouldReportAgain()) {
- CACHE_UMA(AGE, "TrimAge", 0, entry->GetLastUsed());
- ReportListStats();
- }
-
- if (header_->lru.filled)
- return;
-
- header_->lru.filled = 1;
-
- if (header_->create_time) {
- // This is the first entry that we have to evict, generate some noise.
- backend_->FirstEviction();
- } else {
- // This is an old file, but we may want more reports from this user so
- // lets save some create_time.
- Time::Exploded old = {0};
- old.year = 2009;
- old.month = 3;
- old.day_of_month = 1;
- header_->create_time = Time::FromLocalExploded(old).ToInternalValue();
- }
- }
-}
-
-Rankings::List Eviction::GetListForEntry(EntryImpl* entry) {
- return Rankings::NO_USE;
-}
-
bool Eviction::EvictEntry(CacheRankingsBlock* node, bool empty,
Rankings::List list) {
EntryImpl* entry = backend_->GetEnumeratedEntry(node, list);
@@ -307,8 +293,6 @@
return true;
}
-// -----------------------------------------------------------------------
-
void Eviction::TrimCacheV2(bool empty) {
Trace("*** Trim Cache ***");
trimming_ = true;
@@ -393,98 +377,6 @@
return;
}
-void Eviction::UpdateRankV2(EntryImpl* entry, bool modified) {
- rankings_->UpdateRank(entry->rankings(), modified, GetListForEntryV2(entry));
-}
-
-void Eviction::OnOpenEntryV2(EntryImpl* entry) {
- EntryStore* info = entry->entry()->Data();
- DCHECK_EQ(ENTRY_NORMAL, info->state);
-
- if (info->reuse_count < kint32max) {
- info->reuse_count++;
- entry->entry()->set_modified();
-
- // We may need to move this to a new list.
- if (1 == info->reuse_count) {
- rankings_->Remove(entry->rankings(), Rankings::NO_USE, true);
- rankings_->Insert(entry->rankings(), false, Rankings::LOW_USE);
- entry->entry()->Store();
- } else if (kHighUse == info->reuse_count) {
- rankings_->Remove(entry->rankings(), Rankings::LOW_USE, true);
- rankings_->Insert(entry->rankings(), false, Rankings::HIGH_USE);
- entry->entry()->Store();
- }
- }
-}
-
-void Eviction::OnCreateEntryV2(EntryImpl* entry) {
- EntryStore* info = entry->entry()->Data();
- switch (info->state) {
- case ENTRY_NORMAL: {
- DCHECK(!info->reuse_count);
- DCHECK(!info->refetch_count);
- break;
- };
- case ENTRY_EVICTED: {
- if (info->refetch_count < kint32max)
- info->refetch_count++;
-
- if (info->refetch_count > kHighUse && info->reuse_count < kHighUse) {
- info->reuse_count = kHighUse;
- } else {
- info->reuse_count++;
- }
- info->state = ENTRY_NORMAL;
- entry->entry()->Store();
- rankings_->Remove(entry->rankings(), Rankings::DELETED, true);
- break;
- };
- default:
- NOTREACHED();
- }
-
- rankings_->Insert(entry->rankings(), true, GetListForEntryV2(entry));
-}
-
-void Eviction::OnDoomEntryV2(EntryImpl* entry) {
- EntryStore* info = entry->entry()->Data();
- if (ENTRY_NORMAL != info->state)
- return;
-
- if (entry->LeaveRankingsBehind()) {
- info->state = ENTRY_DOOMED;
- entry->entry()->Store();
- return;
- }
-
- rankings_->Remove(entry->rankings(), GetListForEntryV2(entry), true);
-
- info->state = ENTRY_DOOMED;
- entry->entry()->Store();
- rankings_->Insert(entry->rankings(), true, Rankings::DELETED);
-}
-
-void Eviction::OnDestroyEntryV2(EntryImpl* entry) {
- if (entry->LeaveRankingsBehind())
- return;
-
- rankings_->Remove(entry->rankings(), Rankings::DELETED, true);
-}
-
-Rankings::List Eviction::GetListForEntryV2(EntryImpl* entry) {
- EntryStore* info = entry->entry()->Data();
- DCHECK_EQ(ENTRY_NORMAL, info->state);
-
- if (!info->reuse_count)
- return Rankings::NO_USE;
-
- if (info->reuse_count < kHighUse)
- return Rankings::LOW_USE;
-
- return Rankings::HIGH_USE;
-}
-
// This is a minimal implementation that just discards the oldest nodes.
// TODO(rvargas): Do something better here.
void Eviction::TrimDeleted(bool empty) {
@@ -520,18 +412,32 @@
return;
}
-bool Eviction::RemoveDeletedNode(CacheRankingsBlock* node) {
- EntryImpl* entry = backend_->GetEnumeratedEntry(node, Rankings::DELETED);
- if (!entry) {
- Trace("NewEntry failed on Trim 0x%x", node->address().value());
- return false;
- }
+void Eviction::ReportTrimTimes(EntryImpl* entry) {
+ if (first_trim_) {
+ first_trim_ = false;
+ if (backend_->ShouldReportAgain()) {
+ CACHE_UMA(AGE, "TrimAge", 0, entry->GetLastUsed());
+ ReportListStats();
+ }
- bool doomed = (entry->entry()->Data()->state == ENTRY_DOOMED);
- entry->entry()->Data()->state = ENTRY_DOOMED;
- entry->DoomImpl();
- entry->Release();
- return !doomed;
+ if (header_->lru.filled)
+ return;
+
+ header_->lru.filled = 1;
+
+ if (header_->create_time) {
+ // This is the first entry that we have to evict, generate some noise.
+ backend_->FirstEviction();
+ } else {
+ // This is an old file, but we may want more reports from this user so
+ // lets save some create_time.
+ Time::Exploded old = {0};
+ old.year = 2009;
+ old.month = 3;
+ old.day_of_month = 1;
+ header_->create_time = Time::FromLocalExploded(old).ToInternalValue();
+ }
+ }
}
bool Eviction::NodeIsOldEnough(CacheRankingsBlock* node, int list) {
« no previous file with comments | « net/disk_cache/v3/eviction_v3.h ('k') | net/disk_cache/v3/sparse_control_v3.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698