• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2006-2008 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 "base/scoped_ptr.h"
13 #include "net/disk_cache/stats_histogram.h"
14 
15 namespace disk_cache {
16 
17 class BackendImpl;
18 
19 typedef std::vector<std::pair<std::string, std::string> > StatsItems;
20 
21 // This class stores cache-specific usage information, for tunning purposes.
22 class Stats {
23  public:
24   static const int kDataSizesLength = 28;
25   enum Counters {
26     MIN_COUNTER = 0,
27     OPEN_MISS = MIN_COUNTER,
28     OPEN_HIT,
29     CREATE_MISS,
30     CREATE_HIT,
31     RESURRECT_HIT,
32     CREATE_ERROR,
33     TRIM_ENTRY,
34     DOOM_ENTRY,
35     DOOM_CACHE,
36     INVALID_ENTRY,
37     OPEN_ENTRIES,  // Average number of open entries.
38     MAX_ENTRIES,  // Maximum number of open entries.
39     TIMER,
40     READ_DATA,
41     WRITE_DATA,
42     OPEN_RANKINGS,  // An entry has to be read just to modify rankings.
43     GET_RANKINGS,  // We got the ranking info without reading the whole entry.
44     FATAL_ERROR,
45     LAST_REPORT,  // Time of the last time we sent a report.
46     LAST_REPORT_TIMER,  // Timer count of the last time we sent a report.
47     MAX_COUNTER
48   };
49 
Stats()50   Stats() : backend_(NULL) {}
51   ~Stats();
52 
53   bool Init(BackendImpl* backend, uint32* storage_addr);
54 
55   // Tracks changes to the stoage space used by an entry.
56   void ModifyStorageStats(int32 old_size, int32 new_size);
57 
58   // Tracks general events.
59   void OnEvent(Counters an_event);
60   void SetCounter(Counters counter, int64 value);
61   int64 GetCounter(Counters counter) const;
62 
63   void GetItems(StatsItems* items);
64   int GetHitRatio() const;
65   int GetResurrectRatio() const;
66   void ResetRatios();
67 
68   // Returns the lower bound of the space used by entries bigger than 512 KB.
69   int GetLargeEntriesSize();
70 
71   // Saves the stats to disk.
72   void Store();
73 
74   // Support for StatsHistograms. Together, these methods allow StatsHistograms
75   // to take a snapshot of the data_sizes_ as the histogram data.
76   int GetBucketRange(size_t i) const;
77   void Snapshot(StatsHistogram::StatsSamples* samples) const;
78 
79  private:
80   int GetStatsBucket(int32 size);
81   int GetRatio(Counters hit, Counters miss) const;
82 
83   BackendImpl* backend_;
84   uint32 storage_addr_;
85   int data_sizes_[kDataSizesLength];
86   int64 counters_[MAX_COUNTER];
87   scoped_refptr<StatsHistogram> size_histogram_;
88 
89   DISALLOW_COPY_AND_ASSIGN(Stats);
90 };
91 
92 }  // namespace disk_cache
93 
94 #endif  // NET_DISK_CACHE_STATS_H_
95