Index: base/metrics/histogram.cc |
diff --git a/base/metrics/histogram.cc b/base/metrics/histogram.cc |
index c33d2f03c05c769d0dd9bad12c85a26ce3550460..df1368e6b07db5b1a41560ce0171ce32a9846dc7 100644 |
--- a/base/metrics/histogram.cc |
+++ b/base/metrics/histogram.cc |
@@ -272,10 +272,11 @@ HistogramBase* Histogram::PersistentGet(const std::string& name, |
Sample maximum, |
const BucketRanges* ranges, |
HistogramBase::AtomicCount* counts, |
+ HistogramBase::AtomicCount* logged, |
uint32_t counts_size, |
HistogramSamples::Metadata* meta) { |
- return new Histogram(name, minimum, maximum, ranges, counts, counts_size, |
- meta); |
+ return new Histogram(name, minimum, maximum, ranges, counts, logged, |
+ counts_size, meta); |
} |
// Calculate what range of values are held in each bucket. |
@@ -430,6 +431,21 @@ scoped_ptr<HistogramSamples> Histogram::SnapshotSamples() const { |
return SnapshotSampleVector(); |
} |
+scoped_ptr<HistogramSamples> Histogram::SnapshotDelta() { |
+ scoped_ptr<HistogramSamples> snapshot = SnapshotSampleVector(); |
+ if (!logged_) { |
+ // If nothing has been previously logged, save this one as logged and |
Alexei Svitkine (slow)
2016/02/09 19:46:51
Nit: save this one as |logged_counts_| and
bcwhite
2016/02/11 16:42:38
Done.
|
+ // gather another snapshot to return. |
+ logged_.swap(snapshot); |
+ return SnapshotSampleVector(); |
+ } |
+ |
+ // Subtract what was previously logged and update that information. |
+ snapshot->Subtract(*logged_); |
+ logged_->Add(*snapshot); |
+ return snapshot; |
+} |
+ |
void Histogram::AddSamples(const HistogramSamples& samples) { |
samples_->Add(samples); |
} |
@@ -477,6 +493,7 @@ Histogram::Histogram(const std::string& name, |
Sample maximum, |
const BucketRanges* ranges, |
HistogramBase::AtomicCount* counts, |
+ HistogramBase::AtomicCount* logged, |
uint32_t counts_size, |
HistogramSamples::Metadata* meta) |
: HistogramBase(name), |
@@ -486,6 +503,8 @@ Histogram::Histogram(const std::string& name, |
if (ranges) { |
samples_.reset(new SampleVector(HashMetricName(name), |
counts, counts_size, meta, ranges)); |
+ logged_.reset(new SampleVector(samples_->id(), |
+ logged, counts_size, meta, ranges)); |
} |
} |
@@ -776,9 +795,10 @@ HistogramBase* LinearHistogram::PersistentGet( |
Sample maximum, |
const BucketRanges* ranges, |
HistogramBase::AtomicCount* counts, |
+ HistogramBase::AtomicCount* logged, |
uint32_t counts_size, |
HistogramSamples::Metadata* meta) { |
- return new LinearHistogram(name, minimum, maximum, ranges, counts, |
+ return new LinearHistogram(name, minimum, maximum, ranges, counts, logged, |
counts_size, meta); |
} |
@@ -813,6 +833,7 @@ LinearHistogram::LinearHistogram(const std::string& name, |
Sample maximum, |
const BucketRanges* ranges, |
HistogramBase::AtomicCount* counts, |
+ HistogramBase::AtomicCount* logged, |
uint32_t counts_size, |
HistogramSamples::Metadata* meta) |
: Histogram(name, |
@@ -820,6 +841,7 @@ LinearHistogram::LinearHistogram(const std::string& name, |
maximum, |
ranges, |
counts, |
+ logged, |
counts_size, |
meta) {} |
@@ -919,8 +941,9 @@ HistogramBase* BooleanHistogram::PersistentGet( |
const std::string& name, |
const BucketRanges* ranges, |
HistogramBase::AtomicCount* counts, |
+ HistogramBase::AtomicCount* logged, |
HistogramSamples::Metadata* meta) { |
- return new BooleanHistogram(name, ranges, counts, meta); |
+ return new BooleanHistogram(name, ranges, counts, logged, meta); |
} |
HistogramType BooleanHistogram::GetHistogramType() const { |
@@ -934,8 +957,9 @@ BooleanHistogram::BooleanHistogram(const std::string& name, |
BooleanHistogram::BooleanHistogram(const std::string& name, |
const BucketRanges* ranges, |
HistogramBase::AtomicCount* counts, |
+ HistogramBase::AtomicCount* logged, |
HistogramSamples::Metadata* meta) |
- : LinearHistogram(name, 1, 2, ranges, counts, 2, meta) {} |
+ : LinearHistogram(name, 1, 2, ranges, counts, logged, 2, meta) {} |
HistogramBase* BooleanHistogram::DeserializeInfoImpl(PickleIterator* iter) { |
std::string histogram_name; |
@@ -1019,9 +1043,10 @@ HistogramBase* CustomHistogram::PersistentGet( |
const std::string& name, |
const BucketRanges* ranges, |
HistogramBase::AtomicCount* counts, |
+ HistogramBase::AtomicCount* logged, |
uint32_t counts_size, |
HistogramSamples::Metadata* meta) { |
- return new CustomHistogram(name, ranges, counts, counts_size, meta); |
+ return new CustomHistogram(name, ranges, counts, logged, counts_size, meta); |
} |
HistogramType CustomHistogram::GetHistogramType() const { |
@@ -1053,6 +1078,7 @@ CustomHistogram::CustomHistogram(const std::string& name, |
CustomHistogram::CustomHistogram(const std::string& name, |
const BucketRanges* ranges, |
HistogramBase::AtomicCount* counts, |
+ HistogramBase::AtomicCount* logged, |
uint32_t counts_size, |
HistogramSamples::Metadata* meta) |
: Histogram(name, |
@@ -1060,6 +1086,7 @@ CustomHistogram::CustomHistogram(const std::string& name, |
ranges->range(ranges->bucket_count() - 1), |
ranges, |
counts, |
+ logged, |
counts_size, |
meta) {} |