| Index: base/metrics/histogram_samples.cc
|
| ===================================================================
|
| --- base/metrics/histogram_samples.cc (revision 0)
|
| +++ base/metrics/histogram_samples.cc (revision 0)
|
| @@ -0,0 +1,126 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "base/metrics/histogram_samples.h"
|
| +
|
| +#include "base/compiler_specific.h"
|
| +#include "base/pickle.h"
|
| +
|
| +namespace base {
|
| +
|
| +namespace {
|
| +
|
| +class SampleCountPickleIterator : public SampleCountIterator {
|
| + public:
|
| + SampleCountPickleIterator(PickleIterator* iter);
|
| +
|
| + virtual bool Done() const OVERRIDE;
|
| + virtual void Next() OVERRIDE;
|
| + virtual void Get(HistogramBase::Sample* min,
|
| + HistogramBase::Sample* max,
|
| + HistogramBase::Count* count) const OVERRIDE;
|
| + private:
|
| + PickleIterator* const iter_;
|
| +
|
| + HistogramBase::Sample min_;
|
| + HistogramBase::Sample max_;
|
| + HistogramBase::Count count_;
|
| + bool is_done_;
|
| +};
|
| +
|
| +SampleCountPickleIterator::SampleCountPickleIterator(PickleIterator* iter)
|
| + : iter_(iter),
|
| + is_done_(false) {
|
| + Next();
|
| +}
|
| +
|
| +bool SampleCountPickleIterator::Done() const {
|
| + return is_done_;
|
| +}
|
| +
|
| +void SampleCountPickleIterator::Next() {
|
| + DCHECK(!Done());
|
| + if (!iter_->ReadInt(&min_) ||
|
| + !iter_->ReadInt(&max_) ||
|
| + !iter_->ReadInt(&count_))
|
| + is_done_ = true;
|
| +}
|
| +
|
| +void SampleCountPickleIterator::Get(HistogramBase::Sample* min,
|
| + HistogramBase::Sample* max,
|
| + HistogramBase::Count* count) const {
|
| + DCHECK(!Done());
|
| + *min = min_;
|
| + *max = max_;
|
| + *count = count_;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +HistogramSamples::HistogramSamples() : sum_(0), redundant_count_(0) {}
|
| +
|
| +HistogramSamples::~HistogramSamples() {}
|
| +
|
| +void HistogramSamples::Add(const HistogramSamples& other) {
|
| + sum_ += other.sum();
|
| + redundant_count_ += other.redundant_count();
|
| + bool success = AddSubtractImpl(other.Iterator().get(), ADD);
|
| + DCHECK(success);
|
| +}
|
| +
|
| +bool HistogramSamples::AddFromPickle(PickleIterator* iter) {
|
| + int64 sum;
|
| + HistogramBase::Count redundant_count;
|
| +
|
| + if (!iter->ReadInt64(&sum) || !iter->ReadInt(&redundant_count))
|
| + return false;
|
| + sum_ += sum;
|
| + redundant_count_ += redundant_count;
|
| +
|
| + SampleCountPickleIterator pickle_iter(iter);
|
| + return AddSubtractImpl(&pickle_iter, ADD);
|
| +}
|
| +
|
| +void HistogramSamples::Subtract(const HistogramSamples& other) {
|
| + sum_ -= other.sum();
|
| + redundant_count_ -= other.redundant_count();
|
| + bool success = AddSubtractImpl(other.Iterator().get(), SUBTRACT);
|
| + DCHECK(success);
|
| +}
|
| +
|
| +bool HistogramSamples::Serialize(Pickle* pickle) const {
|
| + if (!pickle->WriteInt64(sum_) || !pickle->WriteInt(redundant_count_))
|
| + return false;
|
| +
|
| + HistogramBase::Sample min;
|
| + HistogramBase::Sample max;
|
| + HistogramBase::Count count;
|
| + for (scoped_ptr<SampleCountIterator> it = Iterator();
|
| + !it->Done();
|
| + it->Next()) {
|
| + it->Get(&min, &max, &count);
|
| + if (!pickle->WriteInt(min) ||
|
| + !pickle->WriteInt(max) ||
|
| + !pickle->WriteInt(count))
|
| + return false;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| +void HistogramSamples::IncreaseSum(int64 diff) {
|
| + sum_ += diff;
|
| +}
|
| +
|
| +void HistogramSamples::IncreaseRedundantCount(HistogramBase::Count diff) {
|
| + redundant_count_ += diff;
|
| +}
|
| +
|
| +SampleCountIterator::~SampleCountIterator() {}
|
| +
|
| +bool SampleCountIterator::GetBucketIndex(size_t* index) const {
|
| + DCHECK(!Done());
|
| + return false;
|
| +}
|
| +
|
| +} // namespace base
|
|
|
| Property changes on: base/metrics/histogram_samples.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|