Index: base/metrics/histogram.cc |
diff --git a/base/metrics/histogram.cc b/base/metrics/histogram.cc |
index c35f76ce5548d8f0264f26fbeefab9c5d62aea82..bba04c928cb3ca743dcc07e284ff3ac5a858bc24 100644 |
--- a/base/metrics/histogram.cc |
+++ b/base/metrics/histogram.cc |
@@ -414,7 +414,7 @@ bool Histogram::InspectConstructionArguments(const std::string& name, |
} |
uint64_t Histogram::name_hash() const { |
- return samples_->id(); |
+ return unlogged_samples_->id(); |
} |
HistogramType Histogram::GetHistogramType() const { |
@@ -445,7 +445,7 @@ void Histogram::AddCount(int value, int count) { |
NOTREACHED(); |
return; |
} |
- samples_->Accumulate(value, count); |
+ unlogged_samples_->Accumulate(value, count); |
FindAndRunCallback(value); |
} |
@@ -457,17 +457,10 @@ std::unique_ptr<HistogramSamples> Histogram::SnapshotSamples() const { |
std::unique_ptr<HistogramSamples> Histogram::SnapshotDelta() { |
DCHECK(!final_delta_created_); |
- std::unique_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_); |
+ std::unique_ptr<HistogramSamples> snapshot = SnapshotUnloggedSamples(); |
+ unlogged_samples_->Subtract(*snapshot); |
logged_samples_->Add(*snapshot); |
+ |
return snapshot; |
} |
@@ -475,20 +468,15 @@ std::unique_ptr<HistogramSamples> Histogram::SnapshotFinalDelta() const { |
DCHECK(!final_delta_created_); |
final_delta_created_ = true; |
- std::unique_ptr<HistogramSamples> snapshot = SnapshotSampleVector(); |
- |
- // Subtract what was previously logged and then return. |
- if (logged_samples_) |
- snapshot->Subtract(*logged_samples_); |
- return snapshot; |
+ return SnapshotUnloggedSamples(); |
} |
void Histogram::AddSamples(const HistogramSamples& samples) { |
- samples_->Add(samples); |
+ unlogged_samples_->Add(samples); |
} |
bool Histogram::AddSamplesFromPickle(PickleIterator* iter) { |
- return samples_->AddFromPickle(iter); |
+ return unlogged_samples_->AddFromPickle(iter); |
} |
// The following methods provide a graphical histogram display. |
@@ -521,8 +509,10 @@ Histogram::Histogram(const std::string& name, |
bucket_ranges_(ranges), |
declared_min_(minimum), |
declared_max_(maximum) { |
- if (ranges) |
- samples_.reset(new SampleVector(HashMetricName(name), ranges)); |
+ if (ranges) { |
+ unlogged_samples_.reset(new SampleVector(HashMetricName(name), ranges)); |
+ logged_samples_.reset(new SampleVector(unlogged_samples_->id(), ranges)); |
bcwhite
2017/05/10 12:40:33
Historical Note: This was avoided in the past so a
altimin
2017/05/10 13:08:55
Acknowledged.
|
+ } |
} |
Histogram::Histogram(const std::string& name, |
@@ -538,10 +528,10 @@ Histogram::Histogram(const std::string& name, |
declared_min_(minimum), |
declared_max_(maximum) { |
if (ranges) { |
- samples_.reset( |
+ unlogged_samples_.reset( |
new PersistentSampleVector(HashMetricName(name), ranges, meta, counts)); |
logged_samples_.reset(new PersistentSampleVector( |
- samples_->id(), ranges, logged_meta, logged_counts)); |
+ unlogged_samples_->id(), ranges, logged_meta, logged_counts)); |
} |
} |
@@ -599,9 +589,15 @@ HistogramBase* Histogram::DeserializeInfoImpl(PickleIterator* iter) { |
} |
std::unique_ptr<SampleVector> Histogram::SnapshotSampleVector() const { |
- std::unique_ptr<SampleVector> samples( |
- new SampleVector(samples_->id(), bucket_ranges())); |
- samples->Add(*samples_); |
+ std::unique_ptr<SampleVector> samples = SnapshotUnloggedSamples(); |
+ samples->Add(*logged_samples_); |
+ return samples; |
+} |
+ |
+std::unique_ptr<SampleVector> Histogram::SnapshotUnloggedSamples() const { |
+ std::unique_ptr<SampleVector> samples = |
+ base::MakeUnique<SampleVector>(unlogged_samples_->id(), bucket_ranges()); |
+ samples->Add(*unlogged_samples_); |
return samples; |
} |