|
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; | |
sky
2012/09/08 00:00:25
It's very unusual for an iterator to not be by val
| |
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 // Add samples when |is_add| is true, else subtract samples. | |
Ilya Sherman
2012/09/12 03:20:58
nit: Please update this comment.
kaiwang
2012/09/20 22:54:59
Done.
| |
47 enum Instruction { ADD, SUBTRACT }; | |
48 virtual bool AddSubtractImpl(SampleCountIterator* iter, | |
49 Instruction instruction) = 0; | |
50 | |
51 void IncreaseSum(int64 diff); | |
52 void IncreaseRedundantCount(HistogramBase::Count diff); | |
53 | |
54 private: | |
55 int64 sum_; | |
56 | |
57 // |redundant_count_| helps identify memory corruption. It redundantly stores | |
58 // the total number of samples accumulated in the histogram. We can compare | |
59 // this count to the sum of the counts (TotalCount() function), and detect | |
60 // problems. Note, depending on the implementation of different histogram | |
61 // types, there might be races during histogram accumulation and snapshotting | |
62 // that we choose to accept. In this case, the tallies might mismatch even | |
63 // when no memory corruption has happened. | |
64 HistogramBase::Count redundant_count_; | |
65 }; | |
66 | |
67 class BASE_EXPORT SampleCountIterator { | |
68 public: | |
69 virtual ~SampleCountIterator(); | |
70 | |
71 virtual bool Done() const = 0; | |
72 virtual void Next() = 0; | |
73 | |
74 // Get the sample and count at current position. | |
75 // |min| |max| and |count| can be NULL if the value is not of interest. | |
76 // Requires: !Done(); | |
77 virtual void Get(HistogramBase::Sample* min, | |
78 HistogramBase::Sample* max, | |
79 HistogramBase::Count* count) const = 0; | |
80 | |
81 // Get the index of current histogram bucket. | |
82 // For histograms that don't use predefined buckets, it returns false. | |
83 // Requires: !Done(); | |
84 virtual bool GetBucketIndex(size_t* index) const; | |
85 }; | |
86 | |
87 } // namespace base | |
88 | |
89 #endif // BASE_METRICS_HISTOGRAM_SAMPLES_H_ | |
OLD | NEW |