|
OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
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 BASE_METRICS_HISTOGRAM_SAMPLES_H_ | |
6 #define BASE_METRICS_HISTOGRAM_SAMPLES_H_ | |
7 | |
8 #include "base/basictypes.h" | |
9 #include "base/metrics/histogram_base.h" | |
10 #include "base/memory/scoped_ptr.h" | |
11 | |
12 class Pickle; | |
13 class PickleIterator; | |
14 | |
15 namespace base { | |
16 | |
17 class SampleCountIterator; | |
18 | |
19 // HistogramSamples is a container storing all samples of a histogram. | |
20 class BASE_EXPORT HistogramSamples { | |
21 public: | |
22 HistogramSamples(); | |
23 virtual ~HistogramSamples(); | |
24 | |
25 virtual void Accumulate(HistogramBase::Sample value, | |
26 HistogramBase::Count count) = 0; | |
27 virtual HistogramBase::Count GetCount(HistogramBase::Sample value) const = 0; | |
28 virtual HistogramBase::Count TotalCount() const = 0; | |
29 | |
30 virtual void Add(const HistogramSamples& other); | |
31 | |
32 // Add from serialized samples. | |
33 virtual bool AddFromPickle(PickleIterator* iter); | |
34 | |
35 virtual void Subtract(const HistogramSamples& other); | |
36 | |
37 virtual scoped_ptr<SampleCountIterator> Iterator() const = 0; | |
38 virtual bool Serialize(Pickle* pickle) const; | |
39 | |
40 // Accessor fuctions. | |
41 int64 sum() const { return sum_; } | |
42 HistogramBase::Count redundant_count() const { return redundant_count_; } | |
43 | |
44 protected: | |
45 // Add/subtract sample counts data from the iterator. | |
46 virtual bool AddSubtractImpl(SampleCountIterator* iter, bool is_add) = 0; | |
47 | |
48 void set_sum(int64 sum) { sum_ = sum; } | |
49 void set_redundant_count(HistogramBase::Count redundant_count) { | |
50 redundant_count_ = redundant_count; | |
51 } | |
52 | |
53 private: | |
54 int64 sum_; | |
55 | |
56 // |redundant_count_| helps identify memory corruption. It redundantly stores | |
57 // the total number of samples accumulated in the histogram. We can compare | |
58 // this count to the sum of the counts (TotalCount() function), and detect | |
59 // problems. Note, depending on the implementation of different histogram | |
60 // types, there might be races during histogram accumulation and snapshotting | |
61 // that we choose to accept. In this case, the tallies might mismatch even | |
62 // when no memory corruption has happened. | |
63 HistogramBase::Count redundant_count_; | |
64 }; | |
65 | |
66 class BASE_EXPORT SampleCountIterator { | |
67 public: | |
68 virtual ~SampleCountIterator(); | |
69 | |
70 virtual bool Done() = 0; | |
Ilya Sherman
2012/08/29 08:48:16
nit: const?
kaiwang
2012/08/29 22:42:16
Done.
| |
71 virtual void Next() = 0; | |
72 | |
73 // Get the sample and count at current position. | |
74 // |min| |max| and |count| can be NULL if the value is not interested. | |
Ilya Sherman
2012/08/29 08:48:16
nit: "interested" -> "of interest"
kaiwang
2012/08/29 22:42:16
Done.
| |
75 virtual void Get(HistogramBase::Sample* min, | |
76 HistogramBase::Sample* max, | |
77 HistogramBase::Count* count) = 0; | |
Ilya Sherman
2012/08/29 08:48:16
nit: const?
kaiwang
2012/08/29 22:42:16
Done.
| |
78 }; | |
79 | |
80 } // namespace base | |
81 | |
82 #endif // BASE_METRICS_HISTOGRAM_SAMPLES_H_ | |
OLD | NEW |