| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "content/browser/service_worker/service_worker_metrics.h" | 5 #include "content/browser/service_worker/service_worker_metrics.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/metrics/histogram_macros.h" | 10 #include "base/metrics/histogram_macros.h" |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 case ServiceWorkerMetrics::EventType::FETCH_SUB_RESOURCE: | 65 case ServiceWorkerMetrics::EventType::FETCH_SUB_RESOURCE: |
| 66 return "_FETCH_SUB_RESOURCE"; | 66 return "_FETCH_SUB_RESOURCE"; |
| 67 case ServiceWorkerMetrics::EventType::UNKNOWN: | 67 case ServiceWorkerMetrics::EventType::UNKNOWN: |
| 68 return "_UNKNOWN"; | 68 return "_UNKNOWN"; |
| 69 case ServiceWorkerMetrics::EventType::FOREIGN_FETCH: | 69 case ServiceWorkerMetrics::EventType::FOREIGN_FETCH: |
| 70 return "_FOREIGN_FETCH"; | 70 return "_FOREIGN_FETCH"; |
| 71 case ServiceWorkerMetrics::EventType::FETCH_WAITUNTIL: | 71 case ServiceWorkerMetrics::EventType::FETCH_WAITUNTIL: |
| 72 return "_FETCH_WAITUNTIL"; | 72 return "_FETCH_WAITUNTIL"; |
| 73 case ServiceWorkerMetrics::EventType::FOREIGN_FETCH_WAITUNTIL: | 73 case ServiceWorkerMetrics::EventType::FOREIGN_FETCH_WAITUNTIL: |
| 74 return "_FOREIGN_FETCH_WAITUNTIL"; | 74 return "_FOREIGN_FETCH_WAITUNTIL"; |
| 75 case ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN: | |
| 76 return "_NAVIGATION_HINT_LINK_MOUSE_DOWN"; | |
| 77 case ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_TAP_UNCONFIRMED: | |
| 78 return "_NAVIGATION_HINT_LINK_TAP_UNCONFIRMED"; | |
| 79 case ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_TAP_DOWN: | |
| 80 return "_NAVIGATION_HINT_LINK_TAP_DOWN"; | |
| 81 case ServiceWorkerMetrics::EventType::EXTERNAL_REQUEST: | 75 case ServiceWorkerMetrics::EventType::EXTERNAL_REQUEST: |
| 82 return "_EXTERNAL_REQUEST"; | 76 return "_EXTERNAL_REQUEST"; |
| 83 case ServiceWorkerMetrics::EventType::PAYMENT_REQUEST: | 77 case ServiceWorkerMetrics::EventType::PAYMENT_REQUEST: |
| 84 return "_PAYMENT_REQUEST"; | 78 return "_PAYMENT_REQUEST"; |
| 85 case ServiceWorkerMetrics::EventType::BACKGROUND_FETCH_ABORT: | 79 case ServiceWorkerMetrics::EventType::BACKGROUND_FETCH_ABORT: |
| 86 return "_BACKGROUND_FETCH_ABORT"; | 80 return "_BACKGROUND_FETCH_ABORT"; |
| 87 case ServiceWorkerMetrics::EventType::BACKGROUND_FETCH_CLICK: | 81 case ServiceWorkerMetrics::EventType::BACKGROUND_FETCH_CLICK: |
| 88 return "_BACKGROUND_FETCH_CLICK"; | 82 return "_BACKGROUND_FETCH_CLICK"; |
| 89 case ServiceWorkerMetrics::EventType::BACKGROUND_FETCH_FAIL: | 83 case ServiceWorkerMetrics::EventType::BACKGROUND_FETCH_FAIL: |
| 90 return "_BACKGROUND_FETCH_FAIL"; | 84 return "_BACKGROUND_FETCH_FAIL"; |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 base::HistogramBase::kUmaTargetedHistogramFlag); | 206 base::HistogramBase::kUmaTargetedHistogramFlag); |
| 213 histogram_pointer->Add(status); | 207 histogram_pointer->Add(status); |
| 214 } | 208 } |
| 215 | 209 |
| 216 void RecordURLMetricOnUI(const GURL& url) { | 210 void RecordURLMetricOnUI(const GURL& url) { |
| 217 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 211 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 218 GetContentClient()->browser()->RecordURLMetric( | 212 GetContentClient()->browser()->RecordURLMetric( |
| 219 "ServiceWorker.ControlledPageUrl", url); | 213 "ServiceWorker.ControlledPageUrl", url); |
| 220 } | 214 } |
| 221 | 215 |
| 222 // Returns true when the event is for a navigation hint. | |
| 223 bool IsNavigationHintEvent(ServiceWorkerMetrics::EventType event_type) { | |
| 224 using EventType = ServiceWorkerMetrics::EventType; | |
| 225 return event_type == EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN || | |
| 226 event_type == EventType::NAVIGATION_HINT_LINK_TAP_UNCONFIRMED || | |
| 227 event_type == EventType::NAVIGATION_HINT_LINK_TAP_DOWN; | |
| 228 } | |
| 229 | |
| 230 enum EventHandledRatioType { | 216 enum EventHandledRatioType { |
| 231 EVENT_HANDLED_NONE, | 217 EVENT_HANDLED_NONE, |
| 232 EVENT_HANDLED_SOME, | 218 EVENT_HANDLED_SOME, |
| 233 EVENT_HANDLED_ALL, | 219 EVENT_HANDLED_ALL, |
| 234 NUM_EVENT_HANDLED_RATIO_TYPE, | 220 NUM_EVENT_HANDLED_RATIO_TYPE, |
| 235 }; | 221 }; |
| 236 | 222 |
| 237 } // namespace | 223 } // namespace |
| 238 | 224 |
| 239 using ScopedEventRecorder = ServiceWorkerMetrics::ScopedEventRecorder; | 225 using ScopedEventRecorder = ServiceWorkerMetrics::ScopedEventRecorder; |
| 240 | 226 |
| 241 ScopedEventRecorder::ScopedEventRecorder( | 227 ScopedEventRecorder::ScopedEventRecorder() {} |
| 242 ServiceWorkerMetrics::EventType start_worker_purpose) | |
| 243 : start_worker_purpose_(start_worker_purpose) {} | |
| 244 | 228 |
| 245 ScopedEventRecorder::~ScopedEventRecorder() { | 229 ScopedEventRecorder::~ScopedEventRecorder() { |
| 246 for (const auto& ev : event_stats_) { | 230 for (const auto& ev : event_stats_) { |
| 247 RecordEventHandledRatio(ev.first, ev.second.handled_events, | 231 RecordEventHandledRatio(ev.first, ev.second.handled_events, |
| 248 ev.second.fired_events); | 232 ev.second.fired_events); |
| 249 } | 233 } |
| 250 if (IsNavigationHintEvent(start_worker_purpose_)) { | |
| 251 RecordNavigationHintPrecision( | |
| 252 start_worker_purpose_, | |
| 253 event_stats_[EventType::FETCH_MAIN_FRAME].fired_events != 0 || | |
| 254 event_stats_[EventType::FETCH_SUB_FRAME].fired_events != 0); | |
| 255 } | |
| 256 } | 234 } |
| 257 | 235 |
| 258 void ScopedEventRecorder::RecordEventHandledStatus( | 236 void ScopedEventRecorder::RecordEventHandledStatus( |
| 259 ServiceWorkerMetrics::EventType event, | 237 ServiceWorkerMetrics::EventType event, |
| 260 bool handled) { | 238 bool handled) { |
| 261 event_stats_[event].fired_events++; | 239 event_stats_[event].fired_events++; |
| 262 if (handled) | 240 if (handled) |
| 263 event_stats_[event].handled_events++; | 241 event_stats_[event].handled_events++; |
| 264 } | 242 } |
| 265 | 243 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 288 UMA_HISTOGRAM_ENUMERATION( | 266 UMA_HISTOGRAM_ENUMERATION( |
| 289 "ServiceWorker.EventHandledRatioType.ForeignFetch", type, | 267 "ServiceWorker.EventHandledRatioType.ForeignFetch", type, |
| 290 NUM_EVENT_HANDLED_RATIO_TYPE); | 268 NUM_EVENT_HANDLED_RATIO_TYPE); |
| 291 break; | 269 break; |
| 292 default: | 270 default: |
| 293 // Do nothing. | 271 // Do nothing. |
| 294 break; | 272 break; |
| 295 } | 273 } |
| 296 } | 274 } |
| 297 | 275 |
| 298 void ScopedEventRecorder::RecordNavigationHintPrecision( | |
| 299 ServiceWorkerMetrics::EventType start_worker_purpose, | |
| 300 bool frame_fetch_event_fired) { | |
| 301 DCHECK(IsNavigationHintEvent(start_worker_purpose)); | |
| 302 UMA_HISTOGRAM_BOOLEAN("ServiceWorker.NavigationHintPrecision", | |
| 303 frame_fetch_event_fired); | |
| 304 switch (start_worker_purpose) { | |
| 305 case EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN: | |
| 306 UMA_HISTOGRAM_BOOLEAN( | |
| 307 "ServiceWorker.NavigationHintPrecision.LINK_MOUSE_DOWN", | |
| 308 frame_fetch_event_fired); | |
| 309 break; | |
| 310 case EventType::NAVIGATION_HINT_LINK_TAP_UNCONFIRMED: | |
| 311 UMA_HISTOGRAM_BOOLEAN( | |
| 312 "ServiceWorker.NavigationHintPrecision.LINK_TAP_UNCONFIRMED", | |
| 313 frame_fetch_event_fired); | |
| 314 break; | |
| 315 case EventType::NAVIGATION_HINT_LINK_TAP_DOWN: | |
| 316 UMA_HISTOGRAM_BOOLEAN( | |
| 317 "ServiceWorker.NavigationHintPrecision.LINK_TAP_DOWN", | |
| 318 frame_fetch_event_fired); | |
| 319 break; | |
| 320 default: | |
| 321 NOTREACHED(); | |
| 322 break; | |
| 323 } | |
| 324 } | |
| 325 | |
| 326 const char* ServiceWorkerMetrics::EventTypeToString(EventType event_type) { | 276 const char* ServiceWorkerMetrics::EventTypeToString(EventType event_type) { |
| 327 switch (event_type) { | 277 switch (event_type) { |
| 328 case EventType::ACTIVATE: | 278 case EventType::ACTIVATE: |
| 329 return "Activate"; | 279 return "Activate"; |
| 330 case EventType::INSTALL: | 280 case EventType::INSTALL: |
| 331 return "Install"; | 281 return "Install"; |
| 332 case EventType::SYNC: | 282 case EventType::SYNC: |
| 333 return "Sync"; | 283 return "Sync"; |
| 334 case EventType::NOTIFICATION_CLICK: | 284 case EventType::NOTIFICATION_CLICK: |
| 335 return "Notification Click"; | 285 return "Notification Click"; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 348 case EventType::FETCH_SUB_RESOURCE: | 298 case EventType::FETCH_SUB_RESOURCE: |
| 349 return "Fetch Subresource"; | 299 return "Fetch Subresource"; |
| 350 case EventType::UNKNOWN: | 300 case EventType::UNKNOWN: |
| 351 return "Unknown"; | 301 return "Unknown"; |
| 352 case EventType::FOREIGN_FETCH: | 302 case EventType::FOREIGN_FETCH: |
| 353 return "Foreign Fetch"; | 303 return "Foreign Fetch"; |
| 354 case EventType::FETCH_WAITUNTIL: | 304 case EventType::FETCH_WAITUNTIL: |
| 355 return "Fetch WaitUntil"; | 305 return "Fetch WaitUntil"; |
| 356 case EventType::FOREIGN_FETCH_WAITUNTIL: | 306 case EventType::FOREIGN_FETCH_WAITUNTIL: |
| 357 return "Foreign Fetch WaitUntil"; | 307 return "Foreign Fetch WaitUntil"; |
| 358 case EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN: | |
| 359 return "Navigation Hint Link Mouse Down"; | |
| 360 case EventType::NAVIGATION_HINT_LINK_TAP_UNCONFIRMED: | |
| 361 return "Navigation Hint Link Tap Unconfirmed"; | |
| 362 case EventType::NAVIGATION_HINT_LINK_TAP_DOWN: | |
| 363 return "Navigation Hint Link Tap Down"; | |
| 364 case EventType::EXTERNAL_REQUEST: | 308 case EventType::EXTERNAL_REQUEST: |
| 365 return "External Request"; | 309 return "External Request"; |
| 366 case EventType::PAYMENT_REQUEST: | 310 case EventType::PAYMENT_REQUEST: |
| 367 return "Payment Request"; | 311 return "Payment Request"; |
| 368 case EventType::BACKGROUND_FETCH_ABORT: | 312 case EventType::BACKGROUND_FETCH_ABORT: |
| 369 return "Background Fetch Abort"; | 313 return "Background Fetch Abort"; |
| 370 case EventType::BACKGROUND_FETCH_CLICK: | 314 case EventType::BACKGROUND_FETCH_CLICK: |
| 371 return "Background Fetch Click"; | 315 return "Background Fetch Click"; |
| 372 case EventType::BACKGROUND_FETCH_FAIL: | 316 case EventType::BACKGROUND_FETCH_FAIL: |
| 373 return "Background Fetch Fail"; | 317 return "Background Fetch Fail"; |
| (...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 712 time); | 656 time); |
| 713 break; | 657 break; |
| 714 case EventType::BACKGROUND_FETCH_FAIL: | 658 case EventType::BACKGROUND_FETCH_FAIL: |
| 715 UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.BackgroundFetchFailEvent.Time", | 659 UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.BackgroundFetchFailEvent.Time", |
| 716 time); | 660 time); |
| 717 break; | 661 break; |
| 718 case EventType::BACKGROUND_FETCHED: | 662 case EventType::BACKGROUND_FETCHED: |
| 719 UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.BackgroundFetchedEvent.Time", | 663 UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.BackgroundFetchedEvent.Time", |
| 720 time); | 664 time); |
| 721 break; | 665 break; |
| 722 // Those navigation hints should not be sent as request events. | |
| 723 case EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN: | |
| 724 case EventType::NAVIGATION_HINT_LINK_TAP_UNCONFIRMED: | |
| 725 case EventType::NAVIGATION_HINT_LINK_TAP_DOWN: | |
| 726 | 666 |
| 727 case EventType::UNKNOWN: | 667 case EventType::UNKNOWN: |
| 728 case EventType::NUM_TYPES: | 668 case EventType::NUM_TYPES: |
| 729 NOTREACHED() << "Invalid event type"; | 669 NOTREACHED() << "Invalid event type"; |
| 730 break; | 670 break; |
| 731 } | 671 } |
| 732 } | 672 } |
| 733 | 673 |
| 734 void ServiceWorkerMetrics::RecordFetchEventStatus( | 674 void ServiceWorkerMetrics::RecordFetchEventStatus( |
| 735 bool is_main_resource, | 675 bool is_main_resource, |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1019 constexpr base::TimeDelta kMax = base::TimeDelta::FromDays(1); | 959 constexpr base::TimeDelta kMax = base::TimeDelta::FromDays(1); |
| 1020 // Set the bucket count to 50 since that is the recommended value for all | 960 // Set the bucket count to 50 since that is the recommended value for all |
| 1021 // histograms. | 961 // histograms. |
| 1022 const int kBucketCount = 50; | 962 const int kBucketCount = 50; |
| 1023 | 963 |
| 1024 UMA_HISTOGRAM_CUSTOM_TIMES("ServiceWorker.Runtime", time, kMin, kMax, | 964 UMA_HISTOGRAM_CUSTOM_TIMES("ServiceWorker.Runtime", time, kMin, kMax, |
| 1025 kBucketCount); | 965 kBucketCount); |
| 1026 } | 966 } |
| 1027 | 967 |
| 1028 } // namespace content | 968 } // namespace content |
| OLD | NEW |