Home | History | Annotate | Download | only in v3
      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