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