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

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

Issue 299153004: Move child process observing from MetricsService to stability provider. (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
« no previous file with comments | « chrome/browser/metrics/metrics_service.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 #include "chrome/browser/metrics/omnibox_metrics_provider.h" 193 #include "chrome/browser/metrics/omnibox_metrics_provider.h"
194 #include "chrome/browser/metrics/tracking_synchronizer.h" 194 #include "chrome/browser/metrics/tracking_synchronizer.h"
195 #include "chrome/common/pref_names.h" 195 #include "chrome/common/pref_names.h"
196 #include "chrome/common/variations/variations_util.h" 196 #include "chrome/common/variations/variations_util.h"
197 #include "components/metrics/metrics_log_base.h" 197 #include "components/metrics/metrics_log_base.h"
198 #include "components/metrics/metrics_log_manager.h" 198 #include "components/metrics/metrics_log_manager.h"
199 #include "components/metrics/metrics_pref_names.h" 199 #include "components/metrics/metrics_pref_names.h"
200 #include "components/metrics/metrics_reporting_scheduler.h" 200 #include "components/metrics/metrics_reporting_scheduler.h"
201 #include "components/metrics/metrics_service_client.h" 201 #include "components/metrics/metrics_service_client.h"
202 #include "components/variations/entropy_provider.h" 202 #include "components/variations/entropy_provider.h"
203 #include "content/public/browser/child_process_data.h"
204 #include "content/public/browser/render_process_host.h"
205 #include "content/public/browser/user_metrics.h"
206 #include "net/base/load_flags.h" 203 #include "net/base/load_flags.h"
207 #include "net/url_request/url_fetcher.h" 204 #include "net/url_request/url_fetcher.h"
208 205
209 #if defined(ENABLE_PLUGINS) 206 #if defined(ENABLE_PLUGINS)
210 // TODO(asvitkine): Move this out of MetricsService. 207 // TODO(asvitkine): Move this out of MetricsService.
211 #include "chrome/browser/metrics/plugin_metrics_provider.h" 208 #include "chrome/browser/metrics/plugin_metrics_provider.h"
212 #endif 209 #endif
213 210
214 #if defined(OS_CHROMEOS) 211 #if defined(OS_CHROMEOS)
215 #include "chrome/browser/chromeos/settings/cros_settings.h" 212 #include "chrome/browser/chromeos/settings/cros_settings.h"
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 registry->RegisterStringPref(prefs::kStabilityStatsVersion, std::string()); 324 registry->RegisterStringPref(prefs::kStabilityStatsVersion, std::string());
328 registry->RegisterInt64Pref(prefs::kStabilityStatsBuildTime, 0); 325 registry->RegisterInt64Pref(prefs::kStabilityStatsBuildTime, 0);
329 registry->RegisterBooleanPref(prefs::kStabilityExitedCleanly, true); 326 registry->RegisterBooleanPref(prefs::kStabilityExitedCleanly, true);
330 registry->RegisterIntegerPref(prefs::kStabilityExecutionPhase, 327 registry->RegisterIntegerPref(prefs::kStabilityExecutionPhase,
331 UNINITIALIZED_PHASE); 328 UNINITIALIZED_PHASE);
332 registry->RegisterBooleanPref(prefs::kStabilitySessionEndCompleted, true); 329 registry->RegisterBooleanPref(prefs::kStabilitySessionEndCompleted, true);
333 registry->RegisterIntegerPref(prefs::kMetricsSessionID, -1); 330 registry->RegisterIntegerPref(prefs::kMetricsSessionID, -1);
334 registry->RegisterIntegerPref(prefs::kStabilityLaunchCount, 0); 331 registry->RegisterIntegerPref(prefs::kStabilityLaunchCount, 0);
335 registry->RegisterIntegerPref(prefs::kStabilityCrashCount, 0); 332 registry->RegisterIntegerPref(prefs::kStabilityCrashCount, 0);
336 registry->RegisterIntegerPref(prefs::kStabilityIncompleteSessionEndCount, 0); 333 registry->RegisterIntegerPref(prefs::kStabilityIncompleteSessionEndCount, 0);
337 registry->RegisterIntegerPref(prefs::kStabilityPageLoadCount, 0);
338 registry->RegisterIntegerPref(prefs::kStabilityRendererCrashCount, 0);
339 registry->RegisterIntegerPref(prefs::kStabilityExtensionRendererCrashCount,
340 0);
341 registry->RegisterIntegerPref(prefs::kStabilityRendererHangCount, 0);
342 registry->RegisterIntegerPref(prefs::kStabilityChildProcessCrashCount, 0);
343 registry->RegisterIntegerPref(prefs::kStabilityBreakpadRegistrationFail, 0); 334 registry->RegisterIntegerPref(prefs::kStabilityBreakpadRegistrationFail, 0);
344 registry->RegisterIntegerPref(prefs::kStabilityBreakpadRegistrationSuccess, 335 registry->RegisterIntegerPref(prefs::kStabilityBreakpadRegistrationSuccess,
345 0); 336 0);
346 registry->RegisterIntegerPref(prefs::kStabilityDebuggerPresent, 0); 337 registry->RegisterIntegerPref(prefs::kStabilityDebuggerPresent, 0);
347 registry->RegisterIntegerPref(prefs::kStabilityDebuggerNotPresent, 0); 338 registry->RegisterIntegerPref(prefs::kStabilityDebuggerNotPresent, 0);
348 #if defined(OS_CHROMEOS) 339 #if defined(OS_CHROMEOS)
349 registry->RegisterIntegerPref(prefs::kStabilityOtherUserCrashCount, 0); 340 registry->RegisterIntegerPref(prefs::kStabilityOtherUserCrashCount, 0);
350 registry->RegisterIntegerPref(prefs::kStabilityKernelCrashCount, 0); 341 registry->RegisterIntegerPref(prefs::kStabilityKernelCrashCount, 0);
351 registry->RegisterIntegerPref(prefs::kStabilitySystemUncleanShutdownCount, 0); 342 registry->RegisterIntegerPref(prefs::kStabilitySystemUncleanShutdownCount, 0);
352 #endif // OS_CHROMEOS 343 #endif // OS_CHROMEOS
353 344
354 registry->RegisterStringPref(prefs::kStabilitySavedSystemProfile, 345 registry->RegisterStringPref(prefs::kStabilitySavedSystemProfile,
355 std::string()); 346 std::string());
356 registry->RegisterStringPref(prefs::kStabilitySavedSystemProfileHash, 347 registry->RegisterStringPref(prefs::kStabilitySavedSystemProfileHash,
357 std::string()); 348 std::string());
358 349
359 registry->RegisterListPref(metrics::prefs::kMetricsInitialLogs); 350 registry->RegisterListPref(metrics::prefs::kMetricsInitialLogs);
360 registry->RegisterListPref(metrics::prefs::kMetricsOngoingLogs); 351 registry->RegisterListPref(metrics::prefs::kMetricsOngoingLogs);
361 352
362 registry->RegisterInt64Pref(prefs::kInstallDate, 0); 353 registry->RegisterInt64Pref(prefs::kInstallDate, 0);
363 registry->RegisterInt64Pref(prefs::kUninstallMetricsPageLoadCount, 0);
364 registry->RegisterInt64Pref(prefs::kUninstallLaunchCount, 0); 354 registry->RegisterInt64Pref(prefs::kUninstallLaunchCount, 0);
365 registry->RegisterInt64Pref(prefs::kUninstallMetricsUptimeSec, 0); 355 registry->RegisterInt64Pref(prefs::kUninstallMetricsUptimeSec, 0);
366 registry->RegisterInt64Pref(prefs::kUninstallLastLaunchTimeSec, 0); 356 registry->RegisterInt64Pref(prefs::kUninstallLastLaunchTimeSec, 0);
367 registry->RegisterInt64Pref(prefs::kUninstallLastObservedRunTimeSec, 0); 357 registry->RegisterInt64Pref(prefs::kUninstallLastObservedRunTimeSec, 0);
368 358
359 // TODO(asvitkine): Move this out of here.
360 ChromeStabilityMetricsProvider::RegisterPrefs(registry);
361
369 #if defined(OS_ANDROID) 362 #if defined(OS_ANDROID)
370 // TODO(asvitkine): Move this out of here. 363 // TODO(asvitkine): Move this out of here.
371 AndroidMetricsProvider::RegisterPrefs(registry); 364 AndroidMetricsProvider::RegisterPrefs(registry);
372 #endif // defined(OS_ANDROID) 365 #endif // defined(OS_ANDROID)
373 366
374 #if defined(ENABLE_PLUGINS) 367 #if defined(ENABLE_PLUGINS)
375 // TODO(asvitkine): Move this out of here. 368 // TODO(asvitkine): Move this out of here.
376 PluginMetricsProvider::RegisterPrefs(registry); 369 PluginMetricsProvider::RegisterPrefs(registry);
377 #endif 370 #endif
378 } 371 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 RegisterMetricsProvider(scoped_ptr<metrics::MetricsProvider>( 414 RegisterMetricsProvider(scoped_ptr<metrics::MetricsProvider>(
422 google_update_metrics_provider_)); 415 google_update_metrics_provider_));
423 #endif 416 #endif
424 417
425 #if defined(ENABLE_PLUGINS) 418 #if defined(ENABLE_PLUGINS)
426 plugin_metrics_provider_ = new PluginMetricsProvider( 419 plugin_metrics_provider_ = new PluginMetricsProvider(
427 g_browser_process->local_state()); 420 g_browser_process->local_state());
428 RegisterMetricsProvider(scoped_ptr<metrics::MetricsProvider>( 421 RegisterMetricsProvider(scoped_ptr<metrics::MetricsProvider>(
429 plugin_metrics_provider_)); 422 plugin_metrics_provider_));
430 #endif 423 #endif
431
432 BrowserChildProcessObserver::Add(this);
433 } 424 }
434 425
435 MetricsService::~MetricsService() { 426 MetricsService::~MetricsService() {
436 DisableRecording(); 427 DisableRecording();
437
438 BrowserChildProcessObserver::Remove(this);
439 } 428 }
440 429
441 void MetricsService::InitializeMetricsRecordingState() { 430 void MetricsService::InitializeMetricsRecordingState() {
442 InitializeMetricsState(); 431 InitializeMetricsState();
443 432
444 base::Closure callback = base::Bind(&MetricsService::StartScheduledUpload, 433 base::Closure callback = base::Bind(&MetricsService::StartScheduledUpload,
445 self_ptr_factory_.GetWeakPtr()); 434 self_ptr_factory_.GetWeakPtr());
446 scheduler_.reset(new MetricsReportingScheduler(callback)); 435 scheduler_.reset(new MetricsReportingScheduler(callback));
447 } 436 }
448 437
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 base::HistogramBase::Inconsistency problem) { 545 base::HistogramBase::Inconsistency problem) {
557 UMA_HISTOGRAM_ENUMERATION("Histogram.InconsistenciesBrowserUnique", 546 UMA_HISTOGRAM_ENUMERATION("Histogram.InconsistenciesBrowserUnique",
558 problem, base::HistogramBase::NEVER_EXCEEDED_VALUE); 547 problem, base::HistogramBase::NEVER_EXCEEDED_VALUE);
559 } 548 }
560 549
561 void MetricsService::InconsistencyDetectedInLoggedCount(int amount) { 550 void MetricsService::InconsistencyDetectedInLoggedCount(int amount) {
562 UMA_HISTOGRAM_COUNTS("Histogram.InconsistentSnapshotBrowser", 551 UMA_HISTOGRAM_COUNTS("Histogram.InconsistentSnapshotBrowser",
563 std::abs(amount)); 552 std::abs(amount));
564 } 553 }
565 554
566 void MetricsService::BrowserChildProcessCrashed(
567 const content::ChildProcessData& data) {
568 // TODO(asvitkine): Move this into ChromeStabilityStatsProvider.
569 #if defined(ENABLE_PLUGINS)
570 // Exclude plugin crashes from the count below because we report them via
571 // a separate UMA metric.
572 if (PluginMetricsProvider::IsPluginProcess(data.process_type))
573 return;
574 #endif
575
576 IncrementPrefValue(prefs::kStabilityChildProcessCrashCount);
577 }
578
579 void MetricsService::HandleIdleSinceLastTransmission(bool in_idle) { 555 void MetricsService::HandleIdleSinceLastTransmission(bool in_idle) {
580 // If there wasn't a lot of action, maybe the computer was asleep, in which 556 // If there wasn't a lot of action, maybe the computer was asleep, in which
581 // case, the log transmissions should have stopped. Here we start them up 557 // case, the log transmissions should have stopped. Here we start them up
582 // again. 558 // again.
583 if (!in_idle && idle_since_last_transmission_) 559 if (!in_idle && idle_since_last_transmission_)
584 StartSchedulerIfNecessary(); 560 StartSchedulerIfNecessary();
585 idle_since_last_transmission_ = in_idle; 561 idle_since_last_transmission_ = in_idle;
586 } 562 }
587 563
588 void MetricsService::OnApplicationNotIdle() { 564 void MetricsService::OnApplicationNotIdle() {
(...skipping 877 matching lines...) Expand 10 before | Expand all | Expand 10 after
1466 RecordCurrentState(pref); 1442 RecordCurrentState(pref);
1467 } 1443 }
1468 1444
1469 void MetricsService::RecordCurrentState(PrefService* pref) { 1445 void MetricsService::RecordCurrentState(PrefService* pref) {
1470 pref->SetInt64(prefs::kStabilityLastTimestampSec, Time::Now().ToTimeT()); 1446 pref->SetInt64(prefs::kStabilityLastTimestampSec, Time::Now().ToTimeT());
1471 1447
1472 #if defined(ENABLE_PLUGINS) 1448 #if defined(ENABLE_PLUGINS)
1473 plugin_metrics_provider_->RecordPluginChanges(); 1449 plugin_metrics_provider_->RecordPluginChanges();
1474 #endif 1450 #endif
1475 } 1451 }
1476
OLDNEW
« no previous file with comments | « chrome/browser/metrics/metrics_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698