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..d1a8253c9e6e3e5cfa4d0068b15d382d94efc406 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,49 @@ |
namespace { |
+using AMPViewType = AMPPageLoadMetricsObserver::AMPViewType; |
+ |
+#define RECORD_HISTOGRAM_FOR_TYPE(name, amp_view_type, value) \ |
+ do { \ |
+ PAGE_LOAD_HISTOGRAM(name, value); \ |
+ switch (amp_view_type) { \ |
+ case AMPViewType::AMP_CACHE: \ |
+ PAGE_LOAD_HISTOGRAM(std::string(name).append(".AmpCache"), value); \ |
+ break; \ |
+ case AMPViewType::GOOGLE_SEARCH_AMP_VIEWER: \ |
+ PAGE_LOAD_HISTOGRAM(std::string(name).append(".GoogleSearch"), value); \ |
+ break; \ |
+ case AMPViewType::GOOGLE_NEWS_AMP_VIEWER: \ |
+ PAGE_LOAD_HISTOGRAM(std::string(name).append(".GoogleNews"), value); \ |
+ break; \ |
+ case AMPViewType::NONE: \ |
+ NOTREACHED(); \ |
+ PAGE_LOAD_HISTOGRAM(std::string(name).append(".None"), value); \ |
RyanSturm
2017/05/15 20:42:06
Remove the PAGE_LOAD_HISTOGRAM from this case.
Bryan McQuade
2017/05/16 03:59:14
Done
|
+ break; \ |
+ } \ |
+ } while (false) |
+ |
const char kHistogramAMPDOMContentLoadedEventFired[] = |
- "PageLoad.Clients.AMPCache2.DocumentTiming." |
+ "PageLoad.Clients.AMP.DocumentTiming." |
"NavigationToDOMContentLoadedEventFired"; |
const char kHistogramAMPFirstLayout[] = |
- "PageLoad.Clients.AMPCache2.DocumentTiming.NavigationToFirstLayout"; |
+ "PageLoad.Clients.AMP.DocumentTiming.NavigationToFirstLayout"; |
const char kHistogramAMPLoadEventFired[] = |
- "PageLoad.Clients.AMPCache2.DocumentTiming.NavigationToLoadEventFired"; |
+ "PageLoad.Clients.AMP.DocumentTiming.NavigationToLoadEventFired"; |
const char kHistogramAMPFirstContentfulPaint[] = |
- "PageLoad.Clients.AMPCache2.PaintTiming." |
+ "PageLoad.Clients.AMP.PaintTiming." |
"NavigationToFirstContentfulPaint"; |
const char kHistogramAMPParseStart[] = |
- "PageLoad.Clients.AMPCache2.ParseTiming.NavigationToParseStart"; |
+ "PageLoad.Clients.AMP.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"; |
+const char kAmpCacheHostSuffix[] = "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 kGoogleSearchAmpViewerPathPrefix[] = "/amp/"; |
+const char kGoogleNewsAmpViewerPath[] = "/news/amp"; |
} // namespace |
@@ -56,8 +70,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 +82,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 +94,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 +105,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 +116,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 +127,33 @@ 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::StringPiece google_hostname_prefix; |
+ if (!page_load_metrics::IsGoogleHostnameAndGetPrefix( |
+ url, &google_hostname_prefix)) { |
+ return AMPViewType::NONE; |
+ } |
+ |
+ if (google_hostname_prefix == "www" && |
RyanSturm
2017/05/15 20:42:06
As a note: it's a little strange that "www" is inl
Bryan McQuade
2017/05/16 03:59:15
Done
|
+ base::StartsWith(url.path_piece(), kGoogleSearchAmpViewerPathPrefix, |
+ base::CompareCase::SENSITIVE)) { |
RyanSturm
2017/05/15 20:42:06
Not sure whether this should be case sensitive or
Bryan McQuade
2017/05/16 03:59:14
My understanding is that hostnames are not case se
|
+ return AMPViewType::GOOGLE_SEARCH_AMP_VIEWER; |
+ } |
+ |
+ if (google_hostname_prefix == "news" && |
+ url.path_piece() == kGoogleNewsAmpViewerPath) { |
+ return AMPViewType::GOOGLE_NEWS_AMP_VIEWER; |
+ } |
+ return AMPViewType::NONE; |
} |