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

Unified Diff: chrome/browser/metrics/metrics_service.cc

Issue 296483004: Introduce a MetricsDataProvider interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 6 years, 7 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 | « chrome/browser/metrics/metrics_service.h ('k') | chrome/browser/metrics/metrics_service_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/metrics/metrics_service.cc
===================================================================
--- chrome/browser/metrics/metrics_service.cc (revision 271641)
+++ chrome/browser/metrics/metrics_service.cc (working copy)
@@ -553,6 +553,9 @@
if (!log_manager_.current_log())
OpenNewLog();
+ for (size_t i = 0; i < metrics_providers_.size(); ++i)
+ metrics_providers_[i]->OnRecordingEnabled();
+
SetUpNotifications(&registrar_, this);
base::RemoveActionCallback(action_callback_);
action_callback_ = base::Bind(&MetricsService::OnUserAction,
@@ -569,6 +572,10 @@
base::RemoveActionCallback(action_callback_);
registrar_.RemoveAll();
+
+ for (size_t i = 0; i < metrics_providers_.size(); ++i)
+ metrics_providers_[i]->OnRecordingDisabled();
+
PushPendingLogsToPersistentStorage();
DCHECK(!log_manager_.has_staged_log());
}
@@ -1167,15 +1174,17 @@
DCHECK(current_log);
std::vector<variations::ActiveGroupId> synthetic_trials;
GetCurrentSyntheticFieldTrials(&synthetic_trials);
- current_log->RecordEnvironment(plugins_, google_update_metrics_,
- synthetic_trials);
+ current_log->RecordEnvironment(metrics_providers_.get(), plugins_,
+ google_update_metrics_, synthetic_trials);
PrefService* pref = g_browser_process->local_state();
base::TimeDelta incremental_uptime;
base::TimeDelta uptime;
GetUptimes(pref, &incremental_uptime, &uptime);
- current_log->RecordStabilityMetrics(incremental_uptime, uptime);
+ current_log->RecordStabilityMetrics(metrics_providers_.get(),
+ incremental_uptime, uptime);
RecordCurrentHistograms();
+ current_log->RecordGeneralMetrics(metrics_providers_.get());
log_manager_.FinishCurrentLog();
}
@@ -1427,16 +1436,27 @@
if (!initial_stability_log->LoadSavedEnvironmentFromPrefs())
return;
- initial_stability_log->RecordStabilityMetrics(base::TimeDelta(),
- base::TimeDelta());
+
log_manager_.LoadPersistedUnsentLogs();
log_manager_.PauseCurrentLog();
log_manager_.BeginLoggingWithLog(initial_stability_log.release());
+
+ // Note: Some stability providers may record stability stats via histograms,
+ // so this call has to be after BeginLoggingWithLog().
+ MetricsLog* current_log =
+ static_cast<MetricsLog*>(log_manager_.current_log());
+ current_log->RecordStabilityMetrics(metrics_providers_.get(),
+ base::TimeDelta(), base::TimeDelta());
+
#if defined(OS_ANDROID)
ConvertAndroidStabilityPrefsToHistograms(pref);
RecordCurrentStabilityHistograms();
#endif // defined(OS_ANDROID)
+
+ // Note: RecordGeneralMetrics() intentionally not called since this log is for
+ // stability stats from a previous session only.
+
log_manager_.FinishCurrentLog();
log_manager_.ResumePausedLog();
@@ -1453,22 +1473,33 @@
std::vector<variations::ActiveGroupId> synthetic_trials;
GetCurrentSyntheticFieldTrials(&synthetic_trials);
- initial_metrics_log_->RecordEnvironment(plugins_, google_update_metrics_,
+ initial_metrics_log_->RecordEnvironment(metrics_providers_.get(), plugins_,
+ google_update_metrics_,
synthetic_trials);
PrefService* pref = g_browser_process->local_state();
base::TimeDelta incremental_uptime;
base::TimeDelta uptime;
GetUptimes(pref, &incremental_uptime, &uptime);
- initial_metrics_log_->RecordStabilityMetrics(incremental_uptime, uptime);
// Histograms only get written to the current log, so make the new log current
// before writing them.
log_manager_.PauseCurrentLog();
log_manager_.BeginLoggingWithLog(initial_metrics_log_.release());
+
+ // Note: Some stability providers may record stability stats via histograms,
+ // so this call has to be after BeginLoggingWithLog().
+ MetricsLog* current_log =
+ static_cast<MetricsLog*>(log_manager_.current_log());
+ current_log->RecordStabilityMetrics(metrics_providers_.get(),
+ base::TimeDelta(), base::TimeDelta());
+
#if defined(OS_ANDROID)
ConvertAndroidStabilityPrefsToHistograms(pref);
#endif // defined(OS_ANDROID)
RecordCurrentHistograms();
+
+ current_log->RecordGeneralMetrics(metrics_providers_.get());
+
log_manager_.FinishCurrentLog();
log_manager_.ResumePausedLog();
@@ -1721,6 +1752,12 @@
synthetic_trial_groups_.push_back(trial_group);
}
+void MetricsService::RegisterMetricsProvider(
+ scoped_ptr<metrics::MetricsProvider> provider) {
+ DCHECK_EQ(INITIALIZED, state_);
+ metrics_providers_.push_back(provider.release());
+}
+
void MetricsService::CheckForClonedInstall(
scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
state_manager_->CheckForClonedInstall(task_runner);
« no previous file with comments | « chrome/browser/metrics/metrics_service.h ('k') | chrome/browser/metrics/metrics_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698