| Index: base/metrics/histogram.cc
 | 
| diff --git a/base/metrics/histogram.cc b/base/metrics/histogram.cc
 | 
| index bf22ffcc2e3fedc3f57715d5444f5ccf361ffc62..e1d0df6736fa326b5f74c717974f40bf711be0c9 100644
 | 
| --- a/base/metrics/histogram.cc
 | 
| +++ b/base/metrics/histogram.cc
 | 
| @@ -275,12 +275,14 @@
 | 
|      Sample minimum,
 | 
|      Sample maximum,
 | 
|      const BucketRanges* ranges,
 | 
| -    const DelayedPersistentAllocation& counts,
 | 
| -    const DelayedPersistentAllocation& logged_counts,
 | 
| +    HistogramBase::AtomicCount* counts,
 | 
| +    HistogramBase::AtomicCount* logged_counts,
 | 
| +    uint32_t counts_size,
 | 
|      HistogramSamples::Metadata* meta,
 | 
|      HistogramSamples::Metadata* logged_meta) {
 | 
|    return WrapUnique(new Histogram(name, minimum, maximum, ranges, counts,
 | 
| -                                  logged_counts, meta, logged_meta));
 | 
| +                                  logged_counts, counts_size, meta,
 | 
| +                                  logged_meta));
 | 
|  }
 | 
|  
 | 
|  // Calculate what range of values are held in each bucket.
 | 
| @@ -510,19 +512,20 @@
 | 
|                       Sample minimum,
 | 
|                       Sample maximum,
 | 
|                       const BucketRanges* ranges,
 | 
| -                     const DelayedPersistentAllocation& counts,
 | 
| -                     const DelayedPersistentAllocation& logged_counts,
 | 
| +                     HistogramBase::AtomicCount* counts,
 | 
| +                     HistogramBase::AtomicCount* logged_counts,
 | 
| +                     uint32_t counts_size,
 | 
|                       HistogramSamples::Metadata* meta,
 | 
|                       HistogramSamples::Metadata* logged_meta)
 | 
| -    : HistogramBase(name),
 | 
| -      bucket_ranges_(ranges),
 | 
| -      declared_min_(minimum),
 | 
| -      declared_max_(maximum) {
 | 
| +  : HistogramBase(name),
 | 
| +    bucket_ranges_(ranges),
 | 
| +    declared_min_(minimum),
 | 
| +    declared_max_(maximum) {
 | 
|    if (ranges) {
 | 
| -    samples_.reset(
 | 
| -        new PersistentSampleVector(HashMetricName(name), ranges, meta, counts));
 | 
| -    logged_samples_.reset(new PersistentSampleVector(
 | 
| -        samples_->id(), ranges, logged_meta, logged_counts));
 | 
| +    samples_.reset(new SampleVector(HashMetricName(name),
 | 
| +                                    counts, counts_size, meta, ranges));
 | 
| +    logged_samples_.reset(new SampleVector(samples_->id(), logged_counts,
 | 
| +                                           counts_size, logged_meta, ranges));
 | 
|    }
 | 
|  }
 | 
|  
 | 
| @@ -653,7 +656,7 @@
 | 
|    DCHECK_EQ(sample_count, past);
 | 
|  }
 | 
|  
 | 
| -double Histogram::GetPeakBucketSize(const SampleVectorBase& samples) const {
 | 
| +double Histogram::GetPeakBucketSize(const SampleVector& samples) const {
 | 
|    double max = 0;
 | 
|    for (uint32_t i = 0; i < bucket_count() ; ++i) {
 | 
|      double current_size = GetBucketSize(samples.GetCountAtIndex(i), i);
 | 
| @@ -663,7 +666,7 @@
 | 
|    return max;
 | 
|  }
 | 
|  
 | 
| -void Histogram::WriteAsciiHeader(const SampleVectorBase& samples,
 | 
| +void Histogram::WriteAsciiHeader(const SampleVector& samples,
 | 
|                                   Count sample_count,
 | 
|                                   std::string* output) const {
 | 
|    StringAppendF(output,
 | 
| @@ -812,12 +815,14 @@
 | 
|      Sample minimum,
 | 
|      Sample maximum,
 | 
|      const BucketRanges* ranges,
 | 
| -    const DelayedPersistentAllocation& counts,
 | 
| -    const DelayedPersistentAllocation& logged_counts,
 | 
| +    HistogramBase::AtomicCount* counts,
 | 
| +    HistogramBase::AtomicCount* logged_counts,
 | 
| +    uint32_t counts_size,
 | 
|      HistogramSamples::Metadata* meta,
 | 
|      HistogramSamples::Metadata* logged_meta) {
 | 
| -  return WrapUnique(new LinearHistogram(name, minimum, maximum, ranges, counts,
 | 
| -                                        logged_counts, meta, logged_meta));
 | 
| +  return WrapUnique(new LinearHistogram(name, minimum, maximum, ranges,
 | 
| +                                              counts, logged_counts,
 | 
| +                                              counts_size, meta, logged_meta));
 | 
|  }
 | 
|  
 | 
|  HistogramBase* LinearHistogram::FactoryGetWithRangeDescription(
 | 
| @@ -846,23 +851,17 @@
 | 
|      : Histogram(name, minimum, maximum, ranges) {
 | 
|  }
 | 
|  
 | 
| -LinearHistogram::LinearHistogram(
 | 
| -    const std::string& name,
 | 
| -    Sample minimum,
 | 
| -    Sample maximum,
 | 
| -    const BucketRanges* ranges,
 | 
| -    const DelayedPersistentAllocation& counts,
 | 
| -    const DelayedPersistentAllocation& logged_counts,
 | 
| -    HistogramSamples::Metadata* meta,
 | 
| -    HistogramSamples::Metadata* logged_meta)
 | 
| -    : Histogram(name,
 | 
| -                minimum,
 | 
| -                maximum,
 | 
| -                ranges,
 | 
| -                counts,
 | 
| -                logged_counts,
 | 
| -                meta,
 | 
| -                logged_meta) {}
 | 
| +LinearHistogram::LinearHistogram(const std::string& name,
 | 
| +                                 Sample minimum,
 | 
| +                                 Sample maximum,
 | 
| +                                 const BucketRanges* ranges,
 | 
| +                                 HistogramBase::AtomicCount* counts,
 | 
| +                                 HistogramBase::AtomicCount* logged_counts,
 | 
| +                                 uint32_t counts_size,
 | 
| +                                 HistogramSamples::Metadata* meta,
 | 
| +                                 HistogramSamples::Metadata* logged_meta)
 | 
| +    : Histogram(name, minimum, maximum, ranges, counts, logged_counts,
 | 
| +                counts_size, meta, logged_meta) {}
 | 
|  
 | 
|  double LinearHistogram::GetBucketSize(Count current, uint32_t i) const {
 | 
|    DCHECK_GT(ranges(i + 1), ranges(i));
 | 
| @@ -962,12 +961,12 @@
 | 
|  std::unique_ptr<HistogramBase> BooleanHistogram::PersistentCreate(
 | 
|      const std::string& name,
 | 
|      const BucketRanges* ranges,
 | 
| -    const DelayedPersistentAllocation& counts,
 | 
| -    const DelayedPersistentAllocation& logged_counts,
 | 
| +    HistogramBase::AtomicCount* counts,
 | 
| +    HistogramBase::AtomicCount* logged_counts,
 | 
|      HistogramSamples::Metadata* meta,
 | 
|      HistogramSamples::Metadata* logged_meta) {
 | 
| -  return WrapUnique(new BooleanHistogram(name, ranges, counts, logged_counts,
 | 
| -                                         meta, logged_meta));
 | 
| +  return WrapUnique(new BooleanHistogram(
 | 
| +      name, ranges, counts, logged_counts, meta, logged_meta));
 | 
|  }
 | 
|  
 | 
|  HistogramType BooleanHistogram::GetHistogramType() const {
 | 
| @@ -978,20 +977,13 @@
 | 
|                                     const BucketRanges* ranges)
 | 
|      : LinearHistogram(name, 1, 2, ranges) {}
 | 
|  
 | 
| -BooleanHistogram::BooleanHistogram(
 | 
| -    const std::string& name,
 | 
| -    const BucketRanges* ranges,
 | 
| -    const DelayedPersistentAllocation& counts,
 | 
| -    const DelayedPersistentAllocation& logged_counts,
 | 
| -    HistogramSamples::Metadata* meta,
 | 
| -    HistogramSamples::Metadata* logged_meta)
 | 
| -    : LinearHistogram(name,
 | 
| -                      1,
 | 
| -                      2,
 | 
| -                      ranges,
 | 
| -                      counts,
 | 
| -                      logged_counts,
 | 
| -                      meta,
 | 
| +BooleanHistogram::BooleanHistogram(const std::string& name,
 | 
| +                                   const BucketRanges* ranges,
 | 
| +                                   HistogramBase::AtomicCount* counts,
 | 
| +                                   HistogramBase::AtomicCount* logged_counts,
 | 
| +                                   HistogramSamples::Metadata* meta,
 | 
| +                                   HistogramSamples::Metadata* logged_meta)
 | 
| +    : LinearHistogram(name, 1, 2, ranges, counts, logged_counts, 2, meta,
 | 
|                        logged_meta) {}
 | 
|  
 | 
|  HistogramBase* BooleanHistogram::DeserializeInfoImpl(PickleIterator* iter) {
 | 
| @@ -1076,12 +1068,13 @@
 | 
|  std::unique_ptr<HistogramBase> CustomHistogram::PersistentCreate(
 | 
|      const std::string& name,
 | 
|      const BucketRanges* ranges,
 | 
| -    const DelayedPersistentAllocation& counts,
 | 
| -    const DelayedPersistentAllocation& logged_counts,
 | 
| +    HistogramBase::AtomicCount* counts,
 | 
| +    HistogramBase::AtomicCount* logged_counts,
 | 
| +    uint32_t counts_size,
 | 
|      HistogramSamples::Metadata* meta,
 | 
|      HistogramSamples::Metadata* logged_meta) {
 | 
| -  return WrapUnique(new CustomHistogram(name, ranges, counts, logged_counts,
 | 
| -                                        meta, logged_meta));
 | 
| +  return WrapUnique(new CustomHistogram(
 | 
| +      name, ranges, counts, logged_counts, counts_size, meta, logged_meta));
 | 
|  }
 | 
|  
 | 
|  HistogramType CustomHistogram::GetHistogramType() const {
 | 
| @@ -1110,19 +1103,20 @@
 | 
|                  ranges->range(ranges->bucket_count() - 1),
 | 
|                  ranges) {}
 | 
|  
 | 
| -CustomHistogram::CustomHistogram(
 | 
| -    const std::string& name,
 | 
| -    const BucketRanges* ranges,
 | 
| -    const DelayedPersistentAllocation& counts,
 | 
| -    const DelayedPersistentAllocation& logged_counts,
 | 
| -    HistogramSamples::Metadata* meta,
 | 
| -    HistogramSamples::Metadata* logged_meta)
 | 
| +CustomHistogram::CustomHistogram(const std::string& name,
 | 
| +                                 const BucketRanges* ranges,
 | 
| +                                 HistogramBase::AtomicCount* counts,
 | 
| +                                 HistogramBase::AtomicCount* logged_counts,
 | 
| +                                 uint32_t counts_size,
 | 
| +                                 HistogramSamples::Metadata* meta,
 | 
| +                                 HistogramSamples::Metadata* logged_meta)
 | 
|      : Histogram(name,
 | 
|                  ranges->range(1),
 | 
|                  ranges->range(ranges->bucket_count() - 1),
 | 
|                  ranges,
 | 
|                  counts,
 | 
|                  logged_counts,
 | 
| +                counts_size,
 | 
|                  meta,
 | 
|                  logged_meta) {}
 | 
|  
 | 
| 
 |