1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_METRICS_CHROME_STABILITY_METRICS_PROVIDER_H_ 6#define CHROME_BROWSER_METRICS_CHROME_STABILITY_METRICS_PROVIDER_H_ 7 8#include "base/basictypes.h" 9#include "base/metrics/user_metrics.h" 10#include "base/process/kill.h" 11#include "components/metrics/metrics_provider.h" 12#include "content/public/browser/browser_child_process_observer.h" 13#include "content/public/browser/notification_observer.h" 14#include "content/public/browser/notification_registrar.h" 15 16class PrefRegistrySimple; 17 18namespace content { 19class RenderProcessHost; 20class WebContents; 21} 22 23// ChromeStabilityMetricsProvider gathers and logs Chrome-specific stability- 24// related metrics. 25class ChromeStabilityMetricsProvider 26 : public metrics::MetricsProvider, 27 public content::BrowserChildProcessObserver, 28 public content::NotificationObserver { 29 public: 30 ChromeStabilityMetricsProvider(); 31 virtual ~ChromeStabilityMetricsProvider(); 32 33 // metrics::MetricsDataProvider: 34 virtual void OnRecordingEnabled() OVERRIDE; 35 virtual void OnRecordingDisabled() OVERRIDE; 36 virtual void ProvideStabilityMetrics( 37 metrics::SystemProfileProto* system_profile_proto) OVERRIDE; 38 virtual void ClearSavedStabilityMetrics() OVERRIDE; 39 40 // Registers local state prefs used by this class. 41 static void RegisterPrefs(PrefRegistrySimple* registry); 42 43 private: 44 // content::NotificationObserver: 45 virtual void Observe(int type, 46 const content::NotificationSource& source, 47 const content::NotificationDetails& details) OVERRIDE; 48 49 // content::BrowserChildProcessObserver: 50 virtual void BrowserChildProcessCrashed( 51 const content::ChildProcessData& data) OVERRIDE; 52 53 // Logs the initiation of a page load and uses |web_contents| to do 54 // additional logging of the type of page loaded. 55 void LogLoadStarted(content::WebContents* web_contents); 56 57 // Records a renderer process crash. 58 void LogRendererCrash(content::RenderProcessHost* host, 59 base::TerminationStatus status, 60 int exit_code); 61 62 // Records a renderer process hang. 63 void LogRendererHang(); 64 65 // Registrar for receiving stability-related notifications. 66 content::NotificationRegistrar registrar_; 67 68 DISALLOW_COPY_AND_ASSIGN(ChromeStabilityMetricsProvider); 69}; 70 71#endif // CHROME_BROWSER_METRICS_CHROME_STABILITY_METRICS_PROVIDER_H_ 72