Index: components/metrics/metrics_service.cc |
diff --git a/components/metrics/metrics_service.cc b/components/metrics/metrics_service.cc |
index 3c499c14e671415bfd2414e05389a73f4720fd9d..60cdaf4c3db2ab093bde4c05b2186042c95f1ae2 100644 |
--- a/components/metrics/metrics_service.cc |
+++ b/components/metrics/metrics_service.cc |
@@ -565,13 +565,14 @@ void MetricsService::InitializeMetricsState() { |
log_manager_.LoadPersistedUnsentLogs(); |
session_id_ = local_state_->GetInteger(metrics::prefs::kMetricsSessionID); |
- |
+ bool exited_cleanly = true; |
if (!local_state_->GetBoolean(metrics::prefs::kStabilityExitedCleanly)) { |
IncrementPrefValue(metrics::prefs::kStabilityCrashCount); |
- // Reset flag, and wait until we call LogNeedForCleanShutdown() before |
- // monitoring. |
Alexei Svitkine (slow)
2014/09/09 17:24:43
Nit: Preserve the comment.
Sigurður Ásgeirsson
2014/09/09 19:27:00
Oops, my bad. Done.
|
local_state_->SetBoolean(metrics::prefs::kStabilityExitedCleanly, true); |
+ exited_cleanly = false; |
+ } |
+ if (!exited_cleanly || ProvidersHaveStabilityMetrics()) { |
// TODO(rtenneti): On windows, consider saving/getting execution_phase from |
// the registry. |
int execution_phase = |
@@ -579,8 +580,9 @@ void MetricsService::InitializeMetricsState() { |
UMA_HISTOGRAM_SPARSE_SLOWLY("Chrome.Browser.CrashedExecutionPhase", |
execution_phase); |
- // If the previous session didn't exit cleanly, then prepare an initial |
- // stability log if UMA is enabled. |
+ // If the previous session didn't exit cleanly, or if any provider |
+ // explicitly requests it, prepare an initial stability log - |
+ // provided UMA is enabled. |
if (state_manager_->IsMetricsReportingEnabled()) |
PrepareInitialStabilityLog(); |
} |
@@ -909,9 +911,18 @@ void MetricsService::StageNewLog() { |
DCHECK(log_manager_.has_staged_log()); |
} |
+bool MetricsService::ProvidersHaveStabilityMetrics() { |
+ // Check whether any metrics provider has stability metrics. |
+ for (size_t i = 0; i < metrics_providers_.size(); ++i) { |
+ if (metrics_providers_[i]->HasStabilityMetrics()) |
+ return true; |
+ } |
+ |
+ return false; |
+} |
+ |
void MetricsService::PrepareInitialStabilityLog() { |
DCHECK_EQ(INITIALIZED, state_); |
- DCHECK_NE(0, local_state_->GetInteger(metrics::prefs::kStabilityCrashCount)); |
scoped_ptr<MetricsLog> initial_stability_log( |
CreateLog(MetricsLog::INITIAL_STABILITY_LOG)); |