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

Unified Diff: base/metrics/statistics_recorder.cc

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 | « base/metrics/statistics_recorder.h ('k') | base/metrics/statistics_recorder_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/metrics/statistics_recorder.cc
diff --git a/base/metrics/statistics_recorder.cc b/base/metrics/statistics_recorder.cc
index 482845045f2bfcf08596846aabb032c277b0f048..ba2101bccf50489ab4284801fd483e06f222fabc 100644
--- a/base/metrics/statistics_recorder.cc
+++ b/base/metrics/statistics_recorder.cc
@@ -87,6 +87,7 @@ StatisticsRecorder::~StatisticsRecorder() {
histograms_ = existing_histograms_.release();
callbacks_ = existing_callbacks_.release();
ranges_ = existing_ranges_.release();
+ providers_ = existing_providers_.release();
}
// static
@@ -113,6 +114,12 @@ bool StatisticsRecorder::IsActive() {
}
// static
+void StatisticsRecorder::RegisterHistogramProvider(
+ const WeakPtr<HistogramProvider>& provider) {
+ providers_->push_back(provider);
+}
+
+// static
HistogramBase* StatisticsRecorder::RegisterOrDeleteDuplicate(
HistogramBase* histogram) {
HistogramBase* histogram_to_delete = nullptr;
@@ -307,6 +314,20 @@ HistogramBase* StatisticsRecorder::FindHistogram(base::StringPiece name) {
}
// static
+void StatisticsRecorder::ImportProvidedHistograms() {
+ if (!providers_)
+ return;
+
+ // Merge histogram data from each provider in turn.
+ for (const WeakPtr<HistogramProvider>& provider : *providers_) {
+ // Weak-pointer may be invalid if the provider was destructed, though they
+ // generally never are.
+ if (provider)
+ provider->MergeHistogramDeltas();
+ }
+}
+
+// static
StatisticsRecorder::HistogramIterator StatisticsRecorder::begin(
bool include_persistent) {
DCHECK(histograms_);
@@ -346,6 +367,8 @@ void StatisticsRecorder::GetSnapshot(const std::string& query,
if (!histograms_)
return;
+ ImportGlobalPersistentHistograms();
+
for (const auto& entry : *histograms_) {
if (entry.second->histogram_name().find(query) != std::string::npos)
snapshot->push_back(entry.second);
@@ -458,10 +481,12 @@ StatisticsRecorder::StatisticsRecorder() {
existing_histograms_.reset(histograms_);
existing_callbacks_.reset(callbacks_);
existing_ranges_.reset(ranges_);
+ existing_providers_.reset(providers_);
histograms_ = new HistogramMap;
callbacks_ = new CallbackMap;
ranges_ = new RangesMap;
+ providers_ = new HistogramProviders;
InitLogOnShutdownWithoutLock();
}
@@ -479,14 +504,17 @@ void StatisticsRecorder::Reset() {
std::unique_ptr<HistogramMap> histograms_deleter;
std::unique_ptr<CallbackMap> callbacks_deleter;
std::unique_ptr<RangesMap> ranges_deleter;
+ std::unique_ptr<HistogramProviders> providers_deleter;
{
base::AutoLock auto_lock(lock_.Get());
histograms_deleter.reset(histograms_);
callbacks_deleter.reset(callbacks_);
ranges_deleter.reset(ranges_);
+ providers_deleter.reset(providers_);
histograms_ = nullptr;
callbacks_ = nullptr;
ranges_ = nullptr;
+ providers_ = nullptr;
}
// We are going to leak the histograms and the ranges.
}
@@ -506,6 +534,8 @@ StatisticsRecorder::CallbackMap* StatisticsRecorder::callbacks_ = nullptr;
// static
StatisticsRecorder::RangesMap* StatisticsRecorder::ranges_ = nullptr;
// static
+StatisticsRecorder::HistogramProviders* StatisticsRecorder::providers_;
+// static
base::LazyInstance<base::Lock>::Leaky StatisticsRecorder::lock_ =
LAZY_INSTANCE_INITIALIZER;
« no previous file with comments | « base/metrics/statistics_recorder.h ('k') | base/metrics/statistics_recorder_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698