• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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/memory/weak_ptr.h"
10 #include "net/disk_cache/disk_format.h"
11 #include "net/disk_cache/rankings.h"
12 
13 namespace disk_cache {
14 
15 class BackendImpl;
16 class EntryImpl;
17 
18 // This class implements the eviction algorithm for the cache and it is tightly
19 // integrated with BackendImpl.
20 class Eviction {
21  public:
22   Eviction();
23   ~Eviction();
24 
25   void Init(BackendImpl* backend);
26   void Stop();
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   // Notifications of interesting events for a given entry.
34   void OnOpenEntry(EntryImpl* entry);
35   void OnCreateEntry(EntryImpl* entry);
36 
37   // Testing interface.
38   void SetTestMode();
39   void TrimDeletedList(bool empty);
40 
41  private:
42   void PostDelayedTrim();
43   void DelayedTrim();
44   bool ShouldTrim();
45   bool ShouldTrimDeleted();
46   bool EvictEntry(CacheRankingsBlock* node, bool empty, Rankings::List list);
47 
48   void TrimCacheV2(bool empty);
49   void TrimDeleted(bool empty);
50 
51   bool NodeIsOldEnough(CacheRankingsBlock* node, int list);
52   int SelectListByLength(Rankings::ScopedRankingsBlock* next);
53   void ReportListStats();
54 
55   BackendImpl* backend_;
56   Rankings* rankings_;
57   IndexHeader* header_;
58   int max_size_;
59   int trim_delays_;
60   int index_size_;
61   bool new_eviction_;
62   bool first_trim_;
63   bool trimming_;
64   bool delay_trim_;
65   bool init_;
66   bool test_mode_;
67   base::WeakPtrFactory<Eviction> ptr_factory_;
68 
69   DISALLOW_COPY_AND_ASSIGN(Eviction);
70 };
71 
72 }  // namespace disk_cache
73 
74 #endif  // NET_DISK_CACHE_EVICTION_H_
75