| 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..c53afe320cc678b7ba851026c76704361029c41b 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;
|
| +
|
| +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";
|
| +
|
| +#define RECORD_HISTOGRAM_FOR_TYPE(name, amp_view_type, value) \
|
| + 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)
|
|
|
| } // 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;
|
| }
|
|
|