1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef NET_DISK_CACHE_BLOCKFILE_STATS_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_DISK_CACHE_BLOCKFILE_STATS_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <stddef.h> 9*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker #include "base/strings/string_split.h" 12*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 13*6777b538SAndroid Build Coastguard Worker #include "net/disk_cache/blockfile/addr.h" 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace disk_cache { 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard Worker using StatsItems = base::StringPairs; 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker // This class stores cache-specific usage information, for tunning purposes. 20*6777b538SAndroid Build Coastguard Worker class NET_EXPORT_PRIVATE Stats { 21*6777b538SAndroid Build Coastguard Worker public: 22*6777b538SAndroid Build Coastguard Worker static const int kDataSizesLength = 28; 23*6777b538SAndroid Build Coastguard Worker enum Counters { 24*6777b538SAndroid Build Coastguard Worker MIN_COUNTER = 0, 25*6777b538SAndroid Build Coastguard Worker OPEN_MISS = MIN_COUNTER, 26*6777b538SAndroid Build Coastguard Worker OPEN_HIT, 27*6777b538SAndroid Build Coastguard Worker CREATE_MISS, 28*6777b538SAndroid Build Coastguard Worker CREATE_HIT, 29*6777b538SAndroid Build Coastguard Worker RESURRECT_HIT, 30*6777b538SAndroid Build Coastguard Worker CREATE_ERROR, 31*6777b538SAndroid Build Coastguard Worker TRIM_ENTRY, 32*6777b538SAndroid Build Coastguard Worker DOOM_ENTRY, 33*6777b538SAndroid Build Coastguard Worker DOOM_CACHE, 34*6777b538SAndroid Build Coastguard Worker INVALID_ENTRY, 35*6777b538SAndroid Build Coastguard Worker OPEN_ENTRIES, // Average number of open entries. 36*6777b538SAndroid Build Coastguard Worker MAX_ENTRIES, // Maximum number of open entries. 37*6777b538SAndroid Build Coastguard Worker TIMER, 38*6777b538SAndroid Build Coastguard Worker READ_DATA, 39*6777b538SAndroid Build Coastguard Worker WRITE_DATA, 40*6777b538SAndroid Build Coastguard Worker OPEN_RANKINGS, // An entry has to be read just to modify rankings. 41*6777b538SAndroid Build Coastguard Worker GET_RANKINGS, // We got the ranking info without reading the whole entry. 42*6777b538SAndroid Build Coastguard Worker FATAL_ERROR, 43*6777b538SAndroid Build Coastguard Worker LAST_REPORT, // Time of the last time we sent a report. 44*6777b538SAndroid Build Coastguard Worker LAST_REPORT_TIMER, // Timer count of the last time we sent a report. 45*6777b538SAndroid Build Coastguard Worker DOOM_RECENT, // The cache was partially cleared. 46*6777b538SAndroid Build Coastguard Worker UNUSED, // Was: ga.js was evicted from the cache. 47*6777b538SAndroid Build Coastguard Worker MAX_COUNTER 48*6777b538SAndroid Build Coastguard Worker }; 49*6777b538SAndroid Build Coastguard Worker 50*6777b538SAndroid Build Coastguard Worker Stats(); 51*6777b538SAndroid Build Coastguard Worker 52*6777b538SAndroid Build Coastguard Worker Stats(const Stats&) = delete; 53*6777b538SAndroid Build Coastguard Worker Stats& operator=(const Stats&) = delete; 54*6777b538SAndroid Build Coastguard Worker 55*6777b538SAndroid Build Coastguard Worker ~Stats(); 56*6777b538SAndroid Build Coastguard Worker 57*6777b538SAndroid Build Coastguard Worker // Initializes this object with |data| from disk. 58*6777b538SAndroid Build Coastguard Worker bool Init(void* data, int num_bytes, Addr address); 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard Worker // Generates a size distribution histogram. 61*6777b538SAndroid Build Coastguard Worker void InitSizeHistogram(); 62*6777b538SAndroid Build Coastguard Worker 63*6777b538SAndroid Build Coastguard Worker // Returns the number of bytes needed to store the stats on disk. 64*6777b538SAndroid Build Coastguard Worker int StorageSize(); 65*6777b538SAndroid Build Coastguard Worker 66*6777b538SAndroid Build Coastguard Worker // Tracks changes to the stoage space used by an entry. 67*6777b538SAndroid Build Coastguard Worker void ModifyStorageStats(int32_t old_size, int32_t new_size); 68*6777b538SAndroid Build Coastguard Worker 69*6777b538SAndroid Build Coastguard Worker // Tracks general events. 70*6777b538SAndroid Build Coastguard Worker void OnEvent(Counters an_event); 71*6777b538SAndroid Build Coastguard Worker void SetCounter(Counters counter, int64_t value); 72*6777b538SAndroid Build Coastguard Worker int64_t GetCounter(Counters counter) const; 73*6777b538SAndroid Build Coastguard Worker 74*6777b538SAndroid Build Coastguard Worker void GetItems(StatsItems* items); 75*6777b538SAndroid Build Coastguard Worker void ResetRatios(); 76*6777b538SAndroid Build Coastguard Worker 77*6777b538SAndroid Build Coastguard Worker // Returns the lower bound of the space used by entries bigger than 512 KB. 78*6777b538SAndroid Build Coastguard Worker int GetLargeEntriesSize(); 79*6777b538SAndroid Build Coastguard Worker 80*6777b538SAndroid Build Coastguard Worker // Writes the stats into |data|, to be stored at the given cache address. 81*6777b538SAndroid Build Coastguard Worker // Returns the number of bytes copied. 82*6777b538SAndroid Build Coastguard Worker int SerializeStats(void* data, int num_bytes, Addr* address); 83*6777b538SAndroid Build Coastguard Worker 84*6777b538SAndroid Build Coastguard Worker private: 85*6777b538SAndroid Build Coastguard Worker // Supports generation of SizeStats histogram data. 86*6777b538SAndroid Build Coastguard Worker int GetBucketRange(size_t i) const; 87*6777b538SAndroid Build Coastguard Worker int GetStatsBucket(int32_t size); 88*6777b538SAndroid Build Coastguard Worker int GetRatio(Counters hit, Counters miss) const; 89*6777b538SAndroid Build Coastguard Worker 90*6777b538SAndroid Build Coastguard Worker Addr storage_addr_; 91*6777b538SAndroid Build Coastguard Worker int data_sizes_[kDataSizesLength]; 92*6777b538SAndroid Build Coastguard Worker int64_t counters_[MAX_COUNTER]; 93*6777b538SAndroid Build Coastguard Worker }; 94*6777b538SAndroid Build Coastguard Worker 95*6777b538SAndroid Build Coastguard Worker } // namespace disk_cache 96*6777b538SAndroid Build Coastguard Worker 97*6777b538SAndroid Build Coastguard Worker #endif // NET_DISK_CACHE_BLOCKFILE_STATS_H_ 98