1 // Copyright 2012 The Chromium Authors 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 <stddef.h> 9 #include <stdint.h> 10 11 #include "base/strings/string_split.h" 12 #include "net/base/net_export.h" 13 #include "net/disk_cache/blockfile/addr.h" 14 15 namespace disk_cache { 16 17 using StatsItems = base::StringPairs; 18 19 // This class stores cache-specific usage information, for tunning purposes. 20 class NET_EXPORT_PRIVATE Stats { 21 public: 22 static const int kDataSizesLength = 28; 23 enum Counters { 24 MIN_COUNTER = 0, 25 OPEN_MISS = MIN_COUNTER, 26 OPEN_HIT, 27 CREATE_MISS, 28 CREATE_HIT, 29 RESURRECT_HIT, 30 CREATE_ERROR, 31 TRIM_ENTRY, 32 DOOM_ENTRY, 33 DOOM_CACHE, 34 INVALID_ENTRY, 35 OPEN_ENTRIES, // Average number of open entries. 36 MAX_ENTRIES, // Maximum number of open entries. 37 TIMER, 38 READ_DATA, 39 WRITE_DATA, 40 OPEN_RANKINGS, // An entry has to be read just to modify rankings. 41 GET_RANKINGS, // We got the ranking info without reading the whole entry. 42 FATAL_ERROR, 43 LAST_REPORT, // Time of the last time we sent a report. 44 LAST_REPORT_TIMER, // Timer count of the last time we sent a report. 45 DOOM_RECENT, // The cache was partially cleared. 46 UNUSED, // Was: ga.js was evicted from the cache. 47 MAX_COUNTER 48 }; 49 50 Stats(); 51 52 Stats(const Stats&) = delete; 53 Stats& operator=(const Stats&) = delete; 54 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_t old_size, int32_t new_size); 68 69 // Tracks general events. 70 void OnEvent(Counters an_event); 71 void SetCounter(Counters counter, int64_t value); 72 int64_t 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 private: 87 // Supports generation of SizeStats histogram data. 88 int GetBucketRange(size_t i) const; 89 int GetStatsBucket(int32_t size); 90 int GetRatio(Counters hit, Counters miss) const; 91 92 Addr storage_addr_; 93 int data_sizes_[kDataSizesLength]; 94 int64_t counters_[MAX_COUNTER]; 95 }; 96 97 } // namespace disk_cache 98 99 #endif // NET_DISK_CACHE_BLOCKFILE_STATS_H_ 100