| Index: chrome/browser/metrics/metrics_service.cc
|
| diff --git a/chrome/browser/metrics/metrics_service.cc b/chrome/browser/metrics/metrics_service.cc
|
| index 2b31524e68f5fa691c53f3897a91a39b8e0f3778..5326973085ee8cfe2f352d1877e4aefd3cea4a3c 100644
|
| --- a/chrome/browser/metrics/metrics_service.cc
|
| +++ b/chrome/browser/metrics/metrics_service.cc
|
| @@ -288,13 +288,12 @@ ResponseStatus ResponseCodeToStatus(int response_code) {
|
| }
|
| }
|
|
|
| -void MarkAppCleanShutdownAndCommit() {
|
| - PrefService* pref = g_browser_process->local_state();
|
| - pref->SetBoolean(prefs::kStabilityExitedCleanly, true);
|
| - pref->SetInteger(prefs::kStabilityExecutionPhase,
|
| - MetricsService::SHUTDOWN_COMPLETE);
|
| +void MarkAppCleanShutdownAndCommit(PrefService* local_state) {
|
| + local_state->SetBoolean(prefs::kStabilityExitedCleanly, true);
|
| + local_state->SetInteger(prefs::kStabilityExecutionPhase,
|
| + MetricsService::SHUTDOWN_COMPLETE);
|
| // Start writing right away (write happens on a different thread).
|
| - pref->CommitPendingWrite();
|
| + local_state->CommitPendingWrite();
|
| }
|
|
|
| } // namespace
|
| @@ -367,12 +366,13 @@ void MetricsService::RegisterPrefs(PrefRegistrySimple* registry) {
|
| }
|
|
|
| MetricsService::MetricsService(metrics::MetricsStateManager* state_manager,
|
| - metrics::MetricsServiceClient* client)
|
| - : log_manager_(g_browser_process->local_state(),
|
| - kUploadLogAvoidRetransmitSize),
|
| + metrics::MetricsServiceClient* client,
|
| + PrefService* local_state)
|
| + : log_manager_(local_state, kUploadLogAvoidRetransmitSize),
|
| histogram_snapshot_manager_(this),
|
| state_manager_(state_manager),
|
| client_(client),
|
| + local_state_(local_state),
|
| recording_active_(false),
|
| reporting_active_(false),
|
| test_mode_active_(false),
|
| @@ -387,12 +387,13 @@ MetricsService::MetricsService(metrics::MetricsStateManager* state_manager,
|
| DCHECK(IsSingleThreaded());
|
| DCHECK(state_manager_);
|
| DCHECK(client_);
|
| + DCHECK(local_state_);
|
|
|
| #if defined(OS_ANDROID)
|
| // TODO(asvitkine): Move this out of MetricsService.
|
| RegisterMetricsProvider(
|
| scoped_ptr<metrics::MetricsProvider>(new AndroidMetricsProvider(
|
| - g_browser_process->local_state())));
|
| + local_state_)));
|
| #endif // defined(OS_ANDROID)
|
|
|
| // TODO(asvitkine): Move these out of MetricsService.
|
| @@ -412,8 +413,7 @@ MetricsService::MetricsService(metrics::MetricsStateManager* state_manager,
|
| #endif
|
|
|
| #if defined(ENABLE_PLUGINS)
|
| - plugin_metrics_provider_ = new PluginMetricsProvider(
|
| - g_browser_process->local_state());
|
| + plugin_metrics_provider_ = new PluginMetricsProvider(local_state_);
|
| RegisterMetricsProvider(scoped_ptr<metrics::MetricsProvider>(
|
| plugin_metrics_provider_));
|
| #endif
|
| @@ -581,7 +581,7 @@ void MetricsService::RecordCompletedSessionEnd() {
|
| void MetricsService::OnAppEnterBackground() {
|
| scheduler_->Stop();
|
|
|
| - MarkAppCleanShutdownAndCommit();
|
| + MarkAppCleanShutdownAndCommit(local_state_);
|
|
|
| // At this point, there's no way of knowing when the process will be
|
| // killed, so this has to be treated similar to a shutdown, closing and
|
| @@ -597,25 +597,22 @@ void MetricsService::OnAppEnterBackground() {
|
| }
|
|
|
| void MetricsService::OnAppEnterForeground() {
|
| - PrefService* pref = g_browser_process->local_state();
|
| - pref->SetBoolean(prefs::kStabilityExitedCleanly, false);
|
| -
|
| + local_state_->SetBoolean(prefs::kStabilityExitedCleanly, false);
|
| StartSchedulerIfNecessary();
|
| }
|
| #else
|
| -void MetricsService::LogNeedForCleanShutdown() {
|
| - PrefService* pref = g_browser_process->local_state();
|
| - pref->SetBoolean(prefs::kStabilityExitedCleanly, false);
|
| +void MetricsService::LogNeedForCleanShutdown(PrefService* local_state) {
|
| + local_state->SetBoolean(prefs::kStabilityExitedCleanly, false);
|
| // Redundant setting to be sure we call for a clean shutdown.
|
| clean_shutdown_status_ = NEED_TO_SHUTDOWN;
|
| }
|
| #endif // defined(OS_ANDROID) || defined(OS_IOS)
|
|
|
| // static
|
| -void MetricsService::SetExecutionPhase(ExecutionPhase execution_phase) {
|
| +void MetricsService::SetExecutionPhase(ExecutionPhase execution_phase,
|
| + PrefService* local_state) {
|
| execution_phase_ = execution_phase;
|
| - PrefService* pref = g_browser_process->local_state();
|
| - pref->SetInteger(prefs::kStabilityExecutionPhase, execution_phase_);
|
| + local_state->SetInteger(prefs::kStabilityExecutionPhase, execution_phase_);
|
| }
|
|
|
| void MetricsService::RecordBreakpadRegistration(bool success) {
|
| @@ -641,23 +638,23 @@ void MetricsService::RecordBreakpadHasDebugger(bool has_debugger) {
|
| // Initialization methods
|
|
|
| void MetricsService::InitializeMetricsState() {
|
| - PrefService* pref = g_browser_process->local_state();
|
| - DCHECK(pref);
|
| -
|
| - pref->SetString(prefs::kStabilityStatsVersion, client_->GetVersionString());
|
| - pref->SetInt64(prefs::kStabilityStatsBuildTime, MetricsLog::GetBuildTime());
|
| + local_state_->SetString(prefs::kStabilityStatsVersion,
|
| + client_->GetVersionString());
|
| + local_state_->SetInt64(prefs::kStabilityStatsBuildTime,
|
| + MetricsLog::GetBuildTime());
|
|
|
| - session_id_ = pref->GetInteger(prefs::kMetricsSessionID);
|
| + session_id_ = local_state_->GetInteger(prefs::kMetricsSessionID);
|
|
|
| - if (!pref->GetBoolean(prefs::kStabilityExitedCleanly)) {
|
| + if (!local_state_->GetBoolean(prefs::kStabilityExitedCleanly)) {
|
| IncrementPrefValue(prefs::kStabilityCrashCount);
|
| // Reset flag, and wait until we call LogNeedForCleanShutdown() before
|
| // monitoring.
|
| - pref->SetBoolean(prefs::kStabilityExitedCleanly, true);
|
| + local_state_->SetBoolean(prefs::kStabilityExitedCleanly, true);
|
|
|
| // TODO(rtenneti): On windows, consider saving/getting execution_phase from
|
| // the registry.
|
| - int execution_phase = pref->GetInteger(prefs::kStabilityExecutionPhase);
|
| + int execution_phase =
|
| + local_state_->GetInteger(prefs::kStabilityExecutionPhase);
|
| UMA_HISTOGRAM_SPARSE_SLOWLY("Chrome.Browser.CrashedExecutionPhase",
|
| execution_phase);
|
|
|
| @@ -669,30 +666,30 @@ void MetricsService::InitializeMetricsState() {
|
|
|
| // Update session ID.
|
| ++session_id_;
|
| - pref->SetInteger(prefs::kMetricsSessionID, session_id_);
|
| + local_state_->SetInteger(prefs::kMetricsSessionID, session_id_);
|
|
|
| // Stability bookkeeping
|
| IncrementPrefValue(prefs::kStabilityLaunchCount);
|
|
|
| DCHECK_EQ(UNINITIALIZED_PHASE, execution_phase_);
|
| - SetExecutionPhase(START_METRICS_RECORDING);
|
| + SetExecutionPhase(START_METRICS_RECORDING, local_state_);
|
|
|
| - if (!pref->GetBoolean(prefs::kStabilitySessionEndCompleted)) {
|
| + if (!local_state_->GetBoolean(prefs::kStabilitySessionEndCompleted)) {
|
| IncrementPrefValue(prefs::kStabilityIncompleteSessionEndCount);
|
| // This is marked false when we get a WM_ENDSESSION.
|
| - pref->SetBoolean(prefs::kStabilitySessionEndCompleted, true);
|
| + local_state_->SetBoolean(prefs::kStabilitySessionEndCompleted, true);
|
| }
|
|
|
| // Call GetUptimes() for the first time, thus allowing all later calls
|
| // to record incremental uptimes accurately.
|
| base::TimeDelta ignored_uptime_parameter;
|
| base::TimeDelta startup_uptime;
|
| - GetUptimes(pref, &startup_uptime, &ignored_uptime_parameter);
|
| + GetUptimes(local_state_, &startup_uptime, &ignored_uptime_parameter);
|
| DCHECK_EQ(0, startup_uptime.InMicroseconds());
|
| // For backwards compatibility, leave this intact in case Omaha is checking
|
| // them. prefs::kStabilityLastTimestampSec may also be useless now.
|
| // TODO(jar): Delete these if they have no uses.
|
| - pref->SetInt64(prefs::kStabilityLaunchTimeSec, Time::Now().ToTimeT());
|
| + local_state_->SetInt64(prefs::kStabilityLaunchTimeSec, Time::Now().ToTimeT());
|
|
|
| // Bookkeeping for the uninstall metrics.
|
| IncrementLongPrefsValue(prefs::kUninstallLaunchCount);
|
| @@ -840,13 +837,7 @@ void MetricsService::ScheduleNextStateSave() {
|
| }
|
|
|
| void MetricsService::SaveLocalState() {
|
| - PrefService* pref = g_browser_process->local_state();
|
| - if (!pref) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| -
|
| - RecordCurrentState(pref);
|
| + RecordCurrentState(local_state_);
|
|
|
| // TODO(jar):110021 Does this run down the batteries????
|
| ScheduleNextStateSave();
|
| @@ -911,10 +902,9 @@ void MetricsService::CloseCurrentLog() {
|
| std::vector<variations::ActiveGroupId> synthetic_trials;
|
| GetCurrentSyntheticFieldTrials(&synthetic_trials);
|
| current_log->RecordEnvironment(metrics_providers_.get(), synthetic_trials);
|
| - PrefService* pref = g_browser_process->local_state();
|
| base::TimeDelta incremental_uptime;
|
| base::TimeDelta uptime;
|
| - GetUptimes(pref, &incremental_uptime, &uptime);
|
| + GetUptimes(local_state_, &incremental_uptime, &uptime);
|
| current_log->RecordStabilityMetrics(metrics_providers_.get(),
|
| incremental_uptime, uptime);
|
|
|
| @@ -1083,8 +1073,7 @@ void MetricsService::StageNewLog() {
|
|
|
| void MetricsService::PrepareInitialStabilityLog() {
|
| DCHECK_EQ(INITIALIZED, state_);
|
| - PrefService* pref = g_browser_process->local_state();
|
| - DCHECK_NE(0, pref->GetInteger(prefs::kStabilityCrashCount));
|
| + DCHECK_NE(0, local_state_->GetInteger(prefs::kStabilityCrashCount));
|
|
|
| scoped_ptr<MetricsLog> initial_stability_log(
|
| CreateLog(MetricsLog::INITIAL_STABILITY_LOG));
|
| @@ -1130,10 +1119,9 @@ void MetricsService::PrepareInitialMetricsLog() {
|
| GetCurrentSyntheticFieldTrials(&synthetic_trials);
|
| initial_metrics_log_->RecordEnvironment(metrics_providers_.get(),
|
| synthetic_trials);
|
| - PrefService* pref = g_browser_process->local_state();
|
| base::TimeDelta incremental_uptime;
|
| base::TimeDelta uptime;
|
| - GetUptimes(pref, &incremental_uptime, &uptime);
|
| + GetUptimes(local_state_, &incremental_uptime, &uptime);
|
|
|
| // Histograms only get written to the current log, so make the new log current
|
| // before writing them.
|
| @@ -1315,17 +1303,13 @@ void MetricsService::OnURLFetchComplete(const net::URLFetcher* source) {
|
| }
|
|
|
| void MetricsService::IncrementPrefValue(const char* path) {
|
| - PrefService* pref = g_browser_process->local_state();
|
| - DCHECK(pref);
|
| - int value = pref->GetInteger(path);
|
| - pref->SetInteger(path, value + 1);
|
| + int value = local_state_->GetInteger(path);
|
| + local_state_->SetInteger(path, value + 1);
|
| }
|
|
|
| void MetricsService::IncrementLongPrefsValue(const char* path) {
|
| - PrefService* pref = g_browser_process->local_state();
|
| - DCHECK(pref);
|
| - int64 value = pref->GetInt64(path);
|
| - pref->SetInt64(path, value + 1);
|
| + int64 value = local_state_->GetInt64(path);
|
| + local_state_->SetInt64(path, value + 1);
|
| }
|
|
|
| bool MetricsService::UmaMetricsProperlyShutdown() {
|
| @@ -1375,8 +1359,11 @@ void MetricsService::GetCurrentSyntheticFieldTrials(
|
| }
|
|
|
| scoped_ptr<MetricsLog> MetricsService::CreateLog(MetricsLog::LogType log_type) {
|
| - return make_scoped_ptr(new MetricsLog(
|
| - state_manager_->client_id(), session_id_, log_type, client_));
|
| + return make_scoped_ptr(new MetricsLog(state_manager_->client_id(),
|
| + session_id_,
|
| + log_type,
|
| + client_,
|
| + local_state_));
|
| }
|
|
|
| void MetricsService::RecordCurrentHistograms() {
|
| @@ -1393,16 +1380,15 @@ void MetricsService::RecordCurrentStabilityHistograms() {
|
|
|
| void MetricsService::LogCleanShutdown() {
|
| // Redundant hack to write pref ASAP.
|
| - MarkAppCleanShutdownAndCommit();
|
| + MarkAppCleanShutdownAndCommit(local_state_);
|
|
|
| // Redundant setting to assure that we always reset this value at shutdown
|
| // (and that we don't use some alternate path, and not call LogCleanShutdown).
|
| clean_shutdown_status_ = CLEANLY_SHUTDOWN;
|
|
|
| RecordBooleanPrefValue(prefs::kStabilityExitedCleanly, true);
|
| - PrefService* pref = g_browser_process->local_state();
|
| - pref->SetInteger(prefs::kStabilityExecutionPhase,
|
| - MetricsService::SHUTDOWN_COMPLETE);
|
| + local_state_->SetInteger(prefs::kStabilityExecutionPhase,
|
| + MetricsService::SHUTDOWN_COMPLETE);
|
| }
|
|
|
| void MetricsService::LogPluginLoadingError(const base::FilePath& plugin_path) {
|
| @@ -1421,12 +1407,8 @@ bool MetricsService::ShouldLogEvents() {
|
|
|
| void MetricsService::RecordBooleanPrefValue(const char* path, bool value) {
|
| DCHECK(IsSingleThreaded());
|
| -
|
| - PrefService* pref = g_browser_process->local_state();
|
| - DCHECK(pref);
|
| -
|
| - pref->SetBoolean(path, value);
|
| - RecordCurrentState(pref);
|
| + local_state_->SetBoolean(path, value);
|
| + RecordCurrentState(local_state_);
|
| }
|
|
|
| void MetricsService::RecordCurrentState(PrefService* pref) {
|
|
|