Chromium Code Reviews| 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); |
| + } |
| +} |