OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob
server.h" | 5 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob
server.h" |
6 | 6 |
7 #include "chrome/browser/page_load_metrics/page_load_metrics_util.h" | 7 #include "chrome/browser/page_load_metrics/page_load_metrics_util.h" |
8 | 8 |
9 using page_load_metrics::UserAbortType; | 9 using page_load_metrics::PageAbortReason; |
10 | 10 |
11 namespace internal { | 11 namespace internal { |
12 | 12 |
13 const char kHistogramAbortClientRedirectBeforeCommit[] = | |
14 "PageLoad.Experimental.AbortTiming.ClientRedirect.BeforeCommit"; | |
15 const char kHistogramAbortForwardBackBeforeCommit[] = | 13 const char kHistogramAbortForwardBackBeforeCommit[] = |
16 "PageLoad.Experimental.AbortTiming.ForwardBackNavigation.BeforeCommit"; | 14 "PageLoad.Experimental.AbortTiming.ForwardBackNavigation.BeforeCommit"; |
17 const char kHistogramAbortReloadBeforeCommit[] = | 15 const char kHistogramAbortReloadBeforeCommit[] = |
18 "PageLoad.Experimental.AbortTiming.Reload.BeforeCommit"; | 16 "PageLoad.Experimental.AbortTiming.Reload.BeforeCommit"; |
19 const char kHistogramAbortNewNavigationBeforeCommit[] = | 17 const char kHistogramAbortNewNavigationBeforeCommit[] = |
20 "PageLoad.Experimental.AbortTiming.NewNavigation.BeforeCommit"; | 18 "PageLoad.Experimental.AbortTiming.NewNavigation.BeforeCommit"; |
21 const char kHistogramAbortStopBeforeCommit[] = | 19 const char kHistogramAbortStopBeforeCommit[] = |
22 "PageLoad.Experimental.AbortTiming.Stop.BeforeCommit"; | 20 "PageLoad.Experimental.AbortTiming.Stop.BeforeCommit"; |
23 const char kHistogramAbortCloseBeforeCommit[] = | 21 const char kHistogramAbortCloseBeforeCommit[] = |
24 "PageLoad.Experimental.AbortTiming.Close.BeforeCommit"; | 22 "PageLoad.Experimental.AbortTiming.Close.BeforeCommit"; |
25 const char kHistogramAbortBackgroundBeforeCommit[] = | 23 const char kHistogramAbortBackgroundBeforeCommit[] = |
26 "PageLoad.Experimental.AbortTiming.Background.BeforeCommit"; | 24 "PageLoad.Experimental.AbortTiming.Background.BeforeCommit"; |
27 const char kHistogramAbortOtherBeforeCommit[] = | 25 const char kHistogramAbortOtherBeforeCommit[] = |
28 "PageLoad.Experimental.AbortTiming.Other.BeforeCommit"; | 26 "PageLoad.Experimental.AbortTiming.Other.BeforeCommit"; |
29 | 27 |
30 const char kHistogramAbortClientRedirectBeforePaint[] = | |
31 "PageLoad.Experimental.AbortTiming.ClientRedirect.AfterCommit.BeforePaint"; | |
32 const char kHistogramAbortForwardBackBeforePaint[] = | 28 const char kHistogramAbortForwardBackBeforePaint[] = |
33 "PageLoad.Experimental.AbortTiming.ForwardBackNavigation.AfterCommit." | 29 "PageLoad.Experimental.AbortTiming.ForwardBackNavigation.AfterCommit." |
34 "BeforePaint"; | 30 "BeforePaint"; |
35 const char kHistogramAbortReloadBeforePaint[] = | 31 const char kHistogramAbortReloadBeforePaint[] = |
36 "PageLoad.Experimental.AbortTiming.Reload.AfterCommit.BeforePaint"; | 32 "PageLoad.Experimental.AbortTiming.Reload.AfterCommit.BeforePaint"; |
37 const char kHistogramAbortNewNavigationBeforePaint[] = | 33 const char kHistogramAbortNewNavigationBeforePaint[] = |
38 "PageLoad.Experimental.AbortTiming.NewNavigation.AfterCommit.BeforePaint"; | 34 "PageLoad.Experimental.AbortTiming.NewNavigation.AfterCommit.BeforePaint"; |
39 const char kHistogramAbortStopBeforePaint[] = | 35 const char kHistogramAbortStopBeforePaint[] = |
40 "PageLoad.Experimental.AbortTiming.Stop.AfterCommit.BeforePaint"; | 36 "PageLoad.Experimental.AbortTiming.Stop.AfterCommit.BeforePaint"; |
41 const char kHistogramAbortCloseBeforePaint[] = | 37 const char kHistogramAbortCloseBeforePaint[] = |
42 "PageLoad.Experimental.AbortTiming.Close.AfterCommit.BeforePaint"; | 38 "PageLoad.Experimental.AbortTiming.Close.AfterCommit.BeforePaint"; |
43 const char kHistogramAbortBackgroundBeforePaint[] = | 39 const char kHistogramAbortBackgroundBeforePaint[] = |
44 "PageLoad.Experimental.AbortTiming.Background.AfterCommit.BeforePaint"; | 40 "PageLoad.Experimental.AbortTiming.Background.AfterCommit.BeforePaint"; |
45 | 41 |
46 const char kHistogramAbortClientRedirectDuringParse[] = | |
47 "PageLoad.Experimental.AbortTiming.ClientRedirect.DuringParse"; | |
48 const char kHistogramAbortForwardBackDuringParse[] = | 42 const char kHistogramAbortForwardBackDuringParse[] = |
49 "PageLoad.Experimental.AbortTiming.ForwardBackNavigation.DuringParse"; | 43 "PageLoad.Experimental.AbortTiming.ForwardBackNavigation.DuringParse"; |
50 const char kHistogramAbortReloadDuringParse[] = | 44 const char kHistogramAbortReloadDuringParse[] = |
51 "PageLoad.Experimental.AbortTiming.Reload.DuringParse"; | 45 "PageLoad.Experimental.AbortTiming.Reload.DuringParse"; |
52 const char kHistogramAbortNewNavigationDuringParse[] = | 46 const char kHistogramAbortNewNavigationDuringParse[] = |
53 "PageLoad.Experimental.AbortTiming.NewNavigation.DuringParse"; | 47 "PageLoad.Experimental.AbortTiming.NewNavigation.DuringParse"; |
54 const char kHistogramAbortStopDuringParse[] = | 48 const char kHistogramAbortStopDuringParse[] = |
55 "PageLoad.Experimental.AbortTiming.Stop.DuringParse"; | 49 "PageLoad.Experimental.AbortTiming.Stop.DuringParse"; |
56 const char kHistogramAbortCloseDuringParse[] = | 50 const char kHistogramAbortCloseDuringParse[] = |
57 "PageLoad.Experimental.AbortTiming.Close.DuringParse"; | 51 "PageLoad.Experimental.AbortTiming.Close.DuringParse"; |
58 const char kHistogramAbortBackgroundDuringParse[] = | 52 const char kHistogramAbortBackgroundDuringParse[] = |
59 "PageLoad.Experimental.AbortTiming.Background.DuringParse"; | 53 "PageLoad.Experimental.AbortTiming.Background.DuringParse"; |
60 | 54 |
61 } // namespace internal | 55 } // namespace internal |
62 | 56 |
63 namespace { | 57 namespace { |
64 | 58 |
65 void RecordAbortBeforeCommit( | 59 void RecordAbortBeforeCommit( |
66 UserAbortType abort_type, | 60 const page_load_metrics::PageAbortInfo& abort_info) { |
67 page_load_metrics::UserInitiatedInfo user_initiated_info, | 61 switch (abort_info.reason) { |
68 base::TimeDelta time_to_abort) { | 62 case PageAbortReason::ABORT_RELOAD: |
69 switch (abort_type) { | |
70 case UserAbortType::ABORT_RELOAD: | |
71 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortReloadBeforeCommit, | 63 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortReloadBeforeCommit, |
72 time_to_abort); | 64 abort_info.time_to_abort); |
73 if (user_initiated_info.user_gesture) { | 65 if (abort_info.user_initiated_info.user_gesture) { |
74 PAGE_LOAD_HISTOGRAM( | 66 PAGE_LOAD_HISTOGRAM( |
75 "PageLoad.Experimental.AbortTiming.Reload.BeforeCommit." | 67 "PageLoad.Experimental.AbortTiming.Reload.BeforeCommit." |
76 "UserGesture", | 68 "UserGesture", |
77 time_to_abort); | 69 abort_info.time_to_abort); |
78 } | 70 } |
79 if (user_initiated_info.user_input_event) { | 71 if (abort_info.user_initiated_info.user_input_event) { |
80 PAGE_LOAD_HISTOGRAM( | 72 PAGE_LOAD_HISTOGRAM( |
81 "PageLoad.Experimental.AbortTiming.Reload.BeforeCommit." | 73 "PageLoad.Experimental.AbortTiming.Reload.BeforeCommit." |
82 "UserInputEvent", | 74 "UserInputEvent", |
83 time_to_abort); | 75 abort_info.time_to_abort); |
84 } | 76 } |
85 if (user_initiated_info.browser_initiated) { | 77 if (abort_info.user_initiated_info.browser_initiated) { |
86 PAGE_LOAD_HISTOGRAM( | 78 PAGE_LOAD_HISTOGRAM( |
87 "PageLoad.Experimental.AbortTiming.Reload.BeforeCommit." | 79 "PageLoad.Experimental.AbortTiming.Reload.BeforeCommit." |
88 "BrowserInitiated", | 80 "BrowserInitiated", |
89 time_to_abort); | 81 abort_info.time_to_abort); |
90 } | 82 } |
91 return; | 83 return; |
92 case UserAbortType::ABORT_FORWARD_BACK: | 84 case PageAbortReason::ABORT_FORWARD_BACK: |
93 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortForwardBackBeforeCommit, | 85 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortForwardBackBeforeCommit, |
94 time_to_abort); | 86 abort_info.time_to_abort); |
95 if (user_initiated_info.user_gesture) { | 87 if (abort_info.user_initiated_info.user_gesture) { |
96 PAGE_LOAD_HISTOGRAM( | 88 PAGE_LOAD_HISTOGRAM( |
97 "PageLoad.Experimental.AbortTiming.ForwardBackNavigation." | 89 "PageLoad.Experimental.AbortTiming.ForwardBackNavigation." |
98 "BeforeCommit.UserGesture", | 90 "BeforeCommit.UserGesture", |
99 time_to_abort); | 91 abort_info.time_to_abort); |
100 } | 92 } |
101 if (user_initiated_info.user_input_event) { | 93 if (abort_info.user_initiated_info.user_input_event) { |
102 PAGE_LOAD_HISTOGRAM( | 94 PAGE_LOAD_HISTOGRAM( |
103 "PageLoad.Experimental.AbortTiming.ForwardBackNavigation." | 95 "PageLoad.Experimental.AbortTiming.ForwardBackNavigation." |
104 "BeforeCommit.UserInputEvent", | 96 "BeforeCommit.UserInputEvent", |
105 time_to_abort); | 97 abort_info.time_to_abort); |
106 } | 98 } |
107 if (user_initiated_info.browser_initiated) { | 99 if (abort_info.user_initiated_info.browser_initiated) { |
108 PAGE_LOAD_HISTOGRAM( | 100 PAGE_LOAD_HISTOGRAM( |
109 "PageLoad.Experimental.AbortTiming.ForwardBackNavigation." | 101 "PageLoad.Experimental.AbortTiming.ForwardBackNavigation." |
110 "BeforeCommit.BrowserInitiated", | 102 "BeforeCommit.BrowserInitiated", |
111 time_to_abort); | 103 abort_info.time_to_abort); |
112 } | 104 } |
113 return; | 105 return; |
114 case UserAbortType::ABORT_CLIENT_REDIRECT: | 106 case PageAbortReason::ABORT_NEW_NAVIGATION: |
115 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortClientRedirectBeforeCommit, | |
116 time_to_abort); | |
117 return; | |
118 case UserAbortType::ABORT_NEW_NAVIGATION: | |
119 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortNewNavigationBeforeCommit, | 107 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortNewNavigationBeforeCommit, |
120 time_to_abort); | 108 abort_info.time_to_abort); |
121 if (user_initiated_info.user_gesture) { | 109 if (abort_info.user_initiated_info.user_gesture) { |
122 PAGE_LOAD_HISTOGRAM( | 110 PAGE_LOAD_HISTOGRAM( |
123 "PageLoad.Experimental.AbortTiming.NewNavigation.BeforeCommit." | 111 "PageLoad.Experimental.AbortTiming.NewNavigation.BeforeCommit." |
124 "UserGesture", | 112 "UserGesture", |
125 time_to_abort); | 113 abort_info.time_to_abort); |
126 } | 114 } |
127 if (user_initiated_info.user_input_event) { | 115 if (abort_info.user_initiated_info.user_input_event) { |
128 PAGE_LOAD_HISTOGRAM( | 116 PAGE_LOAD_HISTOGRAM( |
129 "PageLoad.Experimental.AbortTiming.NewNavigation.BeforeCommit." | 117 "PageLoad.Experimental.AbortTiming.NewNavigation.BeforeCommit." |
130 "UserInputEvent", | 118 "UserInputEvent", |
131 time_to_abort); | 119 abort_info.time_to_abort); |
132 } | 120 } |
133 if (user_initiated_info.browser_initiated) { | 121 if (abort_info.user_initiated_info.browser_initiated) { |
134 PAGE_LOAD_HISTOGRAM( | 122 PAGE_LOAD_HISTOGRAM( |
135 "PageLoad.Experimental.AbortTiming.NewNavigation.BeforeCommit." | 123 "PageLoad.Experimental.AbortTiming.NewNavigation.BeforeCommit." |
136 "BrowserInitiated", | 124 "BrowserInitiated", |
137 time_to_abort); | 125 abort_info.time_to_abort); |
138 } | 126 } |
139 return; | 127 return; |
140 case UserAbortType::ABORT_STOP: | 128 case PageAbortReason::ABORT_STOP: |
141 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortStopBeforeCommit, | 129 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortStopBeforeCommit, |
142 time_to_abort); | 130 abort_info.time_to_abort); |
143 return; | 131 return; |
144 case UserAbortType::ABORT_CLOSE: | 132 case PageAbortReason::ABORT_CLOSE: |
145 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortCloseBeforeCommit, | 133 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortCloseBeforeCommit, |
146 time_to_abort); | 134 abort_info.time_to_abort); |
147 return; | 135 return; |
148 case UserAbortType::ABORT_BACKGROUND: | 136 case PageAbortReason::ABORT_BACKGROUND: |
149 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortBackgroundBeforeCommit, | 137 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortBackgroundBeforeCommit, |
150 time_to_abort); | 138 abort_info.time_to_abort); |
151 return; | 139 return; |
152 case UserAbortType::ABORT_OTHER: | 140 case PageAbortReason::ABORT_OTHER: |
153 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortOtherBeforeCommit, | 141 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortOtherBeforeCommit, |
154 time_to_abort); | 142 abort_info.time_to_abort); |
155 return; | 143 return; |
156 case UserAbortType::ABORT_NONE: | 144 case PageAbortReason::ABORT_NONE: |
157 case UserAbortType::ABORT_LAST_ENTRY: | |
158 NOTREACHED(); | 145 NOTREACHED(); |
159 return; | 146 return; |
160 } | 147 } |
161 NOTREACHED(); | 148 NOTREACHED(); |
162 } | 149 } |
163 | 150 |
164 void RecordAbortAfterCommitBeforePaint( | 151 void RecordAbortAfterCommitBeforePaint( |
165 UserAbortType abort_type, | 152 const page_load_metrics::PageAbortInfo& abort_info) { |
166 page_load_metrics::UserInitiatedInfo user_initiated_info, | 153 switch (abort_info.reason) { |
167 base::TimeDelta time_to_abort) { | 154 case PageAbortReason::ABORT_RELOAD: |
168 switch (abort_type) { | |
169 case UserAbortType::ABORT_RELOAD: | |
170 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortReloadBeforePaint, | 155 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortReloadBeforePaint, |
171 time_to_abort); | 156 abort_info.time_to_abort); |
172 if (user_initiated_info.user_gesture) { | 157 if (abort_info.user_initiated_info.user_gesture) { |
173 PAGE_LOAD_HISTOGRAM( | 158 PAGE_LOAD_HISTOGRAM( |
174 "PageLoad.Experimental.AbortTiming.Reload.AfterCommit.BeforePaint." | 159 "PageLoad.Experimental.AbortTiming.Reload.AfterCommit.BeforePaint." |
175 "UserGesture", | 160 "UserGesture", |
176 time_to_abort); | 161 abort_info.time_to_abort); |
177 } | 162 } |
178 if (user_initiated_info.user_input_event) { | 163 if (abort_info.user_initiated_info.user_input_event) { |
179 PAGE_LOAD_HISTOGRAM( | 164 PAGE_LOAD_HISTOGRAM( |
180 "PageLoad.Experimental.AbortTiming.Reload.AfterCommit.BeforePaint." | 165 "PageLoad.Experimental.AbortTiming.Reload.AfterCommit.BeforePaint." |
181 "UserInputEvent", | 166 "UserInputEvent", |
182 time_to_abort); | 167 abort_info.time_to_abort); |
183 } | 168 } |
184 if (user_initiated_info.browser_initiated) { | 169 if (abort_info.user_initiated_info.browser_initiated) { |
185 PAGE_LOAD_HISTOGRAM( | 170 PAGE_LOAD_HISTOGRAM( |
186 "PageLoad.Experimental.AbortTiming.Reload.AfterCommit.BeforePaint." | 171 "PageLoad.Experimental.AbortTiming.Reload.AfterCommit.BeforePaint." |
187 "BrowserInitiated", | 172 "BrowserInitiated", |
188 time_to_abort); | 173 abort_info.time_to_abort); |
189 } | 174 } |
190 return; | 175 return; |
191 case UserAbortType::ABORT_FORWARD_BACK: | 176 case PageAbortReason::ABORT_FORWARD_BACK: |
192 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortForwardBackBeforePaint, | 177 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortForwardBackBeforePaint, |
193 time_to_abort); | 178 abort_info.time_to_abort); |
194 if (user_initiated_info.user_gesture) { | 179 if (abort_info.user_initiated_info.user_gesture) { |
195 PAGE_LOAD_HISTOGRAM( | 180 PAGE_LOAD_HISTOGRAM( |
196 "PageLoad.Experimental.AbortTiming.ForwardBackNavigation." | 181 "PageLoad.Experimental.AbortTiming.ForwardBackNavigation." |
197 "AfterCommit.BeforePaint.UserGesture", | 182 "AfterCommit.BeforePaint.UserGesture", |
198 time_to_abort); | 183 abort_info.time_to_abort); |
199 } | 184 } |
200 if (user_initiated_info.user_input_event) { | 185 if (abort_info.user_initiated_info.user_input_event) { |
201 PAGE_LOAD_HISTOGRAM( | 186 PAGE_LOAD_HISTOGRAM( |
202 "PageLoad.Experimental.AbortTiming.ForwardBackNavigation." | 187 "PageLoad.Experimental.AbortTiming.ForwardBackNavigation." |
203 "AfterCommit.BeforePaint.UserInputEvent", | 188 "AfterCommit.BeforePaint.UserInputEvent", |
204 time_to_abort); | 189 abort_info.time_to_abort); |
205 } | 190 } |
206 if (user_initiated_info.browser_initiated) { | 191 if (abort_info.user_initiated_info.browser_initiated) { |
207 PAGE_LOAD_HISTOGRAM( | 192 PAGE_LOAD_HISTOGRAM( |
208 "PageLoad.Experimental.AbortTiming.ForwardBackNavigation." | 193 "PageLoad.Experimental.AbortTiming.ForwardBackNavigation." |
209 "AfterCommit.BeforePaint.BrowserInitiated", | 194 "AfterCommit.BeforePaint.BrowserInitiated", |
210 time_to_abort); | 195 abort_info.time_to_abort); |
211 } | 196 } |
212 return; | 197 return; |
213 case UserAbortType::ABORT_CLIENT_REDIRECT: | 198 case PageAbortReason::ABORT_NEW_NAVIGATION: |
214 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortClientRedirectBeforePaint, | |
215 time_to_abort); | |
216 return; | |
217 case UserAbortType::ABORT_NEW_NAVIGATION: | |
218 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortNewNavigationBeforePaint, | 199 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortNewNavigationBeforePaint, |
219 time_to_abort); | 200 abort_info.time_to_abort); |
220 if (user_initiated_info.user_gesture) { | 201 if (abort_info.user_initiated_info.user_gesture) { |
221 PAGE_LOAD_HISTOGRAM( | 202 PAGE_LOAD_HISTOGRAM( |
222 "PageLoad.Experimental.AbortTiming.NewNavigation.AfterCommit." | 203 "PageLoad.Experimental.AbortTiming.NewNavigation.AfterCommit." |
223 "BeforePaint.UserGesture", | 204 "BeforePaint.UserGesture", |
224 time_to_abort); | 205 abort_info.time_to_abort); |
225 } | 206 } |
226 if (user_initiated_info.user_input_event) { | 207 if (abort_info.user_initiated_info.user_input_event) { |
227 PAGE_LOAD_HISTOGRAM( | 208 PAGE_LOAD_HISTOGRAM( |
228 "PageLoad.Experimental.AbortTiming.NewNavigation.AfterCommit." | 209 "PageLoad.Experimental.AbortTiming.NewNavigation.AfterCommit." |
229 "BeforePaint.UserInputEvent", | 210 "BeforePaint.UserInputEvent", |
230 time_to_abort); | 211 abort_info.time_to_abort); |
231 } | 212 } |
232 if (user_initiated_info.browser_initiated) { | 213 if (abort_info.user_initiated_info.browser_initiated) { |
233 PAGE_LOAD_HISTOGRAM( | 214 PAGE_LOAD_HISTOGRAM( |
234 "PageLoad.Experimental.AbortTiming.NewNavigation.AfterCommit." | 215 "PageLoad.Experimental.AbortTiming.NewNavigation.AfterCommit." |
235 "BeforePaint.BrowserInitiated", | 216 "BeforePaint.BrowserInitiated", |
236 time_to_abort); | 217 abort_info.time_to_abort); |
237 } | 218 } |
238 return; | 219 return; |
239 case UserAbortType::ABORT_STOP: | 220 case PageAbortReason::ABORT_STOP: |
240 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortStopBeforePaint, | 221 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortStopBeforePaint, |
241 time_to_abort); | 222 abort_info.time_to_abort); |
242 return; | 223 return; |
243 case UserAbortType::ABORT_CLOSE: | 224 case PageAbortReason::ABORT_CLOSE: |
244 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortCloseBeforePaint, | 225 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortCloseBeforePaint, |
245 time_to_abort); | 226 abort_info.time_to_abort); |
246 return; | 227 return; |
247 case UserAbortType::ABORT_BACKGROUND: | 228 case PageAbortReason::ABORT_BACKGROUND: |
248 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortBackgroundBeforePaint, | 229 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortBackgroundBeforePaint, |
249 time_to_abort); | 230 abort_info.time_to_abort); |
250 return; | 231 return; |
251 case UserAbortType::ABORT_OTHER: | 232 case PageAbortReason::ABORT_OTHER: |
252 NOTREACHED() << "Received UserAbortType::ABORT_OTHER for committed load."; | 233 NOTREACHED() |
| 234 << "Received PageAbortReason::ABORT_OTHER for committed load."; |
253 return; | 235 return; |
254 case UserAbortType::ABORT_NONE: | 236 case PageAbortReason::ABORT_NONE: |
255 case UserAbortType::ABORT_LAST_ENTRY: | |
256 NOTREACHED(); | 237 NOTREACHED(); |
257 return; | 238 return; |
258 } | 239 } |
259 NOTREACHED(); | 240 NOTREACHED(); |
260 } | 241 } |
261 | 242 |
262 void RecordAbortDuringParse(UserAbortType abort_type, | 243 void RecordAbortDuringParse( |
263 base::TimeDelta time_to_abort) { | 244 const page_load_metrics::PageAbortInfo& abort_info) { |
264 switch (abort_type) { | 245 switch (abort_info.reason) { |
265 case UserAbortType::ABORT_RELOAD: | 246 case PageAbortReason::ABORT_RELOAD: |
266 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortReloadDuringParse, | 247 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortReloadDuringParse, |
267 time_to_abort); | 248 abort_info.time_to_abort); |
268 return; | 249 return; |
269 case UserAbortType::ABORT_FORWARD_BACK: | 250 case PageAbortReason::ABORT_FORWARD_BACK: |
270 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortForwardBackDuringParse, | 251 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortForwardBackDuringParse, |
271 time_to_abort); | 252 abort_info.time_to_abort); |
272 return; | 253 return; |
273 case UserAbortType::ABORT_CLIENT_REDIRECT: | 254 case PageAbortReason::ABORT_NEW_NAVIGATION: |
274 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortClientRedirectDuringParse, | 255 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortNewNavigationDuringParse, |
275 time_to_abort); | 256 abort_info.time_to_abort); |
276 return; | 257 return; |
277 case UserAbortType::ABORT_NEW_NAVIGATION: | 258 case PageAbortReason::ABORT_STOP: |
278 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortNewNavigationDuringParse, | 259 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortStopDuringParse, |
279 time_to_abort); | 260 abort_info.time_to_abort); |
280 return; | 261 return; |
281 case UserAbortType::ABORT_STOP: | 262 case PageAbortReason::ABORT_CLOSE: |
282 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortStopDuringParse, | 263 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortCloseDuringParse, |
283 time_to_abort); | 264 abort_info.time_to_abort); |
284 return; | 265 return; |
285 case UserAbortType::ABORT_CLOSE: | 266 case PageAbortReason::ABORT_BACKGROUND: |
286 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortCloseDuringParse, | 267 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortBackgroundDuringParse, |
287 time_to_abort); | 268 abort_info.time_to_abort); |
288 return; | 269 return; |
289 case UserAbortType::ABORT_BACKGROUND: | 270 case PageAbortReason::ABORT_OTHER: |
290 PAGE_LOAD_HISTOGRAM(internal::kHistogramAbortBackgroundDuringParse, | 271 NOTREACHED() |
291 time_to_abort); | 272 << "Received PageAbortReason::ABORT_OTHER for committed load."; |
292 return; | 273 return; |
293 case UserAbortType::ABORT_OTHER: | 274 case PageAbortReason::ABORT_NONE: |
294 NOTREACHED() << "Received UserAbortType::ABORT_OTHER for committed load."; | |
295 return; | |
296 case UserAbortType::ABORT_NONE: | |
297 case UserAbortType::ABORT_LAST_ENTRY: | |
298 NOTREACHED(); | 275 NOTREACHED(); |
299 return; | 276 return; |
300 } | 277 } |
301 NOTREACHED(); | 278 NOTREACHED(); |
302 } | 279 } |
303 | 280 |
304 bool ShouldTrackMetrics( | 281 bool ShouldTrackMetrics(const page_load_metrics::PageLoadExtraInfo& extra_info, |
305 const page_load_metrics::PageLoadExtraInfo& extra_info) { | 282 const page_load_metrics::PageAbortInfo& abort_info) { |
306 UserAbortType abort_type = extra_info.abort_type; | 283 if (abort_info.reason == PageAbortReason::ABORT_NONE) |
307 if (abort_type == UserAbortType::ABORT_NONE) | |
308 return false; | 284 return false; |
309 | 285 |
310 DCHECK(extra_info.time_to_abort); | |
311 | |
312 // Don't log abort times if the page was backgrounded before the abort event. | 286 // Don't log abort times if the page was backgrounded before the abort event. |
313 if (!WasStartedInForegroundOptionalEventInForeground(extra_info.time_to_abort, | 287 if (!WasStartedInForegroundOptionalEventInForeground(abort_info.time_to_abort, |
314 extra_info)) | 288 extra_info)) |
315 return false; | 289 return false; |
316 | 290 |
317 return true; | 291 return true; |
318 } | 292 } |
319 | 293 |
320 } // namespace | 294 } // namespace |
321 | 295 |
322 AbortsPageLoadMetricsObserver::AbortsPageLoadMetricsObserver() {} | 296 AbortsPageLoadMetricsObserver::AbortsPageLoadMetricsObserver() {} |
323 | 297 |
324 void AbortsPageLoadMetricsObserver::OnComplete( | 298 void AbortsPageLoadMetricsObserver::OnComplete( |
325 const page_load_metrics::PageLoadTiming& timing, | 299 const page_load_metrics::PageLoadTiming& timing, |
326 const page_load_metrics::PageLoadExtraInfo& extra_info) { | 300 const page_load_metrics::PageLoadExtraInfo& extra_info) { |
327 if (!ShouldTrackMetrics(extra_info)) | 301 page_load_metrics::PageAbortInfo abort_info = GetPageAbortInfo(extra_info); |
| 302 if (!ShouldTrackMetrics(extra_info, abort_info)) |
328 return; | 303 return; |
329 | 304 |
330 // If we did not receive any timing IPCs from the render process, we can't | 305 // If we did not receive any timing IPCs from the render process, we can't |
331 // know for certain if the page was truly aborted before paint, or if the | 306 // know for certain if the page was truly aborted before paint, or if the |
332 // abort happened before we received the IPC from the render process. Thus, we | 307 // abort happened before we received the IPC from the render process. Thus, we |
333 // do not log aborts for these page loads. Tracked page loads that receive no | 308 // do not log aborts for these page loads. Tracked page loads that receive no |
334 // timing IPCs are tracked via the ERR_NO_IPCS_RECEIVED error code in the | 309 // timing IPCs are tracked via the ERR_NO_IPCS_RECEIVED error code in the |
335 // PageLoad.Events.InternalError histogram, so we can keep track of how often | 310 // PageLoad.Events.InternalError histogram, so we can keep track of how often |
336 // this happens. | 311 // this happens. |
337 if (timing.IsEmpty()) | 312 if (timing.IsEmpty()) |
338 return; | 313 return; |
339 | 314 |
340 const base::TimeDelta& time_to_abort = extra_info.time_to_abort.value(); | 315 if (timing.parse_start && abort_info.time_to_abort >= timing.parse_start && |
341 if (timing.parse_start && time_to_abort >= timing.parse_start && | 316 (!timing.parse_stop || timing.parse_stop >= abort_info.time_to_abort)) { |
342 (!timing.parse_stop || timing.parse_stop >= time_to_abort)) { | 317 RecordAbortDuringParse(abort_info); |
343 RecordAbortDuringParse(extra_info.abort_type, time_to_abort); | |
344 } | 318 } |
345 if (!timing.first_paint || timing.first_paint >= time_to_abort) { | 319 if (!timing.first_paint || timing.first_paint >= abort_info.time_to_abort) { |
346 RecordAbortAfterCommitBeforePaint(extra_info.abort_type, | 320 RecordAbortAfterCommitBeforePaint(abort_info); |
347 extra_info.abort_user_initiated_info, | |
348 time_to_abort); | |
349 } | 321 } |
350 } | 322 } |
351 | 323 |
352 void AbortsPageLoadMetricsObserver::OnFailedProvisionalLoad( | 324 void AbortsPageLoadMetricsObserver::OnFailedProvisionalLoad( |
353 const page_load_metrics::FailedProvisionalLoadInfo& failed_load_info, | 325 const page_load_metrics::FailedProvisionalLoadInfo& failed_load_info, |
354 const page_load_metrics::PageLoadExtraInfo& extra_info) { | 326 const page_load_metrics::PageLoadExtraInfo& extra_info) { |
355 if (!ShouldTrackMetrics(extra_info)) | 327 page_load_metrics::PageAbortInfo abort_info = GetPageAbortInfo(extra_info); |
| 328 if (!ShouldTrackMetrics(extra_info, abort_info)) |
356 return; | 329 return; |
357 | 330 |
358 RecordAbortBeforeCommit(extra_info.abort_type, | 331 RecordAbortBeforeCommit(abort_info); |
359 extra_info.abort_user_initiated_info, | |
360 extra_info.time_to_abort.value()); | |
361 } | 332 } |
OLD | NEW |