• 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_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