| 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/core_page_load_metrics_obse
rver.h" | 5 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse
rver.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 const char kHistogramLoadTypeFirstContentfulPaintForwardBack[] = | 150 const char kHistogramLoadTypeFirstContentfulPaintForwardBack[] = |
| 151 "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType." | 151 "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType." |
| 152 "ForwardBackNavigation"; | 152 "ForwardBackNavigation"; |
| 153 const char kHistogramLoadTypeFirstContentfulPaintForwardBackNoStore[] = | 153 const char kHistogramLoadTypeFirstContentfulPaintForwardBackNoStore[] = |
| 154 "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType." | 154 "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType." |
| 155 "ForwardBackNavigation.NoStore"; | 155 "ForwardBackNavigation.NoStore"; |
| 156 const char kHistogramLoadTypeFirstContentfulPaintNewNavigation[] = | 156 const char kHistogramLoadTypeFirstContentfulPaintNewNavigation[] = |
| 157 "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType." | 157 "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType." |
| 158 "NewNavigation"; | 158 "NewNavigation"; |
| 159 | 159 |
| 160 const char kHistogramPageTimingPageEnd[] = |
| 161 "PageLoad.Experimental.PageTiming.NavigationToPageEnd"; |
| 162 const char kHistogramPageTimingFirstPaintToPageEnd[] = |
| 163 "PageLoad.Experimental.PageTiming.FirstPaintToPageEnd"; |
| 164 |
| 165 const char kHistogramPageTimingPageEndNoEndTime[] = |
| 166 "PageLoad.Experimental.PageTiming.NavigationToPageEnd.NoEndTime"; |
| 167 const char kHistogramPageTimingFirstPaintToPageEndNoEndTime[] = |
| 168 "PageLoad.Experimental.PageTiming.FirstPaintToPageEnd.NoEndTime"; |
| 169 |
| 170 const char kHistogramPageTimingFirstBackground[] = |
| 171 "PageLoad.Experimental.PageTiming.NavigationToFirstBackground"; |
| 172 const char kHistogramPageTimingFirstPaintToFirstBackground[] = |
| 173 "PageLoad.Experimental.PageTiming.FirstPaintToFirstBackground"; |
| 174 |
| 160 const char kHistogramLoadTypeParseStartReload[] = | 175 const char kHistogramLoadTypeParseStartReload[] = |
| 161 "PageLoad.ParseTiming.NavigationToParseStart.LoadType.Reload"; | 176 "PageLoad.ParseTiming.NavigationToParseStart.LoadType.Reload"; |
| 162 const char kHistogramLoadTypeParseStartForwardBack[] = | 177 const char kHistogramLoadTypeParseStartForwardBack[] = |
| 163 "PageLoad.ParseTiming.NavigationToParseStart.LoadType." | 178 "PageLoad.ParseTiming.NavigationToParseStart.LoadType." |
| 164 "ForwardBackNavigation"; | 179 "ForwardBackNavigation"; |
| 165 const char kHistogramLoadTypeParseStartForwardBackNoStore[] = | 180 const char kHistogramLoadTypeParseStartForwardBackNoStore[] = |
| 166 "PageLoad.ParseTiming.NavigationToParseStart.LoadType." | 181 "PageLoad.ParseTiming.NavigationToParseStart.LoadType." |
| 167 "ForwardBackNavigation.NoStore"; | 182 "ForwardBackNavigation.NoStore"; |
| 168 const char kHistogramLoadTypeParseStartNewNavigation[] = | 183 const char kHistogramLoadTypeParseStartNewNavigation[] = |
| 169 "PageLoad.ParseTiming.NavigationToParseStart.LoadType.NewNavigation"; | 184 "PageLoad.ParseTiming.NavigationToParseStart.LoadType.NewNavigation"; |
| 170 | 185 |
| 171 const char kHistogramFirstForeground[] = | 186 const char kHistogramFirstForeground[] = |
| 172 "PageLoad.Timing2.NavigationToFirstForeground"; | 187 "PageLoad.PageTiming.NavigationToFirstForeground"; |
| 173 | 188 |
| 174 const char kHistogramFailedProvisionalLoad[] = | 189 const char kHistogramFailedProvisionalLoad[] = |
| 175 "PageLoad.Timing2.NavigationToFailedProvisionalLoad"; | 190 "PageLoad.PageTiming.NavigationToFailedProvisionalLoad"; |
| 176 | 191 |
| 177 const char kHistogramForegroundToFirstPaint[] = | 192 const char kHistogramForegroundToFirstPaint[] = |
| 178 "PageLoad.PaintTiming.ForegroundToFirstPaint"; | 193 "PageLoad.PaintTiming.ForegroundToFirstPaint"; |
| 179 | 194 |
| 180 const char kHistogramCacheRequestPercentParseStop[] = | 195 const char kHistogramCacheRequestPercentParseStop[] = |
| 181 "PageLoad.Experimental.Cache.RequestPercent.ParseStop"; | 196 "PageLoad.Experimental.Cache.RequestPercent.ParseStop"; |
| 182 const char kHistogramCacheTotalRequestsParseStop[] = | 197 const char kHistogramCacheTotalRequestsParseStop[] = |
| 183 "PageLoad.Experimental.Cache.TotalRequests.ParseStop"; | 198 "PageLoad.Experimental.Cache.TotalRequests.ParseStop"; |
| 184 const char kHistogramTotalRequestsParseStop[] = | 199 const char kHistogramTotalRequestsParseStop[] = |
| 185 "PageLoad.Experimental.TotalRequests.ParseStop"; | 200 "PageLoad.Experimental.TotalRequests.ParseStop"; |
| (...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 625 ++num_network_resources_; | 640 ++num_network_resources_; |
| 626 network_bytes_ += extra_request_info.raw_body_bytes; | 641 network_bytes_ += extra_request_info.raw_body_bytes; |
| 627 } | 642 } |
| 628 } | 643 } |
| 629 | 644 |
| 630 void CorePageLoadMetricsObserver::RecordTimingHistograms( | 645 void CorePageLoadMetricsObserver::RecordTimingHistograms( |
| 631 const page_load_metrics::PageLoadTiming& timing, | 646 const page_load_metrics::PageLoadTiming& timing, |
| 632 const page_load_metrics::PageLoadExtraInfo& info) { | 647 const page_load_metrics::PageLoadExtraInfo& info) { |
| 633 // Log time to first foreground / time to first background. Log counts that we | 648 // Log time to first foreground / time to first background. Log counts that we |
| 634 // started a relevant page load in the foreground / background. | 649 // started a relevant page load in the foreground / background. |
| 635 if (!info.started_in_foreground) { | 650 if (!info.started_in_foreground && info.first_foreground_time) { |
| 636 if (info.first_foreground_time) | 651 PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstForeground, |
| 637 PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstForeground, | 652 info.first_foreground_time.value()); |
| 638 info.first_foreground_time.value()); | |
| 639 } | 653 } |
| 640 | 654 |
| 641 if (timing.first_paint && !timing.first_meaningful_paint) { | 655 if (timing.first_paint && !timing.first_meaningful_paint) { |
| 642 RecordFirstMeaningfulPaintStatus( | 656 RecordFirstMeaningfulPaintStatus( |
| 643 timing.first_contentful_paint ? | 657 timing.first_contentful_paint ? |
| 644 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE : | 658 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE : |
| 645 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_FIRST_CONTENTFUL_PAINT); | 659 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_FIRST_CONTENTFUL_PAINT); |
| 646 } | 660 } |
| 647 | 661 |
| 648 if (timing.first_paint) { | 662 if (timing.first_paint) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 661 } | 675 } |
| 662 if (timing.first_meaningful_paint) { | 676 if (timing.first_meaningful_paint) { |
| 663 if (first_user_interaction_after_first_paint_.is_null()) { | 677 if (first_user_interaction_after_first_paint_.is_null()) { |
| 664 PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstMeaningfulPaintNoUserInput, | 678 PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstMeaningfulPaintNoUserInput, |
| 665 timing.first_meaningful_paint.value()); | 679 timing.first_meaningful_paint.value()); |
| 666 } else { | 680 } else { |
| 667 PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstMeaningfulPaintHadUserInput, | 681 PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstMeaningfulPaintHadUserInput, |
| 668 timing.first_meaningful_paint.value()); | 682 timing.first_meaningful_paint.value()); |
| 669 } | 683 } |
| 670 } | 684 } |
| 685 |
| 686 if (!info.started_in_foreground) |
| 687 return; |
| 688 |
| 689 if (info.first_background_time) { |
| 690 PAGE_LOAD_HISTOGRAM(internal::kHistogramPageTimingFirstBackground, |
| 691 info.first_background_time.value()); |
| 692 if (timing.first_paint && |
| 693 timing.first_paint <= info.first_background_time) { |
| 694 PAGE_LOAD_HISTOGRAM( |
| 695 internal::kHistogramPageTimingFirstPaintToFirstBackground, |
| 696 info.first_background_time.value() - timing.first_paint.value()); |
| 697 } |
| 698 } else if (info.page_end_time) { |
| 699 PAGE_LOAD_HISTOGRAM(internal::kHistogramPageTimingPageEnd, |
| 700 info.page_end_time.value()); |
| 701 if (timing.first_paint && timing.first_paint <= info.page_end_time) { |
| 702 PAGE_LOAD_HISTOGRAM( |
| 703 internal::kHistogramPageTimingFirstPaintToPageEnd, |
| 704 info.page_end_time.value() - timing.first_paint.value()); |
| 705 } |
| 706 } else { |
| 707 // If we terminate via FlushMetricsOnAppEnterBackground, we may have neither |
| 708 // a first_background_time nor a page_end_time. |
| 709 base::TimeDelta end_time = base::TimeTicks::Now() - navigation_start_; |
| 710 PAGE_LOAD_HISTOGRAM(internal::kHistogramPageTimingPageEndNoEndTime, |
| 711 end_time); |
| 712 if (timing.first_paint && timing.first_paint <= end_time) { |
| 713 PAGE_LOAD_HISTOGRAM( |
| 714 internal::kHistogramPageTimingFirstPaintToPageEndNoEndTime, |
| 715 end_time - timing.first_paint.value()); |
| 716 } |
| 717 } |
| 671 } | 718 } |
| 672 | 719 |
| 673 void CorePageLoadMetricsObserver::RecordByteAndResourceHistograms( | 720 void CorePageLoadMetricsObserver::RecordByteAndResourceHistograms( |
| 674 const page_load_metrics::PageLoadTiming& timing, | 721 const page_load_metrics::PageLoadTiming& timing, |
| 675 const page_load_metrics::PageLoadExtraInfo& info) { | 722 const page_load_metrics::PageLoadExtraInfo& info) { |
| 676 DCHECK_GE(network_bytes_, 0); | 723 DCHECK_GE(network_bytes_, 0); |
| 677 DCHECK_GE(cache_bytes_, 0); | 724 DCHECK_GE(cache_bytes_, 0); |
| 678 int64_t total_bytes = network_bytes_ + cache_bytes_; | 725 int64_t total_bytes = network_bytes_ + cache_bytes_; |
| 679 | 726 |
| 680 PAGE_BYTES_HISTOGRAM(internal::kHistogramNetworkBytes, network_bytes_); | 727 PAGE_BYTES_HISTOGRAM(internal::kHistogramNetworkBytes, network_bytes_); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 724 std::move(sample)); | 771 std::move(sample)); |
| 725 } | 772 } |
| 726 | 773 |
| 727 // Log the eTLD+1 of sites that did not report first meaningful paint. | 774 // Log the eTLD+1 of sites that did not report first meaningful paint. |
| 728 if (timing.first_paint && !timing.first_meaningful_paint) { | 775 if (timing.first_paint && !timing.first_meaningful_paint) { |
| 729 rappor::SampleDomainAndRegistryFromGURL( | 776 rappor::SampleDomainAndRegistryFromGURL( |
| 730 rappor_service, | 777 rappor_service, |
| 731 internal::kRapporMetricsNameFirstMeaningfulPaintNotRecorded, info.url); | 778 internal::kRapporMetricsNameFirstMeaningfulPaintNotRecorded, info.url); |
| 732 } | 779 } |
| 733 } | 780 } |
| OLD | NEW |