Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Side by Side Diff: base/metrics/histogram_samples.cc

Issue 10829466: SampleSet -> HistogramSamples (will be reused by SparseHistogram) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(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 #include "base/metrics/histogram_samples.h"
6
7 #include "base/compiler_specific.h"
8 #include "base/pickle.h"
9
10 namespace base {
11
12 namespace {
13
14 class SampleCountPickleIterator : public SampleCountIterator {
15 public:
16 SampleCountPickleIterator(PickleIterator* iter);
17
18 virtual bool Done() const OVERRIDE;
19 virtual void Next() OVERRIDE;
20 virtual void Get(HistogramBase::Sample* min,
21 HistogramBase::Sample* max,
22 HistogramBase::Count* count) const OVERRIDE;
23 private:
24 bool ReadNext();
25
26 PickleIterator* const iter_;
27
28 HistogramBase::Sample min_;
29 HistogramBase::Sample max_;
30 HistogramBase::Count count_;
31 bool is_done_;
32 };
33
34 SampleCountPickleIterator::SampleCountPickleIterator(PickleIterator* iter)
35 : iter_(iter),
36 is_done_(false) {
37 Next();
38 }
39
40 bool SampleCountPickleIterator::Done() const {
41 return is_done_;
42 }
43
44 void SampleCountPickleIterator::Next() {
45 CHECK(!Done());
46 if (!ReadNext())
47 is_done_ = true;
48 }
49
50 void SampleCountPickleIterator::Get(HistogramBase::Sample* min,
51 HistogramBase::Sample* max,
52 HistogramBase::Count* count) const {
53 CHECK(!Done());
54 *min = min_;
55 *max = max_;
56 *count = count_;
57 }
58
59 bool SampleCountPickleIterator::ReadNext() {
Ilya Sherman 2012/09/12 03:20:58 Optional nit: This method is only used in one plac
kaiwang 2012/09/20 22:54:59 Done.
60 return iter_->ReadInt(&min_) &&
61 iter_->ReadInt(&max_) &&
62 iter_->ReadInt(&count_);
63 }
64
65 } // namespace
66
67 HistogramSamples::HistogramSamples() : sum_(0), redundant_count_(0) {}
68
69 HistogramSamples::~HistogramSamples() {}
70
71 void HistogramSamples::Add(const HistogramSamples& other) {
72 sum_ += other.sum();
73 redundant_count_ += other.redundant_count();
74 CHECK(AddSubtractImpl(other.Iterator().get(), ADD));
75 }
76
77 bool HistogramSamples::AddFromPickle(PickleIterator* iter) {
78 int64 sum;
79 HistogramBase::Count redundant_count;
80
81 if (!iter->ReadInt64(&sum) || !iter->ReadInt(&redundant_count))
82 return false;
83 sum_ += sum;
84 redundant_count_ += redundant_count;
85
86 SampleCountPickleIterator pickle_iter(iter);
87 return AddSubtractImpl(&pickle_iter, ADD);
88 }
89
90 void HistogramSamples::Subtract(const HistogramSamples& other) {
91 sum_ -= other.sum();
92 redundant_count_ -= other.redundant_count();
93 CHECK(AddSubtractImpl(other.Iterator().get(), SUBTRACT));
94 }
95
96 bool HistogramSamples::Serialize(Pickle* pickle) const {
97 if (!pickle->WriteInt64(sum_) || !pickle->WriteInt(redundant_count_))
98 return false;
99
100 HistogramBase::Sample min;
101 HistogramBase::Sample max;
102 HistogramBase::Count count;
103 for (scoped_ptr<SampleCountIterator> it = Iterator();
104 !it->Done();
105 it->Next()) {
106 it->Get(&min, &max, &count);
107 if (!pickle->WriteInt(min) ||
108 !pickle->WriteInt(max) ||
109 !pickle->WriteInt(count))
110 return false;
111 }
112 return true;
113 }
114
115 void HistogramSamples::IncreaseSum(int64 diff) {
116 sum_ += diff;
117 }
118
119 void HistogramSamples::IncreaseRedundantCount(HistogramBase::Count diff) {
120 redundant_count_ += diff;
121 }
122
123 SampleCountIterator::~SampleCountIterator() {}
124
125 bool SampleCountIterator::GetBucketIndex(size_t* index) const {
126 CHECK(!Done());
Ilya Sherman 2012/09/12 03:20:58 nit: DCHECK
127 return false;
128 }
129
130 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698