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_STATS_H_ 6 #define NET_DISK_CACHE_STATS_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/basictypes.h" 12 #include "net/disk_cache/addr.h" 13 #include "net/disk_cache/stats_histogram.h" 14 15 namespace base { 16 class HistogramSamples; 17 } // namespace base 18 19 namespace disk_cache { 20 21 typedef std::vector<std::pair<std::string, std::string> > StatsItems; 22 23 // This class stores cache-specific usage information, for tunning purposes. 24 class 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_STATS_H_ 106