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

Unified Diff: base/metrics/statistics_recorder.h

Issue 2658163002: Merge histograms from providers into StatisticsRecorder for display. (Closed)
Patch Set: rebased Created 3 years, 11 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 | base/metrics/statistics_recorder.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/metrics/statistics_recorder.h
diff --git a/base/metrics/statistics_recorder.h b/base/metrics/statistics_recorder.h
index 6deddae0109008c10afcff20a58bea52b1625ee7..193bad79703df1663ff5a7d8049186a5285d93e8 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,12 @@ 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. Calls to ImportProvidedHistograms() will
+ // fetch from registered providers.
+ 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 +150,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 +239,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 +249,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
« no previous file with comments | « no previous file | base/metrics/statistics_recorder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698