Chromium Code Reviews| Index: chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.cc |
| diff --git a/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.cc |
| index 427b68ed5e27f3149b8a5978af2d3a5e574b2d11..fbc41f2f55a8773d4ecea0376741ff493d114379 100644 |
| --- a/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.cc |
| +++ b/chrome/browser/page_load_metrics/observers/amp_page_load_metrics_observer.cc |
| @@ -17,35 +17,50 @@ |
| namespace { |
| +using AMPViewType = AMPPageLoadMetricsObserver::AMPViewType; |
| + |
| +#define RECORD_HISTOGRAM_FOR_TYPE(name, amp_view_type, value) \ |
|
RyanSturm
2017/05/16 16:12:22
Slight nit:
This macro is defined before kHistogr
Bryan McQuade
2017/05/16 17:29:20
Done
|
| + do { \ |
| + PAGE_LOAD_HISTOGRAM(std::string(kHistogramPrefix).append(name), value); \ |
| + switch (amp_view_type) { \ |
| + case AMPViewType::AMP_CACHE: \ |
| + PAGE_LOAD_HISTOGRAM( \ |
| + std::string(kHistogramPrefix).append("AmpCache.").append(name), \ |
| + value); \ |
| + break; \ |
| + case AMPViewType::GOOGLE_SEARCH_AMP_VIEWER: \ |
| + PAGE_LOAD_HISTOGRAM(std::string(kHistogramPrefix) \ |
| + .append("GoogleSearch.") \ |
| + .append(name), \ |
| + value); \ |
| + break; \ |
| + case AMPViewType::GOOGLE_NEWS_AMP_VIEWER: \ |
| + PAGE_LOAD_HISTOGRAM( \ |
| + std::string(kHistogramPrefix).append("GoogleNews.").append(name), \ |
| + value); \ |
| + break; \ |
| + case AMPViewType::NONE: \ |
| + NOTREACHED(); \ |
| + break; \ |
| + } \ |
| + } while (false) |
| + |
| +const char kHistogramPrefix[] = "PageLoad.Clients.AMP."; |
| + |
| const char kHistogramAMPDOMContentLoadedEventFired[] = |
| - "PageLoad.Clients.AMPCache2.DocumentTiming." |
| - "NavigationToDOMContentLoadedEventFired"; |
| + "DocumentTiming.NavigationToDOMContentLoadedEventFired"; |
| const char kHistogramAMPFirstLayout[] = |
| - "PageLoad.Clients.AMPCache2.DocumentTiming.NavigationToFirstLayout"; |
| + "DocumentTiming.NavigationToFirstLayout"; |
| const char kHistogramAMPLoadEventFired[] = |
| - "PageLoad.Clients.AMPCache2.DocumentTiming.NavigationToLoadEventFired"; |
| + "DocumentTiming.NavigationToLoadEventFired"; |
| const char kHistogramAMPFirstContentfulPaint[] = |
| - "PageLoad.Clients.AMPCache2.PaintTiming." |
| - "NavigationToFirstContentfulPaint"; |
| -const char kHistogramAMPParseStart[] = |
| - "PageLoad.Clients.AMPCache2.ParseTiming.NavigationToParseStart"; |
| + "PaintTiming.NavigationToFirstContentfulPaint"; |
| +const char kHistogramAMPParseStart[] = "ParseTiming.NavigationToParseStart"; |
| // Host pattern for AMP Cache URLs. |
| // See https://developers.google.com/amp/cache/overview#amp-cache-url-format |
| // for a definition of the format of AMP Cache URLs. |
| -const char kAmpCacheHost[] = "cdn.ampproject.org"; |
| - |
| -// Pattern for the path of Google AMP Viewer URLs. |
| -const char kGoogleAmpViewerPathPattern[] = "/amp/"; |
| - |
| -bool IsAMPCacheURL(const GURL& url) { |
| - return url.host() == kAmpCacheHost || |
| - (google_util::IsGoogleDomainUrl( |
| - url, google_util::DISALLOW_SUBDOMAIN, |
| - google_util::DISALLOW_NON_STANDARD_PORTS) && |
| - base::StartsWith(url.path(), kGoogleAmpViewerPathPattern, |
| - base::CompareCase::SENSITIVE)); |
| -} |
| +const char kAmpCacheHostSuffix[] = "cdn.ampproject.org"; |
| } // namespace |
| @@ -56,8 +71,9 @@ AMPPageLoadMetricsObserver::~AMPPageLoadMetricsObserver() {} |
| page_load_metrics::PageLoadMetricsObserver::ObservePolicy |
| AMPPageLoadMetricsObserver::OnCommit( |
| content::NavigationHandle* navigation_handle) { |
| - return IsAMPCacheURL(navigation_handle->GetURL()) ? CONTINUE_OBSERVING |
| - : STOP_OBSERVING; |
| + view_type_ = GetAMPViewType(navigation_handle->GetURL()); |
| + return (view_type_ != AMPViewType::NONE) ? CONTINUE_OBSERVING |
| + : STOP_OBSERVING; |
| } |
| void AMPPageLoadMetricsObserver::OnDomContentLoadedEventStart( |
| @@ -67,8 +83,8 @@ void AMPPageLoadMetricsObserver::OnDomContentLoadedEventStart( |
| timing.document_timing.dom_content_loaded_event_start, info)) { |
| return; |
| } |
| - PAGE_LOAD_HISTOGRAM( |
| - kHistogramAMPDOMContentLoadedEventFired, |
| + RECORD_HISTOGRAM_FOR_TYPE( |
| + kHistogramAMPDOMContentLoadedEventFired, view_type_, |
| timing.document_timing.dom_content_loaded_event_start.value()); |
| } |
| @@ -79,8 +95,8 @@ void AMPPageLoadMetricsObserver::OnLoadEventStart( |
| timing.document_timing.load_event_start, info)) { |
| return; |
| } |
| - PAGE_LOAD_HISTOGRAM(kHistogramAMPLoadEventFired, |
| - timing.document_timing.load_event_start.value()); |
| + RECORD_HISTOGRAM_FOR_TYPE(kHistogramAMPLoadEventFired, view_type_, |
| + timing.document_timing.load_event_start.value()); |
| } |
| void AMPPageLoadMetricsObserver::OnFirstLayout( |
| @@ -90,8 +106,8 @@ void AMPPageLoadMetricsObserver::OnFirstLayout( |
| timing.document_timing.first_layout, info)) { |
| return; |
| } |
| - PAGE_LOAD_HISTOGRAM(kHistogramAMPFirstLayout, |
| - timing.document_timing.first_layout.value()); |
| + RECORD_HISTOGRAM_FOR_TYPE(kHistogramAMPFirstLayout, view_type_, |
| + timing.document_timing.first_layout.value()); |
| } |
| void AMPPageLoadMetricsObserver::OnFirstContentfulPaintInPage( |
| @@ -101,8 +117,8 @@ void AMPPageLoadMetricsObserver::OnFirstContentfulPaintInPage( |
| timing.paint_timing.first_contentful_paint, info)) { |
| return; |
| } |
| - PAGE_LOAD_HISTOGRAM(kHistogramAMPFirstContentfulPaint, |
| - timing.paint_timing.first_contentful_paint.value()); |
| + RECORD_HISTOGRAM_FOR_TYPE(kHistogramAMPFirstContentfulPaint, view_type_, |
| + timing.paint_timing.first_contentful_paint.value()); |
| } |
| void AMPPageLoadMetricsObserver::OnParseStart( |
| @@ -112,6 +128,32 @@ void AMPPageLoadMetricsObserver::OnParseStart( |
| timing.parse_timing.parse_start, info)) { |
| return; |
| } |
| - PAGE_LOAD_HISTOGRAM(kHistogramAMPParseStart, |
| - timing.parse_timing.parse_start.value()); |
| + RECORD_HISTOGRAM_FOR_TYPE(kHistogramAMPParseStart, view_type_, |
| + timing.parse_timing.parse_start.value()); |
| +} |
| + |
| +// static |
| +AMPPageLoadMetricsObserver::AMPViewType |
| +AMPPageLoadMetricsObserver::GetAMPViewType(const GURL& url) { |
| + if (base::EndsWith(url.host(), kAmpCacheHostSuffix, |
| + base::CompareCase::INSENSITIVE_ASCII)) { |
| + return AMPViewType::AMP_CACHE; |
| + } |
| + |
| + base::Optional<std::string> google_hostname_prefix = |
| + page_load_metrics::GetGoogleHostnamePrefix(url); |
| + if (!google_hostname_prefix.has_value()) |
| + return AMPViewType::NONE; |
| + |
| + if (google_hostname_prefix.value() == "www" && |
| + base::StartsWith(url.path_piece(), "/amp/", |
| + base::CompareCase::SENSITIVE)) { |
| + return AMPViewType::GOOGLE_SEARCH_AMP_VIEWER; |
| + } |
| + |
| + if (google_hostname_prefix.value() == "news" && |
| + url.path_piece() == "/news/amp") { |
| + return AMPViewType::GOOGLE_NEWS_AMP_VIEWER; |
| + } |
| + return AMPViewType::NONE; |
| } |