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 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
103 return "_StartingWorker"; | 103 return "_StartingWorker"; |
104 case EmbeddedWorkerStatus::RUNNING: | 104 case EmbeddedWorkerStatus::RUNNING: |
105 return "_RunningWorker"; | 105 return "_RunningWorker"; |
106 case EmbeddedWorkerStatus::STOPPING: | 106 case EmbeddedWorkerStatus::STOPPING: |
107 return "_StoppingWorker"; | 107 return "_StoppingWorker"; |
108 } | 108 } |
109 NOTREACHED(); | 109 NOTREACHED(); |
110 return "_UNKNOWN"; | 110 return "_UNKNOWN"; |
111 } | 111 } |
112 | 112 |
113 std::string GetSiteSuffix(ServiceWorkerMetrics::Site site) { | |
114 switch (site) { | |
115 case ServiceWorkerMetrics::Site::OTHER: | |
116 case ServiceWorkerMetrics::Site::WITH_FETCH_HANDLER: | |
117 case ServiceWorkerMetrics::Site::WITHOUT_FETCH_HANDLER: | |
118 return ""; | |
119 case ServiceWorkerMetrics::Site::NEW_TAB_PAGE: | |
120 return ".ntp"; | |
121 case ServiceWorkerMetrics::Site::PLUS: | |
122 return ".plus"; | |
123 case ServiceWorkerMetrics::Site::INBOX: | |
124 return ".inbox"; | |
125 case ServiceWorkerMetrics::Site::DOCS: | |
126 return ".docs"; | |
127 case ServiceWorkerMetrics::Site::NUM_TYPES: | |
128 NOTREACHED() << static_cast<int>(site); | |
129 } | |
130 NOTREACHED(); | |
131 return ""; | |
132 } | |
133 | |
113 // Use this for histograms with dynamically generated names, which | 134 // Use this for histograms with dynamically generated names, which |
114 // otherwise can't use the UMA_HISTOGRAM macro without code duplication. | 135 // otherwise can't use the UMA_HISTOGRAM macro without code duplication. |
115 void RecordSuffixedTimeHistogram(const std::string& name, | 136 void RecordSuffixedTimeHistogram(const std::string& name, |
116 const std::string& suffix, | 137 const std::string& suffix, |
117 base::TimeDelta sample) { | 138 base::TimeDelta sample) { |
118 const std::string name_with_suffix = name + suffix; | 139 const std::string name_with_suffix = name + suffix; |
140 // This unrolls UMA_HISTOGRAM_TIMES. | |
141 base::HistogramBase* histogram_pointer = base::Histogram::FactoryTimeGet( | |
142 name_with_suffix, base::TimeDelta::FromMilliseconds(1), | |
143 base::TimeDelta::FromSeconds(10), 50, | |
144 base::HistogramBase::kUmaTargetedHistogramFlag); | |
145 histogram_pointer->AddTime(sample); | |
146 } | |
147 | |
148 // Use this for histograms with dynamically generated names, which | |
149 // otherwise can't use the UMA_MEDIUM_HISTOGRAM macro without code duplication. | |
150 void RecordSuffixedMediumTimeHistogram(const std::string& name, | |
151 const std::string& suffix, | |
152 base::TimeDelta sample) { | |
153 const std::string name_with_suffix = name + suffix; | |
119 // This unrolls UMA_HISTOGRAM_MEDIUM_TIMES. | 154 // This unrolls UMA_HISTOGRAM_MEDIUM_TIMES. |
120 base::HistogramBase* histogram_pointer = base::Histogram::FactoryTimeGet( | 155 base::HistogramBase* histogram_pointer = base::Histogram::FactoryTimeGet( |
121 name_with_suffix, base::TimeDelta::FromMilliseconds(10), | 156 name_with_suffix, base::TimeDelta::FromMilliseconds(10), |
122 base::TimeDelta::FromMinutes(3), 50, | 157 base::TimeDelta::FromMinutes(3), 50, |
123 base::HistogramBase::kUmaTargetedHistogramFlag); | 158 base::HistogramBase::kUmaTargetedHistogramFlag); |
124 histogram_pointer->AddTime(sample); | 159 histogram_pointer->AddTime(sample); |
125 } | 160 } |
126 | 161 |
127 // Use this for histograms with dynamically generated names, which | 162 // Use this for histograms with dynamically generated names, which |
128 // otherwise can't use the UMA_HISTOGRAM macro without code duplication. | 163 // otherwise can't use the UMA_HISTOGRAM macro without code duplication. |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
329 } | 364 } |
330 } | 365 } |
331 | 366 |
332 void ServiceWorkerMetrics::RecordStartWorkerTime(base::TimeDelta time, | 367 void ServiceWorkerMetrics::RecordStartWorkerTime(base::TimeDelta time, |
333 bool is_installed, | 368 bool is_installed, |
334 StartSituation start_situation, | 369 StartSituation start_situation, |
335 EventType purpose) { | 370 EventType purpose) { |
336 if (is_installed) { | 371 if (is_installed) { |
337 std::string name = "ServiceWorker.StartWorker.Time"; | 372 std::string name = "ServiceWorker.StartWorker.Time"; |
338 UMA_HISTOGRAM_MEDIUM_TIMES(name, time); | 373 UMA_HISTOGRAM_MEDIUM_TIMES(name, time); |
339 RecordSuffixedTimeHistogram(name, StartSituationToSuffix(start_situation), | 374 RecordSuffixedMediumTimeHistogram( |
340 time); | 375 name, StartSituationToSuffix(start_situation), time); |
341 RecordSuffixedTimeHistogram( | 376 RecordSuffixedMediumTimeHistogram( |
342 "ServiceWorker.StartWorker.Time", | 377 "ServiceWorker.StartWorker.Time", |
343 StartSituationToSuffix(start_situation) + EventTypeToSuffix(purpose), | 378 StartSituationToSuffix(start_situation) + EventTypeToSuffix(purpose), |
344 time); | 379 time); |
345 } else { | 380 } else { |
346 UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.StartNewWorker.Time", time); | 381 UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.StartNewWorker.Time", time); |
347 } | 382 } |
348 } | 383 } |
349 | 384 |
350 void ServiceWorkerMetrics::RecordActivatedWorkerPreparationTimeForMainFrame( | 385 void ServiceWorkerMetrics::RecordActivatedWorkerPreparationTimeForMainFrame( |
351 base::TimeDelta time, | 386 base::TimeDelta time, |
352 EmbeddedWorkerStatus initial_worker_status, | 387 EmbeddedWorkerStatus initial_worker_status, |
353 StartSituation start_situation) { | 388 StartSituation start_situation) { |
354 std::string name = | 389 std::string name = |
355 "ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time"; | 390 "ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time"; |
356 UMA_HISTOGRAM_MEDIUM_TIMES(name, time); | 391 UMA_HISTOGRAM_MEDIUM_TIMES(name, time); |
357 RecordSuffixedTimeHistogram( | 392 RecordSuffixedMediumTimeHistogram( |
358 name, GetWorkerPreparationSuffix(initial_worker_status, start_situation), | 393 name, GetWorkerPreparationSuffix(initial_worker_status, start_situation), |
359 time); | 394 time); |
360 } | 395 } |
361 | 396 |
362 void ServiceWorkerMetrics::RecordWorkerStopped(StopStatus status) { | 397 void ServiceWorkerMetrics::RecordWorkerStopped(StopStatus status) { |
363 UMA_HISTOGRAM_ENUMERATION("ServiceWorker.WorkerStopped", | 398 UMA_HISTOGRAM_ENUMERATION("ServiceWorker.WorkerStopped", |
364 static_cast<int>(status), | 399 static_cast<int>(status), |
365 static_cast<int>(StopStatus::NUM_TYPES)); | 400 static_cast<int>(StopStatus::NUM_TYPES)); |
366 } | 401 } |
367 | 402 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
413 UMA_HISTOGRAM_ENUMERATION( | 448 UMA_HISTOGRAM_ENUMERATION( |
414 "ServiceWorker.EventHandledRatioType.ForeignFetch", type, | 449 "ServiceWorker.EventHandledRatioType.ForeignFetch", type, |
415 NUM_EVENT_HANDLED_RATIO_TYPE); | 450 NUM_EVENT_HANDLED_RATIO_TYPE); |
416 break; | 451 break; |
417 default: | 452 default: |
418 // Do nothing. | 453 // Do nothing. |
419 break; | 454 break; |
420 } | 455 } |
421 } | 456 } |
422 | 457 |
458 void ServiceWorkerMetrics::RecordFetchEventDispatchingDelay( | |
shimazu
2016/08/18 04:58:53
I think this could be open to other events.
If do
horo
2016/08/22 14:57:35
Done.
| |
459 base::TimeDelta time, | |
460 Site site_for_metrics) { | |
461 const std::string name = "ServiceWorker.FetchEvent.DispatchingDelay"; | |
462 UMA_HISTOGRAM_TIMES(name, time); | |
463 const std::string site_suffix = GetSiteSuffix(site_for_metrics); | |
464 if (!site_suffix.empty()) | |
465 RecordSuffixedTimeHistogram(name, site_suffix, time); | |
466 } | |
467 | |
423 void ServiceWorkerMetrics::RecordNavigationHintPrecision( | 468 void ServiceWorkerMetrics::RecordNavigationHintPrecision( |
424 EventType start_worker_purpose, | 469 EventType start_worker_purpose, |
425 bool frame_fetch_event_fired) { | 470 bool frame_fetch_event_fired) { |
426 DCHECK(IsNavigationHintEvent(start_worker_purpose)); | 471 DCHECK(IsNavigationHintEvent(start_worker_purpose)); |
427 UMA_HISTOGRAM_BOOLEAN("ServiceWorker.NavigationHintPrecision", | 472 UMA_HISTOGRAM_BOOLEAN("ServiceWorker.NavigationHintPrecision", |
428 frame_fetch_event_fired); | 473 frame_fetch_event_fired); |
429 switch (start_worker_purpose) { | 474 switch (start_worker_purpose) { |
430 case EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN: | 475 case EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN: |
431 UMA_HISTOGRAM_BOOLEAN( | 476 UMA_HISTOGRAM_BOOLEAN( |
432 "ServiceWorker.NavigationHintPrecision.LINK_MOUSE_DOWN", | 477 "ServiceWorker.NavigationHintPrecision.LINK_MOUSE_DOWN", |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
574 void ServiceWorkerMetrics::RecordProcessCreated(bool is_new_process) { | 619 void ServiceWorkerMetrics::RecordProcessCreated(bool is_new_process) { |
575 UMA_HISTOGRAM_BOOLEAN("EmbeddedWorkerInstance.ProcessCreated", | 620 UMA_HISTOGRAM_BOOLEAN("EmbeddedWorkerInstance.ProcessCreated", |
576 is_new_process); | 621 is_new_process); |
577 } | 622 } |
578 | 623 |
579 void ServiceWorkerMetrics::RecordTimeToSendStartWorker( | 624 void ServiceWorkerMetrics::RecordTimeToSendStartWorker( |
580 base::TimeDelta duration, | 625 base::TimeDelta duration, |
581 StartSituation situation) { | 626 StartSituation situation) { |
582 std::string name = "EmbeddedWorkerInstance.Start.TimeToSendStartWorker"; | 627 std::string name = "EmbeddedWorkerInstance.Start.TimeToSendStartWorker"; |
583 UMA_HISTOGRAM_MEDIUM_TIMES(name, duration); | 628 UMA_HISTOGRAM_MEDIUM_TIMES(name, duration); |
584 RecordSuffixedTimeHistogram(name, StartSituationToSuffix(situation), | 629 RecordSuffixedMediumTimeHistogram(name, StartSituationToSuffix(situation), |
585 duration); | 630 duration); |
586 } | 631 } |
587 | 632 |
588 void ServiceWorkerMetrics::RecordTimeToURLJob(base::TimeDelta duration, | 633 void ServiceWorkerMetrics::RecordTimeToURLJob(base::TimeDelta duration, |
589 StartSituation situation) { | 634 StartSituation situation) { |
590 std::string name = "EmbeddedWorkerInstance.Start.TimeToURLJob"; | 635 std::string name = "EmbeddedWorkerInstance.Start.TimeToURLJob"; |
591 UMA_HISTOGRAM_MEDIUM_TIMES(name, duration); | 636 UMA_HISTOGRAM_MEDIUM_TIMES(name, duration); |
592 RecordSuffixedTimeHistogram(name, StartSituationToSuffix(situation), | 637 RecordSuffixedMediumTimeHistogram(name, StartSituationToSuffix(situation), |
593 duration); | 638 duration); |
594 } | 639 } |
595 | 640 |
596 void ServiceWorkerMetrics::RecordTimeToLoad(base::TimeDelta duration, | 641 void ServiceWorkerMetrics::RecordTimeToLoad(base::TimeDelta duration, |
597 LoadSource source, | 642 LoadSource source, |
598 StartSituation situation) { | 643 StartSituation situation) { |
599 std::string name; | 644 std::string name; |
600 switch (source) { | 645 switch (source) { |
601 case LoadSource::NETWORK: | 646 case LoadSource::NETWORK: |
602 name = "EmbeddedWorkerInstance.Start.TimeToLoad.Network"; | 647 name = "EmbeddedWorkerInstance.Start.TimeToLoad.Network"; |
603 UMA_HISTOGRAM_MEDIUM_TIMES(name, duration); | 648 UMA_HISTOGRAM_MEDIUM_TIMES(name, duration); |
604 RecordSuffixedTimeHistogram(name, StartSituationToSuffix(situation), | 649 RecordSuffixedMediumTimeHistogram(name, StartSituationToSuffix(situation), |
605 duration); | 650 duration); |
606 break; | 651 break; |
607 case LoadSource::HTTP_CACHE: | 652 case LoadSource::HTTP_CACHE: |
608 name = "EmbeddedWorkerInstance.Start.TimeToLoad.HttpCache"; | 653 name = "EmbeddedWorkerInstance.Start.TimeToLoad.HttpCache"; |
609 UMA_HISTOGRAM_MEDIUM_TIMES(name, duration); | 654 UMA_HISTOGRAM_MEDIUM_TIMES(name, duration); |
610 RecordSuffixedTimeHistogram(name, StartSituationToSuffix(situation), | 655 RecordSuffixedMediumTimeHistogram(name, StartSituationToSuffix(situation), |
611 duration); | 656 duration); |
612 break; | 657 break; |
613 case LoadSource::SERVICE_WORKER_STORAGE: | 658 case LoadSource::SERVICE_WORKER_STORAGE: |
614 name = "EmbeddedWorkerInstance.Start.TimeToLoad.InstalledScript"; | 659 name = "EmbeddedWorkerInstance.Start.TimeToLoad.InstalledScript"; |
615 UMA_HISTOGRAM_MEDIUM_TIMES(name, duration); | 660 UMA_HISTOGRAM_MEDIUM_TIMES(name, duration); |
616 RecordSuffixedTimeHistogram(name, StartSituationToSuffix(situation), | 661 RecordSuffixedMediumTimeHistogram(name, StartSituationToSuffix(situation), |
617 duration); | 662 duration); |
618 break; | 663 break; |
619 default: | 664 default: |
620 NOTREACHED() << static_cast<int>(source); | 665 NOTREACHED() << static_cast<int>(source); |
621 } | 666 } |
622 } | 667 } |
623 | 668 |
624 void ServiceWorkerMetrics::RecordTimeToStartThread(base::TimeDelta duration, | 669 void ServiceWorkerMetrics::RecordTimeToStartThread(base::TimeDelta duration, |
625 StartSituation situation) { | 670 StartSituation situation) { |
626 std::string name = "EmbeddedWorkerInstance.Start.TimeToStartThread"; | 671 std::string name = "EmbeddedWorkerInstance.Start.TimeToStartThread"; |
627 UMA_HISTOGRAM_MEDIUM_TIMES(name, duration); | 672 UMA_HISTOGRAM_MEDIUM_TIMES(name, duration); |
628 RecordSuffixedTimeHistogram(name, StartSituationToSuffix(situation), | 673 RecordSuffixedMediumTimeHistogram(name, StartSituationToSuffix(situation), |
629 duration); | 674 duration); |
630 } | 675 } |
631 | 676 |
632 void ServiceWorkerMetrics::RecordTimeToEvaluateScript( | 677 void ServiceWorkerMetrics::RecordTimeToEvaluateScript( |
633 base::TimeDelta duration, | 678 base::TimeDelta duration, |
634 StartSituation situation) { | 679 StartSituation situation) { |
635 std::string name = "EmbeddedWorkerInstance.Start.TimeToEvaluateScript"; | 680 std::string name = "EmbeddedWorkerInstance.Start.TimeToEvaluateScript"; |
636 UMA_HISTOGRAM_MEDIUM_TIMES(name, duration); | 681 UMA_HISTOGRAM_MEDIUM_TIMES(name, duration); |
637 RecordSuffixedTimeHistogram(name, StartSituationToSuffix(situation), | 682 RecordSuffixedMediumTimeHistogram(name, StartSituationToSuffix(situation), |
638 duration); | 683 duration); |
639 } | 684 } |
640 | 685 |
641 const char* ServiceWorkerMetrics::LoadSourceToString(LoadSource source) { | 686 const char* ServiceWorkerMetrics::LoadSourceToString(LoadSource source) { |
642 switch (source) { | 687 switch (source) { |
643 case LoadSource::NETWORK: | 688 case LoadSource::NETWORK: |
644 return "Network"; | 689 return "Network"; |
645 case LoadSource::HTTP_CACHE: | 690 case LoadSource::HTTP_CACHE: |
646 return "HTTP cache"; | 691 return "HTTP cache"; |
647 case LoadSource::SERVICE_WORKER_STORAGE: | 692 case LoadSource::SERVICE_WORKER_STORAGE: |
648 return "Service worker storage"; | 693 return "Service worker storage"; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
680 } else if (failure_count == 2) { | 725 } else if (failure_count == 2) { |
681 UMA_HISTOGRAM_ENUMERATION("ServiceWorker.StartWorker.AfterFailureStreak_2", | 726 UMA_HISTOGRAM_ENUMERATION("ServiceWorker.StartWorker.AfterFailureStreak_2", |
682 status, SERVICE_WORKER_ERROR_MAX_VALUE); | 727 status, SERVICE_WORKER_ERROR_MAX_VALUE); |
683 } else if (failure_count == 3) { | 728 } else if (failure_count == 3) { |
684 UMA_HISTOGRAM_ENUMERATION("ServiceWorker.StartWorker.AfterFailureStreak_3", | 729 UMA_HISTOGRAM_ENUMERATION("ServiceWorker.StartWorker.AfterFailureStreak_3", |
685 status, SERVICE_WORKER_ERROR_MAX_VALUE); | 730 status, SERVICE_WORKER_ERROR_MAX_VALUE); |
686 } | 731 } |
687 } | 732 } |
688 | 733 |
689 } // namespace content | 734 } // namespace content |
OLD | NEW |