Chromium Code Reviews| Index: base/metrics/statistics_recorder.h |
| diff --git a/base/metrics/statistics_recorder.h b/base/metrics/statistics_recorder.h |
| index 6deddae0109008c10afcff20a58bea52b1625ee7..fbd532f64faa16a287b209a72901d96de5200e42 100644 |
| --- a/base/metrics/statistics_recorder.h |
| +++ b/base/metrics/statistics_recorder.h |
| @@ -23,6 +23,7 @@ |
| #include "base/gtest_prod_util.h" |
| #include "base/lazy_instance.h" |
| #include "base/macros.h" |
| +#include "base/memory/weak_ptr.h" |
| #include "base/metrics/histogram_base.h" |
| #include "base/strings/string_piece.h" |
| #include "base/synchronization/lock.h" |
| @@ -62,8 +63,17 @@ class BASE_EXPORT StatisticsRecorder { |
| } |
| }; |
| + // An interface class that allows the StatisticsRecorder to forcibly merge |
| + // histograms from providers when necessary. |
| + class HistogramProvider { |
| + public: |
| + // Merges all histogram information into the global versions. |
| + virtual void MergeHistogramDeltas() = 0; |
| + }; |
| + |
| typedef std::map<StringKey, HistogramBase*> HistogramMap; |
| typedef std::vector<HistogramBase*> Histograms; |
| + typedef std::vector<WeakPtr<HistogramProvider>> HistogramProviders; |
| // A class for iterating over the histograms held within this global resource. |
| class BASE_EXPORT HistogramIterator { |
| @@ -101,6 +111,11 @@ class BASE_EXPORT StatisticsRecorder { |
| // Find out if histograms can now be registered into our list. |
| static bool IsActive(); |
| + // Register a provider of histograms that can be called to merge those into |
| + // the global StatisticsRecorder. |
|
Alexei Svitkine (slow)
2017/01/27 16:22:03
Nit: Mention ImportProvidedHistograms() here.
bcwhite
2017/01/27 18:05:31
Done.
|
| + static void RegisterHistogramProvider( |
| + const WeakPtr<HistogramProvider>& provider); |
| + |
| // Register, or add a new histogram to the collection of statistics. If an |
| // identically named histogram is already registered, then the argument |
| // |histogram| will deleted. The returned value is always the registered |
| @@ -134,6 +149,9 @@ class BASE_EXPORT StatisticsRecorder { |
| // safe. It returns NULL if a matching histogram is not found. |
| static HistogramBase* FindHistogram(base::StringPiece name); |
| + // Imports histograms from providers. This must be called on the UI thread. |
| + static void ImportProvidedHistograms(); |
| + |
| // Support for iterating over known histograms. |
| static HistogramIterator begin(bool include_persistent); |
| static HistogramIterator end(); |
| @@ -220,6 +238,7 @@ class BASE_EXPORT StatisticsRecorder { |
| std::unique_ptr<HistogramMap> existing_histograms_; |
| std::unique_ptr<CallbackMap> existing_callbacks_; |
| std::unique_ptr<RangesMap> existing_ranges_; |
| + std::unique_ptr<HistogramProviders> existing_providers_; |
| bool vlog_initialized_ = false; |
| @@ -229,6 +248,7 @@ class BASE_EXPORT StatisticsRecorder { |
| static HistogramMap* histograms_; |
| static CallbackMap* callbacks_; |
| static RangesMap* ranges_; |
| + static HistogramProviders* providers_; |
| // Lock protects access to above maps. This is a LazyInstance to avoid races |
| // when the above methods are used before Initialize(). Previously each method |