Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3900)

Unified Diff: base/metrics/histogram.cc

Issue 1719363002: Collect information about failing histogram factory calls. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(&registered_ranges);
+ base::debug::Alias(&histogram_ref);
+ base::debug::Alias(&tentative_histogram);
+ base::debug::Alias(&allocator);
+ base::debug::Alias(&tentative_histogram);
}
+#endif
+
return histogram;
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698