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