OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 //------------------------------------------------------------------------------ | 5 //------------------------------------------------------------------------------ |
6 // Description of the life cycle of a instance of MetricsService. | 6 // Description of the life cycle of a instance of MetricsService. |
7 // | 7 // |
8 // OVERVIEW | 8 // OVERVIEW |
9 // | 9 // |
10 // A MetricsService instance is typically created at application startup. It is | 10 // A MetricsService instance is typically created at application startup. It is |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 #include "net/base/load_flags.h" | 203 #include "net/base/load_flags.h" |
204 #include "net/url_request/url_fetcher.h" | 204 #include "net/url_request/url_fetcher.h" |
205 | 205 |
206 #if defined(ENABLE_PLUGINS) | 206 #if defined(ENABLE_PLUGINS) |
207 // TODO(asvitkine): Move this out of MetricsService. | 207 // TODO(asvitkine): Move this out of MetricsService. |
208 #include "chrome/browser/metrics/plugin_metrics_provider.h" | 208 #include "chrome/browser/metrics/plugin_metrics_provider.h" |
209 #endif | 209 #endif |
210 | 210 |
211 #if defined(OS_CHROMEOS) | 211 #if defined(OS_CHROMEOS) |
212 #include "chrome/browser/chromeos/settings/cros_settings.h" | 212 #include "chrome/browser/chromeos/settings/cros_settings.h" |
| 213 #include "chrome/browser/metrics/chromeos_metrics_provider.h" |
213 #include "chromeos/system/statistics_provider.h" | 214 #include "chromeos/system/statistics_provider.h" |
214 #endif | 215 #endif |
215 | 216 |
216 #if defined(OS_WIN) | 217 #if defined(OS_WIN) |
217 #include "chrome/browser/metrics/google_update_metrics_provider_win.h" | 218 #include "chrome/browser/metrics/google_update_metrics_provider_win.h" |
218 #endif | 219 #endif |
219 | 220 |
220 #if defined(OS_ANDROID) | 221 #if defined(OS_ANDROID) |
221 // TODO(asvitkine): Move this out of MetricsService. | 222 // TODO(asvitkine): Move this out of MetricsService. |
222 #include "chrome/browser/metrics/android_metrics_provider.h" | 223 #include "chrome/browser/metrics/android_metrics_provider.h" |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
329 registry->RegisterBooleanPref(prefs::kStabilitySessionEndCompleted, true); | 330 registry->RegisterBooleanPref(prefs::kStabilitySessionEndCompleted, true); |
330 registry->RegisterIntegerPref(prefs::kMetricsSessionID, -1); | 331 registry->RegisterIntegerPref(prefs::kMetricsSessionID, -1); |
331 registry->RegisterIntegerPref(prefs::kStabilityLaunchCount, 0); | 332 registry->RegisterIntegerPref(prefs::kStabilityLaunchCount, 0); |
332 registry->RegisterIntegerPref(prefs::kStabilityCrashCount, 0); | 333 registry->RegisterIntegerPref(prefs::kStabilityCrashCount, 0); |
333 registry->RegisterIntegerPref(prefs::kStabilityIncompleteSessionEndCount, 0); | 334 registry->RegisterIntegerPref(prefs::kStabilityIncompleteSessionEndCount, 0); |
334 registry->RegisterIntegerPref(prefs::kStabilityBreakpadRegistrationFail, 0); | 335 registry->RegisterIntegerPref(prefs::kStabilityBreakpadRegistrationFail, 0); |
335 registry->RegisterIntegerPref(prefs::kStabilityBreakpadRegistrationSuccess, | 336 registry->RegisterIntegerPref(prefs::kStabilityBreakpadRegistrationSuccess, |
336 0); | 337 0); |
337 registry->RegisterIntegerPref(prefs::kStabilityDebuggerPresent, 0); | 338 registry->RegisterIntegerPref(prefs::kStabilityDebuggerPresent, 0); |
338 registry->RegisterIntegerPref(prefs::kStabilityDebuggerNotPresent, 0); | 339 registry->RegisterIntegerPref(prefs::kStabilityDebuggerNotPresent, 0); |
339 #if defined(OS_CHROMEOS) | |
340 registry->RegisterIntegerPref(prefs::kStabilityOtherUserCrashCount, 0); | |
341 registry->RegisterIntegerPref(prefs::kStabilityKernelCrashCount, 0); | |
342 registry->RegisterIntegerPref(prefs::kStabilitySystemUncleanShutdownCount, 0); | |
343 #endif // OS_CHROMEOS | |
344 | 340 |
345 registry->RegisterStringPref(prefs::kStabilitySavedSystemProfile, | 341 registry->RegisterStringPref(prefs::kStabilitySavedSystemProfile, |
346 std::string()); | 342 std::string()); |
347 registry->RegisterStringPref(prefs::kStabilitySavedSystemProfileHash, | 343 registry->RegisterStringPref(prefs::kStabilitySavedSystemProfileHash, |
348 std::string()); | 344 std::string()); |
349 | 345 |
350 registry->RegisterListPref(metrics::prefs::kMetricsInitialLogs); | 346 registry->RegisterListPref(metrics::prefs::kMetricsInitialLogs); |
351 registry->RegisterListPref(metrics::prefs::kMetricsOngoingLogs); | 347 registry->RegisterListPref(metrics::prefs::kMetricsOngoingLogs); |
352 | 348 |
353 registry->RegisterInt64Pref(prefs::kInstallDate, 0); | 349 registry->RegisterInt64Pref(prefs::kInstallDate, 0); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 RegisterMetricsProvider(scoped_ptr<metrics::MetricsProvider>( | 410 RegisterMetricsProvider(scoped_ptr<metrics::MetricsProvider>( |
415 google_update_metrics_provider_)); | 411 google_update_metrics_provider_)); |
416 #endif | 412 #endif |
417 | 413 |
418 #if defined(ENABLE_PLUGINS) | 414 #if defined(ENABLE_PLUGINS) |
419 plugin_metrics_provider_ = new PluginMetricsProvider( | 415 plugin_metrics_provider_ = new PluginMetricsProvider( |
420 g_browser_process->local_state()); | 416 g_browser_process->local_state()); |
421 RegisterMetricsProvider(scoped_ptr<metrics::MetricsProvider>( | 417 RegisterMetricsProvider(scoped_ptr<metrics::MetricsProvider>( |
422 plugin_metrics_provider_)); | 418 plugin_metrics_provider_)); |
423 #endif | 419 #endif |
| 420 |
| 421 #if defined(OS_CHROMEOS) |
| 422 RegisterMetricsProvider( |
| 423 scoped_ptr<metrics::MetricsProvider>(new ChromeOSMetricsProvider)); |
| 424 #endif |
424 } | 425 } |
425 | 426 |
426 MetricsService::~MetricsService() { | 427 MetricsService::~MetricsService() { |
427 DisableRecording(); | 428 DisableRecording(); |
428 } | 429 } |
429 | 430 |
430 void MetricsService::InitializeMetricsRecordingState() { | 431 void MetricsService::InitializeMetricsRecordingState() { |
431 InitializeMetricsState(); | 432 InitializeMetricsState(); |
432 | 433 |
433 base::Closure callback = base::Bind(&MetricsService::StartScheduledUpload, | 434 base::Closure callback = base::Bind(&MetricsService::StartScheduledUpload, |
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
815 | 816 |
816 void MetricsService::RemoveObserver(MetricsServiceObserver* observer) { | 817 void MetricsService::RemoveObserver(MetricsServiceObserver* observer) { |
817 DCHECK(thread_checker_.CalledOnValidThread()); | 818 DCHECK(thread_checker_.CalledOnValidThread()); |
818 observers_.RemoveObserver(observer); | 819 observers_.RemoveObserver(observer); |
819 } | 820 } |
820 | 821 |
821 void MetricsService::NotifyOnDidCreateMetricsLog() { | 822 void MetricsService::NotifyOnDidCreateMetricsLog() { |
822 DCHECK(thread_checker_.CalledOnValidThread()); | 823 DCHECK(thread_checker_.CalledOnValidThread()); |
823 FOR_EACH_OBSERVER( | 824 FOR_EACH_OBSERVER( |
824 MetricsServiceObserver, observers_, OnDidCreateMetricsLog()); | 825 MetricsServiceObserver, observers_, OnDidCreateMetricsLog()); |
| 826 for (size_t i = 0; i < metrics_providers_.size(); ++i) |
| 827 metrics_providers_[i]->OnDidCreateMetricsLog(); |
825 } | 828 } |
826 | 829 |
827 //------------------------------------------------------------------------------ | 830 //------------------------------------------------------------------------------ |
828 // State save methods | 831 // State save methods |
829 | 832 |
830 void MetricsService::ScheduleNextStateSave() { | 833 void MetricsService::ScheduleNextStateSave() { |
831 state_saver_factory_.InvalidateWeakPtrs(); | 834 state_saver_factory_.InvalidateWeakPtrs(); |
832 | 835 |
833 base::MessageLoop::current()->PostDelayedTask(FROM_HERE, | 836 base::MessageLoop::current()->PostDelayedTask(FROM_HERE, |
834 base::Bind(&MetricsService::SaveLocalState, | 837 base::Bind(&MetricsService::SaveLocalState, |
(...skipping 560 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1395 // Redundant setting to assure that we always reset this value at shutdown | 1398 // Redundant setting to assure that we always reset this value at shutdown |
1396 // (and that we don't use some alternate path, and not call LogCleanShutdown). | 1399 // (and that we don't use some alternate path, and not call LogCleanShutdown). |
1397 clean_shutdown_status_ = CLEANLY_SHUTDOWN; | 1400 clean_shutdown_status_ = CLEANLY_SHUTDOWN; |
1398 | 1401 |
1399 RecordBooleanPrefValue(prefs::kStabilityExitedCleanly, true); | 1402 RecordBooleanPrefValue(prefs::kStabilityExitedCleanly, true); |
1400 PrefService* pref = g_browser_process->local_state(); | 1403 PrefService* pref = g_browser_process->local_state(); |
1401 pref->SetInteger(prefs::kStabilityExecutionPhase, | 1404 pref->SetInteger(prefs::kStabilityExecutionPhase, |
1402 MetricsService::SHUTDOWN_COMPLETE); | 1405 MetricsService::SHUTDOWN_COMPLETE); |
1403 } | 1406 } |
1404 | 1407 |
1405 #if defined(OS_CHROMEOS) | |
1406 void MetricsService::LogChromeOSCrash(const std::string &crash_type) { | |
1407 if (crash_type == "user") | |
1408 IncrementPrefValue(prefs::kStabilityOtherUserCrashCount); | |
1409 else if (crash_type == "kernel") | |
1410 IncrementPrefValue(prefs::kStabilityKernelCrashCount); | |
1411 else if (crash_type == "uncleanshutdown") | |
1412 IncrementPrefValue(prefs::kStabilitySystemUncleanShutdownCount); | |
1413 else | |
1414 NOTREACHED() << "Unexpected Chrome OS crash type " << crash_type; | |
1415 // Wake up metrics logs sending if necessary now that new | |
1416 // log data is available. | |
1417 HandleIdleSinceLastTransmission(false); | |
1418 } | |
1419 #endif // OS_CHROMEOS | |
1420 | |
1421 void MetricsService::LogPluginLoadingError(const base::FilePath& plugin_path) { | 1408 void MetricsService::LogPluginLoadingError(const base::FilePath& plugin_path) { |
1422 #if defined(ENABLE_PLUGINS) | 1409 #if defined(ENABLE_PLUGINS) |
1423 // TODO(asvitkine): Move this out of here. | 1410 // TODO(asvitkine): Move this out of here. |
1424 plugin_metrics_provider_->LogPluginLoadingError(plugin_path); | 1411 plugin_metrics_provider_->LogPluginLoadingError(plugin_path); |
1425 #endif | 1412 #endif |
1426 } | 1413 } |
1427 | 1414 |
1428 bool MetricsService::ShouldLogEvents() { | 1415 bool MetricsService::ShouldLogEvents() { |
1429 // We simply don't log events to UMA if there is a single incognito | 1416 // We simply don't log events to UMA if there is a single incognito |
1430 // session visible. The problem is that we always notify using the orginal | 1417 // session visible. The problem is that we always notify using the orginal |
(...skipping 11 matching lines...) Expand all Loading... |
1442 RecordCurrentState(pref); | 1429 RecordCurrentState(pref); |
1443 } | 1430 } |
1444 | 1431 |
1445 void MetricsService::RecordCurrentState(PrefService* pref) { | 1432 void MetricsService::RecordCurrentState(PrefService* pref) { |
1446 pref->SetInt64(prefs::kStabilityLastTimestampSec, Time::Now().ToTimeT()); | 1433 pref->SetInt64(prefs::kStabilityLastTimestampSec, Time::Now().ToTimeT()); |
1447 | 1434 |
1448 #if defined(ENABLE_PLUGINS) | 1435 #if defined(ENABLE_PLUGINS) |
1449 plugin_metrics_provider_->RecordPluginChanges(); | 1436 plugin_metrics_provider_->RecordPluginChanges(); |
1450 #endif | 1437 #endif |
1451 } | 1438 } |
OLD | NEW |