stats.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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#include "net/disk_cache/blockfile/stats_histogram.h"
14
15namespace base {
16class HistogramSamples;
17}  // namespace base
18
19namespace disk_cache {
20
21typedef std::vector<std::pair<std::string, std::string> > StatsItems;
22
23// This class stores cache-specific usage information, for tunning purposes.
24class 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_BLOCKFILE_STATS_H_
106