Index: chrome/browser/metrics/metrics_service.cc |
diff --git a/chrome/browser/metrics/metrics_service.cc b/chrome/browser/metrics/metrics_service.cc |
index 8f56fa16d01e8be32eb1e67b50c9c37edd69e9c6..25c19e27680d2076c5f5833d96a5084918f4ea83 100644 |
--- a/chrome/browser/metrics/metrics_service.cc |
+++ b/chrome/browser/metrics/metrics_service.cc |
@@ -1044,6 +1044,7 @@ void MetricsService::ReceivedProfilerData( |
initial_metrics_log_.reset( |
new MetricsLog(state_manager_->client_id(), session_id_, |
MetricsLog::ONGOING_LOG)); |
+ NotifyOnNewMetricsLog(); |
} |
initial_metrics_log_->RecordProfilerData(process_data, process_type); |
@@ -1077,6 +1078,22 @@ void MetricsService::GetUptimes(PrefService* pref, |
} |
} |
+void MetricsService::AddMetricsLogObserver(MetricsLogObserver* observer) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
Ilya Sherman
2014/05/07 01:03:16
nit: Please use a ThreadChecker rather than referr
bolian
2014/05/07 02:20:26
Done.
|
+ metrics_log_observers_.AddObserver(observer); |
+} |
+ |
+void MetricsService::RemoveMetricsLogObserver(MetricsLogObserver* observer) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ metrics_log_observers_.RemoveObserver(observer); |
+} |
+ |
+void MetricsService::NotifyOnNewMetricsLog() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ FOR_EACH_OBSERVER( |
+ MetricsLogObserver, metrics_log_observers_, OnNewMetricsLog()); |
+} |
+ |
//------------------------------------------------------------------------------ |
// State save methods |
@@ -1112,6 +1129,7 @@ void MetricsService::OpenNewLog() { |
log_manager_.BeginLoggingWithLog( |
new MetricsLog(state_manager_->client_id(), session_id_, |
MetricsLog::ONGOING_LOG)); |
+ NotifyOnNewMetricsLog(); |
if (state_ == INITIALIZED) { |
// We only need to schedule that run once. |
state_ = INIT_TASK_SCHEDULED; |
@@ -1409,6 +1427,7 @@ void MetricsService::PrepareInitialStabilityLog() { |
scoped_ptr<MetricsLog> initial_stability_log( |
new MetricsLog(state_manager_->client_id(), session_id_, |
MetricsLog::INITIAL_STABILITY_LOG)); |
+ NotifyOnNewMetricsLog(); |
if (!initial_stability_log->LoadSavedEnvironmentFromPrefs()) |
return; |
initial_stability_log->RecordStabilityMetrics(base::TimeDelta(), |
@@ -1938,3 +1957,19 @@ bool MetricsServiceHelper::IsCrashReportingEnabled() { |
return false; |
#endif |
} |
+ |
+void MetricsServiceHelper::AddMetricsLogObserver( |
+ MetricsLogObserver* observer) { |
Ilya Sherman
2014/05/07 01:03:16
nit: Looks like this can fit on the previous line.
bolian
2014/05/07 02:20:26
after renaming, it cannot.
|
+ MetricsService* metrics_service = g_browser_process->metrics_service(); |
+ if (metrics_service != NULL) { |
Ilya Sherman
2014/05/07 01:03:16
nit: No need for "!= NULL".
bolian
2014/05/07 02:20:26
Done.
|
+ metrics_service->AddMetricsLogObserver(observer); |
+ } |
Ilya Sherman
2014/05/07 01:03:16
nit: No need for curlies.
bolian
2014/05/07 02:20:26
Done.
|
+} |
+ |
+void MetricsServiceHelper::RemoveMetricsLogObserver( |
+ MetricsLogObserver* observer) { |
+ MetricsService* metrics_service = g_browser_process->metrics_service(); |
+ if (metrics_service != NULL) { |
+ metrics_service->RemoveMetricsLogObserver(observer); |
+ } |
+} |