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