| 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 |