Index: chrome/browser/metrics/metrics_service.cc |
diff --git a/chrome/browser/metrics/metrics_service.cc b/chrome/browser/metrics/metrics_service.cc |
index 55c13212d1436296e19024622d75a1e82161f762..e3da5fe98b16f79d4a2bbfdd5f69de402b80c15b 100644 |
--- a/chrome/browser/metrics/metrics_service.cc |
+++ b/chrome/browser/metrics/metrics_service.cc |
@@ -1120,6 +1120,7 @@ void MetricsService::ReceivedProfilerData( |
if (!initial_metrics_log_.get()) { |
initial_metrics_log_.reset( |
new MetricsLog(client_id_, session_id_, MetricsLog::ONGOING_LOG)); |
+ NotifyOnNewMetricsLog(); |
} |
initial_metrics_log_->RecordProfilerData(process_data, process_type); |
@@ -1206,6 +1207,22 @@ int MetricsService::GetLowEntropySource() { |
return low_entropy_source_; |
} |
+void MetricsService::AddMetricsLogObserver(MetricsLogObserver* observer) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ metrics_log_observers_.AddObserver(observer); |
+} |
+ |
+void MetricsService::RemoveMetricsLogObserver(MetricsLogObserver* observer) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ metrics_log_observers_.RemoveObserver(observer); |
bengr
2014/05/06 17:14:39
Are the observers guaranteed to outlive the Metric
bolian
2014/05/06 18:00:08
For the current usage, Yes.
If not in the future,
|
+} |
+ |
+void MetricsService::NotifyOnNewMetricsLog() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ FOR_EACH_OBSERVER( |
+ MetricsLogObserver, metrics_log_observers_, OnNewMetricsLog()); |
+} |
+ |
// static |
std::string MetricsService::GenerateClientID() { |
return base::GenerateGUID(); |
@@ -1245,6 +1262,7 @@ void MetricsService::OpenNewLog() { |
log_manager_.BeginLoggingWithLog( |
new MetricsLog(client_id_, session_id_, MetricsLog::ONGOING_LOG)); |
+ NotifyOnNewMetricsLog(); |
if (state_ == INITIALIZED) { |
// We only need to schedule that run once. |
state_ = INIT_TASK_SCHEDULED; |
@@ -1542,6 +1560,7 @@ void MetricsService::PrepareInitialStabilityLog() { |
scoped_ptr<MetricsLog> initial_stability_log( |
new MetricsLog(client_id_, session_id_, |
MetricsLog::INITIAL_STABILITY_LOG)); |
+ NotifyOnNewMetricsLog(); |
if (!initial_stability_log->LoadSavedEnvironmentFromPrefs()) |
return; |
initial_stability_log->RecordStabilityMetrics(base::TimeDelta(), |
@@ -2082,3 +2101,19 @@ bool MetricsServiceHelper::IsCrashReportingEnabled() { |
return false; |
#endif |
} |
+ |
+void MetricsServiceHelper::AddMetricsLogObserver( |
+ MetricsLogObserver* observer) { |
+ MetricsService* metrics_service = g_browser_process->metrics_service(); |
+ if (metrics_service != NULL) { |
bengr
2014/05/06 17:14:39
When would this be null?
bolian
2014/05/06 18:00:08
Just as a safety check before dereferring it. In t
|
+ metrics_service->AddMetricsLogObserver(observer); |
+ } |
+} |
+ |
+void MetricsServiceHelper::RemoveMetricsLogObserver( |
+ MetricsLogObserver* observer) { |
+ MetricsService* metrics_service = g_browser_process->metrics_service(); |
+ if (metrics_service != NULL) { |
+ metrics_service->RemoveMetricsLogObserver(observer); |
+ } |
+} |