Chromium Code Reviews| 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 |