Index: base/metrics/histogram.cc |
diff --git a/base/metrics/histogram.cc b/base/metrics/histogram.cc |
index ea4f8167fa28cc7098ce233cddbd7ed77fd23a77..09d134965c80a8a605cb313dcc969e52a5de9d41 100644 |
--- a/base/metrics/histogram.cc |
+++ b/base/metrics/histogram.cc |
@@ -154,10 +154,18 @@ HistogramBase* Histogram::Factory::Build() { |
ImportPersistentHistograms(); |
HistogramBase* histogram = StatisticsRecorder::FindHistogram(name_); |
+ |
+ // crbug.com/588946 debugging. See comment at end of function. |
+ const BucketRanges* created_ranges; |
Alexei Svitkine (slow)
2016/02/26 19:12:50
Please initialize these to nullptr or something, e
bcwhite
2016/02/26 20:31:18
Done.
|
+ const BucketRanges* registered_ranges; |
+ PersistentMemoryAllocator::Reference histogram_ref; |
+ HistogramBase* tentative_histogram; |
+ PersistentMemoryAllocator* allocator; |
+ |
if (!histogram) { |
// To avoid racy destruction at shutdown, the following will be leaked. |
- const BucketRanges* created_ranges = CreateRanges(); |
- const BucketRanges* registered_ranges = |
+ created_ranges = CreateRanges(); |
+ registered_ranges = |
StatisticsRecorder::RegisterOrDeleteDuplicateRanges(created_ranges); |
// In most cases, the bucket-count, minimum, and maximum values are known |
@@ -176,9 +184,9 @@ HistogramBase* Histogram::Factory::Build() { |
// that is off by default. If the allocator doesn't exist or if |
// allocating from it fails, code below will allocate the histogram from |
// the process heap. |
- PersistentMemoryAllocator::Reference histogram_ref = 0; |
- HistogramBase* tentative_histogram = nullptr; |
- PersistentMemoryAllocator* allocator = |
+ histogram_ref = 0; |
+ tentative_histogram = nullptr; |
+ allocator = |
GetPersistentHistogramMemoryAllocator(); |
if (allocator) { |
flags_ |= HistogramBase::kIsPersistent; |
@@ -223,8 +231,36 @@ HistogramBase* Histogram::Factory::Build() { |
// on dereference, but extension/Pepper APIs will guard against NULL and not |
// crash. |
DLOG(ERROR) << "Histogram " << name_ << " has bad construction arguments"; |
- return nullptr; |
+ histogram = nullptr; |
+ } |
+ |
+#if !DCHECK_IS_ON() // Don't affect tests, only release builds. |
+ // For the moment, crash here so that collected crash reports have access |
+ // to the construction values in order to figure out why this is failing. |
+ // TODO(bcwhite): Remove this once crbug.com/588946 is resolved. Also remove |
+ // from beta-branch because we don't want crashes due to misbehaving |
+ // extensions (see comment above). |
+ if (!histogram) { |
+ HistogramType histogram_type = histogram_type_; |
+ HistogramBase::Sample minimum = minimum_; |
+ HistogramBase::Sample maximum = maximum_; |
+ uint32_t bucket_count = bucket_count_; |
+ int32_t flags = flags_; |
+ CHECK(histogram); |
+ base::debug::Alias(&histogram_type); |
+ base::debug::Alias(&minimum); |
+ base::debug::Alias(&maximum); |
+ base::debug::Alias(&bucket_count); |
+ base::debug::Alias(&flags); |
+ base::debug::Alias(&created_ranges); |
+ base::debug::Alias(®istered_ranges); |
+ base::debug::Alias(&histogram_ref); |
+ base::debug::Alias(&tentative_histogram); |
+ base::debug::Alias(&allocator); |
+ base::debug::Alias(&tentative_histogram); |
} |
+#endif |
+ |
return histogram; |
} |