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