xref: /aosp_15_r20/external/cronet/net/disk_cache/blockfile/stats.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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