• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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 #pragma once
8 
9 #include <string>
10 #include <vector>
11 
12 #include "base/basictypes.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "net/disk_cache/stats_histogram.h"
15 
16 namespace disk_cache {
17 
18 class BackendImpl;
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     MAX_COUNTER
50   };
51 
52   Stats();
53   ~Stats();
54 
55   bool Init(BackendImpl* backend, uint32* storage_addr);
56 
57   // Tracks changes to the stoage space used by an entry.
58   void ModifyStorageStats(int32 old_size, int32 new_size);
59 
60   // Tracks general events.
61   void OnEvent(Counters an_event);
62   void SetCounter(Counters counter, int64 value);
63   int64 GetCounter(Counters counter) const;
64 
65   void GetItems(StatsItems* items);
66   int GetHitRatio() const;
67   int GetResurrectRatio() const;
68   void ResetRatios();
69 
70   // Returns the lower bound of the space used by entries bigger than 512 KB.
71   int GetLargeEntriesSize();
72 
73   // Saves the stats to disk.
74   void Store();
75 
76   // Support for StatsHistograms. Together, these methods allow StatsHistograms
77   // to take a snapshot of the data_sizes_ as the histogram data.
78   int GetBucketRange(size_t i) const;
79   void Snapshot(StatsHistogram::StatsSamples* samples) const;
80 
81  private:
82   int GetStatsBucket(int32 size);
83   int GetRatio(Counters hit, Counters miss) const;
84 
85   BackendImpl* backend_;
86   uint32 storage_addr_;
87   int data_sizes_[kDataSizesLength];
88   int64 counters_[MAX_COUNTER];
89   StatsHistogram* size_histogram_;
90 
91   DISALLOW_COPY_AND_ASSIGN(Stats);
92 };
93 
94 }  // namespace disk_cache
95 
96 #endif  // NET_DISK_CACHE_STATS_H_
97