Home | History | Annotate | Download | only in disk_cache
      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_STATS_H_
      6 #define NET_DISK_CACHE_STATS_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/basictypes.h"
     12 #include "net/disk_cache/addr.h"
     13 #include "net/disk_cache/stats_histogram.h"
     14 
     15 namespace base {
     16 class HistogramSamples;
     17 }  // namespace base
     18 
     19 namespace disk_cache {
     20 
     21 typedef std::vector<std::pair<std::string, std::string> > StatsItems;
     22 
     23 // This class stores cache-specific usage information, for tunning purposes.
     24 class Stats {
     25  public:
     26   static const int kDataSizesLength = 28;
     27   enum Counters {
     28     MIN_COUNTER = 0,
     29     OPEN_MISS = MIN_COUNTER,
     30     OPEN_HIT,
     31     CREATE_MISS,
     32     CREATE_HIT,
     33     RESURRECT_HIT,
     34     CREATE_ERROR,
     35     TRIM_ENTRY,
     36     DOOM_ENTRY,
     37     DOOM_CACHE,
     38     INVALID_ENTRY,
     39     OPEN_ENTRIES,  // Average number of open entries.
     40     MAX_ENTRIES,  // Maximum number of open entries.
     41     TIMER,
     42     READ_DATA,
     43     WRITE_DATA,
     44     OPEN_RANKINGS,  // An entry has to be read just to modify rankings.
     45     GET_RANKINGS,  // We got the ranking info without reading the whole entry.
     46     FATAL_ERROR,
     47     LAST_REPORT,  // Time of the last time we sent a report.
     48     LAST_REPORT_TIMER,  // Timer count of the last time we sent a report.
     49     DOOM_RECENT,  // The cache was partially cleared.
     50     UNUSED,  // Was: ga.js was evicted from the cache.
     51     MAX_COUNTER
     52   };
     53 
     54   Stats();
     55   ~Stats();
     56 
     57   // Initializes this object with |data| from disk.
     58   bool Init(void* data, int num_bytes, Addr address);
     59 
     60   // Generates a size distribution histogram.
     61   void InitSizeHistogram();
     62 
     63   // Returns the number of bytes needed to store the stats on disk.
     64   int StorageSize();
     65 
     66   // Tracks changes to the stoage space used by an entry.
     67   void ModifyStorageStats(int32 old_size, int32 new_size);
     68 
     69   // Tracks general events.
     70   void OnEvent(Counters an_event);
     71   void SetCounter(Counters counter, int64 value);
     72   int64 GetCounter(Counters counter) const;
     73 
     74   void GetItems(StatsItems* items);
     75   int GetHitRatio() const;
     76   int GetResurrectRatio() const;
     77   void ResetRatios();
     78 
     79   // Returns the lower bound of the space used by entries bigger than 512 KB.
     80   int GetLargeEntriesSize();
     81 
     82   // Writes the stats into |data|, to be stored at the given cache address.
     83   // Returns the number of bytes copied.
     84   int SerializeStats(void* data, int num_bytes, Addr* address);
     85 
     86   // Support for StatsHistograms. Together, these methods allow StatsHistograms
     87   // to take a snapshot of the data_sizes_ as the histogram data.
     88   int GetBucketRange(size_t i) const;
     89   void Snapshot(base::HistogramSamples* samples) const;
     90 
     91  private:
     92   int GetStatsBucket(int32 size);
     93   int GetRatio(Counters hit, Counters miss) const;
     94 
     95   Addr storage_addr_;
     96   int data_sizes_[kDataSizesLength];
     97   int64 counters_[MAX_COUNTER];
     98   StatsHistogram* size_histogram_;
     99 
    100   DISALLOW_COPY_AND_ASSIGN(Stats);
    101 };
    102 
    103 }  // namespace disk_cache
    104 
    105 #endif  // NET_DISK_CACHE_STATS_H_
    106