| Index: base/metrics/histogram.cc
|
| diff --git a/base/metrics/histogram.cc b/base/metrics/histogram.cc
|
| index c33d2f03c05c769d0dd9bad12c85a26ce3550460..cbaa5f2ce7a0300a98d20ed0c85a17f3b42a3a8b 100644
|
| --- a/base/metrics/histogram.cc
|
| +++ b/base/metrics/histogram.cc
|
| @@ -267,15 +267,18 @@ HistogramBase* Histogram::FactoryTimeGet(const char* name,
|
| flags);
|
| }
|
|
|
| -HistogramBase* Histogram::PersistentGet(const std::string& name,
|
| - Sample minimum,
|
| - Sample maximum,
|
| - const BucketRanges* ranges,
|
| - HistogramBase::AtomicCount* counts,
|
| - uint32_t counts_size,
|
| - HistogramSamples::Metadata* meta) {
|
| - return new Histogram(name, minimum, maximum, ranges, counts, counts_size,
|
| - meta);
|
| +HistogramBase* Histogram::PersistentGet(
|
| + 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) {
|
| + return new Histogram(name, minimum, maximum, ranges, counts, logged_counts,
|
| + counts_size, meta, logged_meta);
|
| }
|
|
|
| // Calculate what range of values are held in each bucket.
|
| @@ -320,7 +323,7 @@ void Histogram::InitializeBucketRanges(Sample minimum,
|
| // static
|
| const int Histogram::kCommonRaceBasedCountMismatch = 5;
|
|
|
| -int Histogram::FindCorruption(const HistogramSamples& samples) const {
|
| +uint32_t Histogram::FindCorruption(const HistogramSamples& samples) const {
|
| int inconsistencies = NO_INCONSISTENCIES;
|
| Sample previous_range = -1; // Bottom range is always 0.
|
| for (uint32_t index = 0; index < bucket_count(); ++index) {
|
| @@ -430,6 +433,21 @@ scoped_ptr<HistogramSamples> Histogram::SnapshotSamples() const {
|
| return SnapshotSampleVector();
|
| }
|
|
|
| +scoped_ptr<HistogramSamples> Histogram::SnapshotDelta() {
|
| + scoped_ptr<HistogramSamples> snapshot = SnapshotSampleVector();
|
| + if (!logged_samples_) {
|
| + // If nothing has been previously logged, save this one as
|
| + // |logged_samples_| and gather another snapshot to return.
|
| + logged_samples_.swap(snapshot);
|
| + return SnapshotSampleVector();
|
| + }
|
| +
|
| + // Subtract what was previously logged and update that information.
|
| + snapshot->Subtract(*logged_samples_);
|
| + logged_samples_->Add(*snapshot);
|
| + return snapshot;
|
| +}
|
| +
|
| void Histogram::AddSamples(const HistogramSamples& samples) {
|
| samples_->Add(samples);
|
| }
|
| @@ -477,8 +495,10 @@ Histogram::Histogram(const std::string& name,
|
| Sample maximum,
|
| const BucketRanges* ranges,
|
| HistogramBase::AtomicCount* counts,
|
| + HistogramBase::AtomicCount* logged_counts,
|
| uint32_t counts_size,
|
| - HistogramSamples::Metadata* meta)
|
| + HistogramSamples::Metadata* meta,
|
| + HistogramSamples::Metadata* logged_meta)
|
| : HistogramBase(name),
|
| bucket_ranges_(ranges),
|
| declared_min_(minimum),
|
| @@ -486,6 +506,8 @@ Histogram::Histogram(const std::string& name,
|
| if (ranges) {
|
| 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));
|
| }
|
| }
|
|
|
| @@ -776,10 +798,12 @@ HistogramBase* LinearHistogram::PersistentGet(
|
| Sample maximum,
|
| const BucketRanges* ranges,
|
| HistogramBase::AtomicCount* counts,
|
| + HistogramBase::AtomicCount* logged_counts,
|
| uint32_t counts_size,
|
| - HistogramSamples::Metadata* meta) {
|
| + HistogramSamples::Metadata* meta,
|
| + HistogramSamples::Metadata* logged_meta) {
|
| return new LinearHistogram(name, minimum, maximum, ranges, counts,
|
| - counts_size, meta);
|
| + logged_counts, counts_size, meta, logged_meta);
|
| }
|
|
|
| HistogramBase* LinearHistogram::FactoryGetWithRangeDescription(
|
| @@ -813,15 +837,12 @@ LinearHistogram::LinearHistogram(const std::string& name,
|
| Sample maximum,
|
| const BucketRanges* ranges,
|
| HistogramBase::AtomicCount* counts,
|
| + HistogramBase::AtomicCount* logged_counts,
|
| uint32_t counts_size,
|
| - HistogramSamples::Metadata* meta)
|
| - : Histogram(name,
|
| - minimum,
|
| - maximum,
|
| - ranges,
|
| - counts,
|
| - counts_size,
|
| - meta) {}
|
| + 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));
|
| @@ -919,8 +940,11 @@ HistogramBase* BooleanHistogram::PersistentGet(
|
| const std::string& name,
|
| const BucketRanges* ranges,
|
| HistogramBase::AtomicCount* counts,
|
| - HistogramSamples::Metadata* meta) {
|
| - return new BooleanHistogram(name, ranges, counts, meta);
|
| + HistogramBase::AtomicCount* logged_counts,
|
| + HistogramSamples::Metadata* meta,
|
| + HistogramSamples::Metadata* logged_meta) {
|
| + return new BooleanHistogram(name, ranges, counts, logged_counts, meta,
|
| + logged_meta);
|
| }
|
|
|
| HistogramType BooleanHistogram::GetHistogramType() const {
|
| @@ -934,8 +958,11 @@ BooleanHistogram::BooleanHistogram(const std::string& name,
|
| BooleanHistogram::BooleanHistogram(const std::string& name,
|
| const BucketRanges* ranges,
|
| HistogramBase::AtomicCount* counts,
|
| - HistogramSamples::Metadata* meta)
|
| - : LinearHistogram(name, 1, 2, ranges, counts, 2, meta) {}
|
| + 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) {
|
| std::string histogram_name;
|
| @@ -1019,9 +1046,12 @@ HistogramBase* CustomHistogram::PersistentGet(
|
| const std::string& name,
|
| const BucketRanges* ranges,
|
| HistogramBase::AtomicCount* counts,
|
| + HistogramBase::AtomicCount* logged_counts,
|
| uint32_t counts_size,
|
| - HistogramSamples::Metadata* meta) {
|
| - return new CustomHistogram(name, ranges, counts, counts_size, meta);
|
| + HistogramSamples::Metadata* meta,
|
| + HistogramSamples::Metadata* logged_meta) {
|
| + return new CustomHistogram(name, ranges, counts, logged_counts, counts_size,
|
| + meta, logged_meta);
|
| }
|
|
|
| HistogramType CustomHistogram::GetHistogramType() const {
|
| @@ -1053,15 +1083,19 @@ CustomHistogram::CustomHistogram(const std::string& name,
|
| 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* meta,
|
| + HistogramSamples::Metadata* logged_meta)
|
| : Histogram(name,
|
| ranges->range(1),
|
| ranges->range(ranges->bucket_count() - 1),
|
| ranges,
|
| counts,
|
| + logged_counts,
|
| counts_size,
|
| - meta) {}
|
| + meta,
|
| + logged_meta) {}
|
|
|
| bool CustomHistogram::SerializeInfoImpl(Pickle* pickle) const {
|
| if (!Histogram::SerializeInfoImpl(pickle))
|
|
|