Index: chrome/browser/metrics/metrics_service.cc |
diff --git a/chrome/browser/metrics/metrics_service.cc b/chrome/browser/metrics/metrics_service.cc |
index d27ca1b9b5631676066742327ac9ad94ac2bb06d..1fa803d45d045692a227dcf59115810ce6af2541 100644 |
--- a/chrome/browser/metrics/metrics_service.cc |
+++ b/chrome/browser/metrics/metrics_service.cc |
@@ -1043,6 +1043,7 @@ void MetricsService::ReceivedProfilerData( |
initial_metrics_log_.reset( |
new MetricsLog(state_manager_->client_id(), session_id_, |
MetricsLog::ONGOING_LOG)); |
+ NotifyOnDidCreateMetricsLog(); |
} |
initial_metrics_log_->RecordProfilerData(process_data, process_type); |
@@ -1076,6 +1077,22 @@ void MetricsService::GetUptimes(PrefService* pref, |
} |
} |
+void MetricsService::AddObserver(MetricsServiceObserver* observer) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ observers_.AddObserver(observer); |
+} |
+ |
+void MetricsService::RemoveObserver(MetricsServiceObserver* observer) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ observers_.RemoveObserver(observer); |
+} |
+ |
+void MetricsService::NotifyOnDidCreateMetricsLog() { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ FOR_EACH_OBSERVER( |
+ MetricsServiceObserver, observers_, OnDidCreateMetricsLog()); |
+} |
+ |
//------------------------------------------------------------------------------ |
// State save methods |
@@ -1111,6 +1128,7 @@ void MetricsService::OpenNewLog() { |
log_manager_.BeginLoggingWithLog( |
new MetricsLog(state_manager_->client_id(), session_id_, |
MetricsLog::ONGOING_LOG)); |
+ NotifyOnDidCreateMetricsLog(); |
if (state_ == INITIALIZED) { |
// We only need to schedule that run once. |
state_ = INIT_TASK_SCHEDULED; |
@@ -1408,6 +1426,10 @@ void MetricsService::PrepareInitialStabilityLog() { |
scoped_ptr<MetricsLog> initial_stability_log( |
new MetricsLog(state_manager_->client_id(), session_id_, |
MetricsLog::INITIAL_STABILITY_LOG)); |
+ |
+ // Do not call NotifyOnDidCreateMetricsLog here because the stability |
+ // log describes stats from the _previous_ session. |
+ |
if (!initial_stability_log->LoadSavedEnvironmentFromPrefs()) |
return; |
initial_stability_log->RecordStabilityMetrics(base::TimeDelta(), |
@@ -1937,3 +1959,17 @@ bool MetricsServiceHelper::IsCrashReportingEnabled() { |
return false; |
#endif |
} |
+ |
+void MetricsServiceHelper::AddMetricsServiceObserver( |
+ MetricsServiceObserver* observer) { |
+ MetricsService* metrics_service = g_browser_process->metrics_service(); |
+ if (metrics_service) |
+ metrics_service->AddObserver(observer); |
+} |
+ |
+void MetricsServiceHelper::RemoveMetricsServiceObserver( |
+ MetricsServiceObserver* observer) { |
+ MetricsService* metrics_service = g_browser_process->metrics_service(); |
+ if (metrics_service) |
+ metrics_service->RemoveObserver(observer); |
+} |