diff options
author | glider@chromium.org <glider@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-31 07:37:09 +0000 |
---|---|---|
committer | glider@chromium.org <glider@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-31 07:37:09 +0000 |
commit | 9b3bbd6118178652747f138fab1fc9ed045d4e0e (patch) | |
tree | e5ffb189a017464aff3fcb775a91c3125219d475 /base/metrics | |
parent | 68cb4f9bcba525de7e166954888ab02d61aea95b (diff) | |
download | chromium_src-9b3bbd6118178652747f138fab1fc9ed045d4e0e.zip chromium_src-9b3bbd6118178652747f138fab1fc9ed045d4e0e.tar.gz chromium_src-9b3bbd6118178652747f138fab1fc9ed045d4e0e.tar.bz2 |
Introduce the ANNOTATE_LEAKING_OBJECT_PTR annotation that can be used to mark
heap allocated objects as intentionally leaked ones.
Annotate the histograms produced by {Histogram,BooleanHistogram,LinearHistogram,CustomHistogram}::FactoryGet(), as leaked.
Rename StatsHistogram::StatsHistogramFactoryGet to StatsHistogram::FactoryGet, annotate the result as leaky, update the suppressions.
BUG=79322
Review URL: http://codereview.chromium.org/7071036
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@87278 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/metrics')
-rw-r--r-- | base/metrics/histogram.cc | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/base/metrics/histogram.cc b/base/metrics/histogram.cc index 63e5ae6..2441c51 100644 --- a/base/metrics/histogram.cc +++ b/base/metrics/histogram.cc @@ -14,6 +14,7 @@ #include <algorithm> #include <string> +#include "base/debug/leak_annotations.h" #include "base/logging.h" #include "base/pickle.h" #include "base/stringprintf.h" @@ -1030,17 +1031,27 @@ bool StatisticsRecorder::IsActive() { } Histogram* StatisticsRecorder::RegisterOrDeleteDuplicate(Histogram* histogram) { + // As per crbug.com/79322 the histograms are intentionally leaked, so we need + // to annotate them. Because ANNOTATE_LEAKING_OBJECT_PTR may be used only once + // for an object, the duplicates should not be annotated. + // Callers are responsible for not calling RegisterOrDeleteDuplicate(ptr) + // twice if (lock_ == NULL) || (!histograms_). DCHECK(histogram->HasValidRangeChecksum()); - if (lock_ == NULL) + if (lock_ == NULL) { + ANNOTATE_LEAKING_OBJECT_PTR(histogram); // see crbug.com/79322 return histogram; + } base::AutoLock auto_lock(*lock_); - if (!histograms_) + if (!histograms_) { + ANNOTATE_LEAKING_OBJECT_PTR(histogram); // see crbug.com/79322 return histogram; + } const std::string name = histogram->histogram_name(); HistogramMap::iterator it = histograms_->find(name); // Avoid overwriting a previous registration. if (histograms_->end() == it) { (*histograms_)[name] = histogram; + ANNOTATE_LEAKING_OBJECT_PTR(histogram); // see crbug.com/79322 } else { delete histogram; // We already have one by this name. histogram = it->second; |