Chromium Code Reviews| 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; |
| } |