• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef NET_DISK_CACHE_EVICTION_H_
6 #define NET_DISK_CACHE_EVICTION_H_
7 
8 #include "base/basictypes.h"
9 #include "base/compiler_specific.h"
10 #include "base/task.h"
11 #include "net/disk_cache/disk_format.h"
12 #include "net/disk_cache/rankings.h"
13 
14 namespace disk_cache {
15 
16 class BackendImpl;
17 class EntryImpl;
18 
19 // This class implements the eviction algorithm for the cache and it is tightly
20 // integrated with BackendImpl.
21 class Eviction {
22  public:
Eviction()23   Eviction() : backend_(NULL), ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)) {}
~Eviction()24   ~Eviction() {}
25 
26   void Init(BackendImpl* backend);
27 
28   // Deletes entries from the cache until the current size is below the limit.
29   // If empty is true, the whole cache will be trimmed, regardless of being in
30   // use.
31   void TrimCache(bool empty);
32 
33   // Updates the ranking information for an entry.
34   void UpdateRank(EntryImpl* entry, bool modified);
35 
36   // Notifications of interesting events for a given entry.
37   void OnOpenEntry(EntryImpl* entry);
38   void OnCreateEntry(EntryImpl* entry);
39   void OnDoomEntry(EntryImpl* entry);
40   void OnDestroyEntry(EntryImpl* entry);
41 
42  private:
43   void PostDelayedTrim();
44   void DelayedTrim();
45   void ReportTrimTimes(EntryImpl* entry);
46   Rankings::List GetListForEntry(EntryImpl* entry);
47   bool EvictEntry(CacheRankingsBlock* node, bool empty);
48 
49   // We'll just keep for a while a separate set of methods that implement the
50   // new eviction algorithm. This code will replace the original methods when
51   // finished.
52   void TrimCacheV2(bool empty);
53   void UpdateRankV2(EntryImpl* entry, bool modified);
54   void OnOpenEntryV2(EntryImpl* entry);
55   void OnCreateEntryV2(EntryImpl* entry);
56   void OnDoomEntryV2(EntryImpl* entry);
57   void OnDestroyEntryV2(EntryImpl* entry);
58   Rankings::List GetListForEntryV2(EntryImpl* entry);
59   void TrimDeleted(bool empty);
60   bool RemoveDeletedNode(CacheRankingsBlock* node);
61 
62   bool NodeIsOldEnough(CacheRankingsBlock* node, int list);
63   int SelectListByLenght();
64   void ReportListStats();
65 
66   BackendImpl* backend_;
67   Rankings* rankings_;
68   IndexHeader* header_;
69   int max_size_;
70   bool new_eviction_;
71   bool first_trim_;
72   bool trimming_;
73   bool delay_trim_;
74   ScopedRunnableMethodFactory<Eviction> factory_;
75 
76   DISALLOW_COPY_AND_ASSIGN(Eviction);
77 };
78 
79 }  // namespace disk_cache
80 
81 #endif  // NET_DISK_CACHE_EVICTION_H_
82