Index: base/metrics/histogram.cc |
diff --git a/base/metrics/histogram.cc b/base/metrics/histogram.cc |
index b7ef10749f86c7387f553137882474497801e311..b7aa34826ef4605380c79057c03c839b2130a298 100644 |
--- a/base/metrics/histogram.cc |
+++ b/base/metrics/histogram.cc |
@@ -164,6 +164,8 @@ HistogramBase* Histogram::Factory::Build() { |
minimum_ = registered_ranges->range(1); |
maximum_ = registered_ranges->range(bucket_count_ - 1); |
} |
+ DCHECK_EQ(minimum_, registered_ranges->range(1)); |
+ DCHECK_EQ(maximum_, registered_ranges->range(bucket_count_ - 1)); |
// Try to create the histogram using a "persistent" allocator. As of |
// 2016-02-25, the availability of such is controlled by a base::Feature |
@@ -358,6 +360,18 @@ uint32_t Histogram::FindCorruption(const HistogramSamples& samples) const { |
return inconsistencies; |
} |
+Sample Histogram::declared_min() const { |
+ if (bucket_ranges_->bucket_count() < 2) |
+ return -1; |
+ return bucket_ranges_->range(1); |
+} |
+ |
+Sample Histogram::declared_max() const { |
+ if (bucket_ranges_->bucket_count() < 2) |
+ return -1; |
+ return bucket_ranges_->range(bucket_ranges_->bucket_count() - 1); |
+} |
+ |
Sample Histogram::ranges(uint32_t i) const { |
return bucket_ranges_->range(i); |
} |
@@ -431,9 +445,9 @@ HistogramType Histogram::GetHistogramType() const { |
bool Histogram::HasConstructionArguments(Sample expected_minimum, |
Sample expected_maximum, |
uint32_t expected_bucket_count) const { |
- return ((expected_minimum == declared_min_) && |
- (expected_maximum == declared_max_) && |
- (expected_bucket_count == bucket_count())); |
+ return (expected_bucket_count == bucket_count() && |
+ expected_minimum == declared_min() && |
+ expected_maximum == declared_max()); |
} |
void Histogram::Add(int value) { |
@@ -462,7 +476,10 @@ std::unique_ptr<HistogramSamples> Histogram::SnapshotSamples() const { |
} |
std::unique_ptr<HistogramSamples> Histogram::SnapshotDelta() { |
+#if DCHECK_IS_ON() |
DCHECK(!final_delta_created_); |
+#endif |
+ |
// The code below has subtle thread-safety guarantees! All changes to |
// the underlying SampleVectors use atomic integer operations, which guarantee |
// eventual consistency, but do not guarantee full synchronization between |
@@ -483,8 +500,10 @@ std::unique_ptr<HistogramSamples> Histogram::SnapshotDelta() { |
} |
std::unique_ptr<HistogramSamples> Histogram::SnapshotFinalDelta() const { |
+#if DCHECK_IS_ON() |
DCHECK(!final_delta_created_); |
final_delta_created_ = true; |
+#endif |
return SnapshotUnloggedSamples(); |
} |
@@ -519,14 +538,12 @@ bool Histogram::SerializeInfoImpl(Pickle* pickle) const { |
pickle->WriteUInt32(bucket_ranges()->checksum()); |
} |
+// TODO(bcwhite): Remove minimum/maximum parameters from here and call chain. |
Histogram::Histogram(const std::string& name, |
Sample minimum, |
Sample maximum, |
const BucketRanges* ranges) |
- : HistogramBase(name), |
- bucket_ranges_(ranges), |
- declared_min_(minimum), |
- declared_max_(maximum) { |
+ : HistogramBase(name), bucket_ranges_(ranges) { |
// TODO(bcwhite): Make this a DCHECK once crbug/734049 is resolved. |
CHECK(ranges) << name << ": " << minimum << "-" << maximum; |
unlogged_samples_.reset(new SampleVector(HashMetricName(name), ranges)); |
@@ -541,10 +558,7 @@ Histogram::Histogram(const std::string& name, |
const DelayedPersistentAllocation& logged_counts, |
HistogramSamples::Metadata* meta, |
HistogramSamples::Metadata* logged_meta) |
- : HistogramBase(name), |
- bucket_ranges_(ranges), |
- declared_min_(minimum), |
- declared_max_(maximum) { |
+ : HistogramBase(name), bucket_ranges_(ranges) { |
// TODO(bcwhite): Make this a DCHECK once crbug/734049 is resolved. |
CHECK(ranges) << name << ": " << minimum << "-" << maximum; |
unlogged_samples_.reset( |