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

Side by Side Diff: chrome/browser/metrics/metrics_service.cc

Issue 294043008: Introduce AndroidMetricsProvider class. (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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 #if defined(OS_CHROMEOS) 228 #if defined(OS_CHROMEOS)
229 #include "chrome/browser/chromeos/settings/cros_settings.h" 229 #include "chrome/browser/chromeos/settings/cros_settings.h"
230 #include "chromeos/system/statistics_provider.h" 230 #include "chromeos/system/statistics_provider.h"
231 #endif 231 #endif
232 232
233 #if defined(OS_WIN) 233 #if defined(OS_WIN)
234 #include <windows.h> // Needed for STATUS_* codes 234 #include <windows.h> // Needed for STATUS_* codes
235 #include "base/win/registry.h" 235 #include "base/win/registry.h"
236 #endif 236 #endif
237 237
238 #if !defined(OS_ANDROID) 238 #if defined(OS_ANDROID)
239 // TODO(asvitkine): Move this out of MetricsService.
240 #include "chrome/browser/metrics/android_metrics_provider.h"
241 #else
239 #include "chrome/browser/service_process/service_process_control.h" 242 #include "chrome/browser/service_process/service_process_control.h"
240 #endif 243 #endif
241 244
242 using base::Time; 245 using base::Time;
243 using content::BrowserThread; 246 using content::BrowserThread;
244 using content::ChildProcessData; 247 using content::ChildProcessData;
245 using content::LoadNotificationDetails; 248 using content::LoadNotificationDetails;
246 using content::PluginService; 249 using content::PluginService;
247 using metrics::MetricsLogManager; 250 using metrics::MetricsLogManager;
248 251
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 registry->RegisterListPref(metrics::prefs::kMetricsOngoingLogs); 450 registry->RegisterListPref(metrics::prefs::kMetricsOngoingLogs);
448 451
449 registry->RegisterInt64Pref(prefs::kInstallDate, 0); 452 registry->RegisterInt64Pref(prefs::kInstallDate, 0);
450 registry->RegisterInt64Pref(prefs::kUninstallMetricsPageLoadCount, 0); 453 registry->RegisterInt64Pref(prefs::kUninstallMetricsPageLoadCount, 0);
451 registry->RegisterInt64Pref(prefs::kUninstallLaunchCount, 0); 454 registry->RegisterInt64Pref(prefs::kUninstallLaunchCount, 0);
452 registry->RegisterInt64Pref(prefs::kUninstallMetricsUptimeSec, 0); 455 registry->RegisterInt64Pref(prefs::kUninstallMetricsUptimeSec, 0);
453 registry->RegisterInt64Pref(prefs::kUninstallLastLaunchTimeSec, 0); 456 registry->RegisterInt64Pref(prefs::kUninstallLastLaunchTimeSec, 0);
454 registry->RegisterInt64Pref(prefs::kUninstallLastObservedRunTimeSec, 0); 457 registry->RegisterInt64Pref(prefs::kUninstallLastObservedRunTimeSec, 0);
455 458
456 #if defined(OS_ANDROID) 459 #if defined(OS_ANDROID)
457 RegisterPrefsAndroid(registry); 460 // TODO(asvitkine): Move this out of here.
461 AndroidMetricsProvider::RegisterPrefs(registry);
458 #endif // defined(OS_ANDROID) 462 #endif // defined(OS_ANDROID)
459 } 463 }
460 464
461 MetricsService::MetricsService(metrics::MetricsStateManager* state_manager, 465 MetricsService::MetricsService(metrics::MetricsStateManager* state_manager,
462 metrics::MetricsServiceClient* client) 466 metrics::MetricsServiceClient* client)
463 : MetricsServiceBase(g_browser_process->local_state(), 467 : MetricsServiceBase(g_browser_process->local_state(),
464 kUploadLogAvoidRetransmitSize), 468 kUploadLogAvoidRetransmitSize),
465 state_manager_(state_manager), 469 state_manager_(state_manager),
466 client_(client), 470 client_(client),
467 recording_active_(false), 471 recording_active_(false),
468 reporting_active_(false), 472 reporting_active_(false),
469 test_mode_active_(false), 473 test_mode_active_(false),
470 state_(INITIALIZED), 474 state_(INITIALIZED),
471 has_initial_stability_log_(false), 475 has_initial_stability_log_(false),
472 idle_since_last_transmission_(false), 476 idle_since_last_transmission_(false),
473 session_id_(-1), 477 session_id_(-1),
474 next_window_id_(0), 478 next_window_id_(0),
475 self_ptr_factory_(this), 479 self_ptr_factory_(this),
476 state_saver_factory_(this), 480 state_saver_factory_(this),
477 waiting_for_asynchronous_reporting_step_(false), 481 waiting_for_asynchronous_reporting_step_(false),
478 num_async_histogram_fetches_in_progress_(0) { 482 num_async_histogram_fetches_in_progress_(0) {
479 DCHECK(IsSingleThreaded()); 483 DCHECK(IsSingleThreaded());
480 DCHECK(state_manager_); 484 DCHECK(state_manager_);
481 DCHECK(client_); 485 DCHECK(client_);
482 486
487 #if defined(OS_ANDROID)
488 // TODO(asvitkine): Move this out of MetricsService.
489 RegisterMetricsProvider(
490 scoped_ptr<metrics::MetricsProvider>(new AndroidMetricsProvider(
491 g_browser_process->local_state())));
492 #endif // defined(OS_ANDROID)
493
483 // TODO(asvitkine): Move this out of MetricsService. 494 // TODO(asvitkine): Move this out of MetricsService.
484 RegisterMetricsProvider( 495 RegisterMetricsProvider(
485 scoped_ptr<metrics::MetricsProvider>(new OmniboxMetricsProvider)); 496 scoped_ptr<metrics::MetricsProvider>(new OmniboxMetricsProvider));
486 497
487 BrowserChildProcessObserver::Add(this); 498 BrowserChildProcessObserver::Add(this);
488 } 499 }
489 500
490 MetricsService::~MetricsService() { 501 MetricsService::~MetricsService() {
491 DisableRecording(); 502 DisableRecording();
492 503
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
815 826
816 PrefService* pref = g_browser_process->local_state(); 827 PrefService* pref = g_browser_process->local_state();
817 DCHECK(pref); 828 DCHECK(pref);
818 829
819 pref->SetString(prefs::kStabilityStatsVersion, 830 pref->SetString(prefs::kStabilityStatsVersion,
820 MetricsLog::GetVersionString()); 831 MetricsLog::GetVersionString());
821 pref->SetInt64(prefs::kStabilityStatsBuildTime, MetricsLog::GetBuildTime()); 832 pref->SetInt64(prefs::kStabilityStatsBuildTime, MetricsLog::GetBuildTime());
822 833
823 session_id_ = pref->GetInteger(prefs::kMetricsSessionID); 834 session_id_ = pref->GetInteger(prefs::kMetricsSessionID);
824 835
825 #if defined(OS_ANDROID)
826 LogAndroidStabilityToPrefs(pref);
827 #endif // defined(OS_ANDROID)
828
829 if (!pref->GetBoolean(prefs::kStabilityExitedCleanly)) { 836 if (!pref->GetBoolean(prefs::kStabilityExitedCleanly)) {
830 IncrementPrefValue(prefs::kStabilityCrashCount); 837 IncrementPrefValue(prefs::kStabilityCrashCount);
831 // Reset flag, and wait until we call LogNeedForCleanShutdown() before 838 // Reset flag, and wait until we call LogNeedForCleanShutdown() before
832 // monitoring. 839 // monitoring.
833 pref->SetBoolean(prefs::kStabilityExitedCleanly, true); 840 pref->SetBoolean(prefs::kStabilityExitedCleanly, true);
834 841
835 // TODO(rtenneti): On windows, consider saving/getting execution_phase from 842 // TODO(rtenneti): On windows, consider saving/getting execution_phase from
836 // the registry. 843 // the registry.
837 int execution_phase = pref->GetInteger(prefs::kStabilityExecutionPhase); 844 int execution_phase = pref->GetInteger(prefs::kStabilityExecutionPhase);
838 UMA_HISTOGRAM_SPARSE_SLOWLY("Chrome.Browser.CrashedExecutionPhase", 845 UMA_HISTOGRAM_SPARSE_SLOWLY("Chrome.Browser.CrashedExecutionPhase",
(...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after
1402 1409
1403 log_manager_.PauseCurrentLog(); 1410 log_manager_.PauseCurrentLog();
1404 log_manager_.BeginLoggingWithLog(initial_stability_log.release()); 1411 log_manager_.BeginLoggingWithLog(initial_stability_log.release());
1405 1412
1406 // Note: Some stability providers may record stability stats via histograms, 1413 // Note: Some stability providers may record stability stats via histograms,
1407 // so this call has to be after BeginLoggingWithLog(). 1414 // so this call has to be after BeginLoggingWithLog().
1408 MetricsLog* current_log = 1415 MetricsLog* current_log =
1409 static_cast<MetricsLog*>(log_manager_.current_log()); 1416 static_cast<MetricsLog*>(log_manager_.current_log());
1410 current_log->RecordStabilityMetrics(metrics_providers_.get(), 1417 current_log->RecordStabilityMetrics(metrics_providers_.get(),
1411 base::TimeDelta(), base::TimeDelta()); 1418 base::TimeDelta(), base::TimeDelta());
1412
1413 #if defined(OS_ANDROID)
1414 ConvertAndroidStabilityPrefsToHistograms(pref);
1415 RecordCurrentStabilityHistograms(); 1419 RecordCurrentStabilityHistograms();
1416 #endif // defined(OS_ANDROID)
1417 1420
1418 // Note: RecordGeneralMetrics() intentionally not called since this log is for 1421 // Note: RecordGeneralMetrics() intentionally not called since this log is for
1419 // stability stats from a previous session only. 1422 // stability stats from a previous session only.
1420 1423
1421 log_manager_.FinishCurrentLog(); 1424 log_manager_.FinishCurrentLog();
1422 log_manager_.ResumePausedLog(); 1425 log_manager_.ResumePausedLog();
1423 1426
1424 // Store unsent logs, including the stability log that was just saved, so 1427 // Store unsent logs, including the stability log that was just saved, so
1425 // that they're not lost in case of a crash before upload time. 1428 // that they're not lost in case of a crash before upload time.
1426 log_manager_.PersistUnsentLogs(); 1429 log_manager_.PersistUnsentLogs();
(...skipping 19 matching lines...) Expand all
1446 // before writing them. 1449 // before writing them.
1447 log_manager_.PauseCurrentLog(); 1450 log_manager_.PauseCurrentLog();
1448 log_manager_.BeginLoggingWithLog(initial_metrics_log_.release()); 1451 log_manager_.BeginLoggingWithLog(initial_metrics_log_.release());
1449 1452
1450 // Note: Some stability providers may record stability stats via histograms, 1453 // Note: Some stability providers may record stability stats via histograms,
1451 // so this call has to be after BeginLoggingWithLog(). 1454 // so this call has to be after BeginLoggingWithLog().
1452 MetricsLog* current_log = 1455 MetricsLog* current_log =
1453 static_cast<MetricsLog*>(log_manager_.current_log()); 1456 static_cast<MetricsLog*>(log_manager_.current_log());
1454 current_log->RecordStabilityMetrics(metrics_providers_.get(), 1457 current_log->RecordStabilityMetrics(metrics_providers_.get(),
1455 base::TimeDelta(), base::TimeDelta()); 1458 base::TimeDelta(), base::TimeDelta());
1456
1457 #if defined(OS_ANDROID)
1458 ConvertAndroidStabilityPrefsToHistograms(pref);
1459 #endif // defined(OS_ANDROID)
1460 RecordCurrentHistograms(); 1459 RecordCurrentHistograms();
1461 1460
1462 current_log->RecordGeneralMetrics(metrics_providers_.get()); 1461 current_log->RecordGeneralMetrics(metrics_providers_.get());
1463 1462
1464 log_manager_.FinishCurrentLog(); 1463 log_manager_.FinishCurrentLog();
1465 log_manager_.ResumePausedLog(); 1464 log_manager_.ResumePausedLog();
1466 1465
1467 DCHECK(!log_manager_.has_staged_log()); 1466 DCHECK(!log_manager_.has_staged_log());
1468 log_manager_.StageNextLogForUpload(); 1467 log_manager_.StageNextLogForUpload();
1469 } 1468 }
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after
1953 if (metrics_service) 1952 if (metrics_service)
1954 metrics_service->AddObserver(observer); 1953 metrics_service->AddObserver(observer);
1955 } 1954 }
1956 1955
1957 void MetricsServiceHelper::RemoveMetricsServiceObserver( 1956 void MetricsServiceHelper::RemoveMetricsServiceObserver(
1958 MetricsServiceObserver* observer) { 1957 MetricsServiceObserver* observer) {
1959 MetricsService* metrics_service = g_browser_process->metrics_service(); 1958 MetricsService* metrics_service = g_browser_process->metrics_service();
1960 if (metrics_service) 1959 if (metrics_service)
1961 metrics_service->RemoveObserver(observer); 1960 metrics_service->RemoveObserver(observer);
1962 } 1961 }
OLDNEW
« no previous file with comments | « chrome/browser/metrics/metrics_service.h ('k') | chrome/browser/metrics/metrics_service_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698