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

Unified Diff: base/metrics/sample_vector.cc

Issue 1647803004: Move base to DEPS (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 4 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/metrics/sample_vector.h ('k') | base/metrics/sample_vector_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/metrics/sample_vector.cc
diff --git a/base/metrics/sample_vector.cc b/base/metrics/sample_vector.cc
deleted file mode 100644
index 1202527545c52ac2846d58743c46f538326f4aaa..0000000000000000000000000000000000000000
--- a/base/metrics/sample_vector.cc
+++ /dev/null
@@ -1,163 +0,0 @@
-// 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/sample_vector.h"
-
-#include "base/logging.h"
-#include "base/metrics/bucket_ranges.h"
-
-namespace base {
-
-typedef HistogramBase::Count Count;
-typedef HistogramBase::Sample Sample;
-
-SampleVector::SampleVector(const BucketRanges* bucket_ranges)
- : counts_(bucket_ranges->bucket_count()),
- bucket_ranges_(bucket_ranges) {
- CHECK_GE(bucket_ranges_->bucket_count(), 1u);
-}
-
-SampleVector::~SampleVector() {}
-
-void SampleVector::Accumulate(Sample value, Count count) {
- size_t bucket_index = GetBucketIndex(value);
- subtle::NoBarrier_Store(&counts_[bucket_index],
- subtle::NoBarrier_Load(&counts_[bucket_index]) + count);
- IncreaseSum(count * value);
- IncreaseRedundantCount(count);
-}
-
-Count SampleVector::GetCount(Sample value) const {
- size_t bucket_index = GetBucketIndex(value);
- return subtle::NoBarrier_Load(&counts_[bucket_index]);
-}
-
-Count SampleVector::TotalCount() const {
- Count count = 0;
- for (size_t i = 0; i < counts_.size(); i++) {
- count += subtle::NoBarrier_Load(&counts_[i]);
- }
- return count;
-}
-
-Count SampleVector::GetCountAtIndex(size_t bucket_index) const {
- DCHECK(bucket_index < counts_.size());
- return subtle::NoBarrier_Load(&counts_[bucket_index]);
-}
-
-scoped_ptr<SampleCountIterator> SampleVector::Iterator() const {
- return scoped_ptr<SampleCountIterator>(
- new SampleVectorIterator(&counts_, bucket_ranges_));
-}
-
-bool SampleVector::AddSubtractImpl(SampleCountIterator* iter,
- HistogramSamples::Operator op) {
- HistogramBase::Sample min;
- HistogramBase::Sample max;
- HistogramBase::Count count;
-
- // Go through the iterator and add the counts into correct bucket.
- size_t index = 0;
- while (index < counts_.size() && !iter->Done()) {
- iter->Get(&min, &max, &count);
- if (min == bucket_ranges_->range(index) &&
- max == bucket_ranges_->range(index + 1)) {
- // Sample matches this bucket!
- HistogramBase::Count old_counts =
- subtle::NoBarrier_Load(&counts_[index]);
- subtle::NoBarrier_Store(&counts_[index],
- old_counts + ((op == HistogramSamples::ADD) ? count : -count));
- iter->Next();
- } else if (min > bucket_ranges_->range(index)) {
- // Sample is larger than current bucket range. Try next.
- index++;
- } else {
- // Sample is smaller than current bucket range. We scan buckets from
- // smallest to largest, so the sample value must be invalid.
- return false;
- }
- }
-
- return iter->Done();
-}
-
-// Use simple binary search. This is very general, but there are better
-// approaches if we knew that the buckets were linearly distributed.
-size_t SampleVector::GetBucketIndex(Sample value) const {
- size_t bucket_count = bucket_ranges_->bucket_count();
- CHECK_GE(bucket_count, 1u);
- CHECK_GE(value, bucket_ranges_->range(0));
- CHECK_LT(value, bucket_ranges_->range(bucket_count));
-
- size_t under = 0;
- size_t over = bucket_count;
- size_t mid;
- do {
- DCHECK_GE(over, under);
- mid = under + (over - under)/2;
- if (mid == under)
- break;
- if (bucket_ranges_->range(mid) <= value)
- under = mid;
- else
- over = mid;
- } while (true);
-
- DCHECK_LE(bucket_ranges_->range(mid), value);
- CHECK_GT(bucket_ranges_->range(mid + 1), value);
- return mid;
-}
-
-SampleVectorIterator::SampleVectorIterator(const std::vector<Count>* counts,
- const BucketRanges* bucket_ranges)
- : counts_(counts),
- bucket_ranges_(bucket_ranges),
- index_(0) {
- CHECK_GE(bucket_ranges_->bucket_count(), counts_->size());
- SkipEmptyBuckets();
-}
-
-SampleVectorIterator::~SampleVectorIterator() {}
-
-bool SampleVectorIterator::Done() const {
- return index_ >= counts_->size();
-}
-
-void SampleVectorIterator::Next() {
- DCHECK(!Done());
- index_++;
- SkipEmptyBuckets();
-}
-
-void SampleVectorIterator::Get(HistogramBase::Sample* min,
- HistogramBase::Sample* max,
- HistogramBase::Count* count) const {
- DCHECK(!Done());
- if (min != NULL)
- *min = bucket_ranges_->range(index_);
- if (max != NULL)
- *max = bucket_ranges_->range(index_ + 1);
- if (count != NULL)
- *count = subtle::NoBarrier_Load(&(*counts_)[index_]);
-}
-
-bool SampleVectorIterator::GetBucketIndex(size_t* index) const {
- DCHECK(!Done());
- if (index != NULL)
- *index = index_;
- return true;
-}
-
-void SampleVectorIterator::SkipEmptyBuckets() {
- if (Done())
- return;
-
- while (index_ < counts_->size()) {
- if (subtle::NoBarrier_Load(&(*counts_)[index_]) != 0)
- return;
- index_++;
- }
-}
-
-} // namespace base
« no previous file with comments | « base/metrics/sample_vector.h ('k') | base/metrics/sample_vector_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698