xref: /aosp_15_r20/external/cronet/base/metrics/sample_map.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 // SampleMap implements HistogramSamples interface. It is used by the
6*6777b538SAndroid Build Coastguard Worker // SparseHistogram class to store samples.
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #ifndef BASE_METRICS_SAMPLE_MAP_H_
9*6777b538SAndroid Build Coastguard Worker #define BASE_METRICS_SAMPLE_MAP_H_
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker #include <stdint.h>
12*6777b538SAndroid Build Coastguard Worker 
13*6777b538SAndroid Build Coastguard Worker #include <map>
14*6777b538SAndroid Build Coastguard Worker #include <memory>
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h"
17*6777b538SAndroid Build Coastguard Worker #include "base/compiler_specific.h"
18*6777b538SAndroid Build Coastguard Worker #include "base/metrics/histogram_base.h"
19*6777b538SAndroid Build Coastguard Worker #include "base/metrics/histogram_samples.h"
20*6777b538SAndroid Build Coastguard Worker 
21*6777b538SAndroid Build Coastguard Worker namespace base {
22*6777b538SAndroid Build Coastguard Worker 
23*6777b538SAndroid Build Coastguard Worker // The logic here is similar to that of PersistentSampleMap but with different
24*6777b538SAndroid Build Coastguard Worker // data structures. Changes here likely need to be duplicated there.
25*6777b538SAndroid Build Coastguard Worker class BASE_EXPORT SampleMap : public HistogramSamples {
26*6777b538SAndroid Build Coastguard Worker  public:
27*6777b538SAndroid Build Coastguard Worker   SampleMap();
28*6777b538SAndroid Build Coastguard Worker   explicit SampleMap(uint64_t id);
29*6777b538SAndroid Build Coastguard Worker 
30*6777b538SAndroid Build Coastguard Worker   SampleMap(const SampleMap&) = delete;
31*6777b538SAndroid Build Coastguard Worker   SampleMap& operator=(const SampleMap&) = delete;
32*6777b538SAndroid Build Coastguard Worker 
33*6777b538SAndroid Build Coastguard Worker   ~SampleMap() override;
34*6777b538SAndroid Build Coastguard Worker 
35*6777b538SAndroid Build Coastguard Worker   // HistogramSamples:
36*6777b538SAndroid Build Coastguard Worker   void Accumulate(HistogramBase::Sample value,
37*6777b538SAndroid Build Coastguard Worker                   HistogramBase::Count count) override;
38*6777b538SAndroid Build Coastguard Worker   HistogramBase::Count GetCount(HistogramBase::Sample value) const override;
39*6777b538SAndroid Build Coastguard Worker   HistogramBase::Count TotalCount() const override;
40*6777b538SAndroid Build Coastguard Worker   std::unique_ptr<SampleCountIterator> Iterator() const override;
41*6777b538SAndroid Build Coastguard Worker   std::unique_ptr<SampleCountIterator> ExtractingIterator() override;
42*6777b538SAndroid Build Coastguard Worker   bool IsDefinitelyEmpty() const override;
43*6777b538SAndroid Build Coastguard Worker 
44*6777b538SAndroid Build Coastguard Worker  protected:
45*6777b538SAndroid Build Coastguard Worker   // Performs arithemetic. |op| is ADD or SUBTRACT.
46*6777b538SAndroid Build Coastguard Worker   bool AddSubtractImpl(SampleCountIterator* iter, Operator op) override;
47*6777b538SAndroid Build Coastguard Worker 
48*6777b538SAndroid Build Coastguard Worker  private:
49*6777b538SAndroid Build Coastguard Worker   std::map<HistogramBase::Sample, HistogramBase::Count> sample_counts_;
50*6777b538SAndroid Build Coastguard Worker };
51*6777b538SAndroid Build Coastguard Worker 
52*6777b538SAndroid Build Coastguard Worker }  // namespace base
53*6777b538SAndroid Build Coastguard Worker 
54*6777b538SAndroid Build Coastguard Worker #endif  // BASE_METRICS_SAMPLE_MAP_H_
55