1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_METRICS_STABILITY_METRICS_HELPER_H_
#define COMPONENTS_METRICS_STABILITY_METRICS_HELPER_H_
#include <string>
#include "base/memory/raw_ptr.h"
#include "base/process/kill.h"
#include "build/build_config.h"
#if BUILDFLAG(IS_WIN)
#include "base/win/windows_types.h"
#endif
class PrefRegistrySimple;
class PrefService;
namespace metrics {
// The values here correspond to values in the Stability message in
// system_profile.proto.
// This must stay 1-1 with the StabilityEventType enum in enums.xml.
// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.components.metrics
enum class StabilityEventType {
kPageLoad = 2,
kRendererCrash = 3,
// kRendererHang = 4, // Removed due to disuse and correctness issues.
kExtensionCrash = 5,
// kChildProcessCrash = 6, // Removed due to disuse and alternative metrics.
kLaunch = 15,
kBrowserCrash = 16,
// kIncompleteShutdown = 17, // Removed due to disuse and correctness issues.
// kPluginCrash = 22, // Removed due to plugin deprecation.
kRendererFailedLaunch = 24,
kExtensionRendererFailedLaunch = 25,
kRendererLaunch = 26,
kExtensionRendererLaunch = 27,
kGpuCrash = 31,
kUtilityCrash = 32,
kUtilityLaunch = 33,
kMaxValue = kUtilityLaunch,
};
class SystemProfileProto;
// Responsible for providing functionality common to different embedders'
// stability metrics providers.
class StabilityMetricsHelper {
public:
explicit StabilityMetricsHelper(PrefService* local_state);
StabilityMetricsHelper(const StabilityMetricsHelper&) = delete;
StabilityMetricsHelper& operator=(const StabilityMetricsHelper&) = delete;
~StabilityMetricsHelper();
#if BUILDFLAG(IS_ANDROID)
// A couple Local-State-pref-based stability counts are retained for Android
// WebView. Other platforms, including Android Chrome and WebLayer, should use
// Stability.Counts2 as the source of truth for these counts.
// Provides stability metrics.
void ProvideStabilityMetrics(SystemProfileProto* system_profile_proto);
// Clears the gathered stability metrics.
void ClearSavedStabilityMetrics();
#endif // BUILDFLAG(IS_ANDROID)
// Records a utility process launch with name |metrics_name|.
void BrowserUtilityProcessLaunched(const std::string& metrics_name);
// Records a utility process crash with name |metrics_name|.
void BrowserUtilityProcessCrashed(const std::string& metrics_name,
int exit_code);
// Records that a utility process with name |metrics_name| failed to launch.
// The |launch_error_code| is a platform-specific error code. On Windows, a
// |last_error| is also supplied to help diagnose the launch failure.
void BrowserUtilityProcessLaunchFailed(const std::string& metrics_name,
int launch_error_code
#if BUILDFLAG(IS_WIN)
,
DWORD last_error
#endif
);
// Logs the initiation of a page load.
void LogLoadStarted();
#if !BUILDFLAG(IS_ANDROID)
// Records a renderer process crash.
void LogRendererCrash(bool was_extension_process,
base::TerminationStatus status,
int exit_code);
#endif // !BUILDFLAG(IS_ANDROID)
// Records that a new renderer process was successfully launched.
void LogRendererLaunched(bool was_extension_process);
// Records a renderer process hang.
void LogRendererHang();
// Registers local state prefs used by this class.
static void RegisterPrefs(PrefRegistrySimple* registry);
// Increments the RendererCrash pref.
void IncreaseRendererCrashCount();
// Increments the GpuCrash pref.
// Note: This is currently only used on Android. If you want to call this on
// another platform, server-side processing code needs to be updated for that
// platform to use the new data. Server-side currently assumes Android-only.
void IncreaseGpuCrashCount();
// Records a histogram for the input |stability_event_type|.
static void RecordStabilityEvent(StabilityEventType stability_event_type);
private:
// Increments an Integer pref value specified by |path|.
void IncrementPrefValue(const char* path);
// Records that a renderer launch failed.
void LogRendererLaunchFailed(bool was_extension_process);
raw_ptr<PrefService> local_state_;
};
} // namespace metrics
#endif // COMPONENTS_METRICS_STABILITY_METRICS_HELPER_H_
|