Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1054)

Unified Diff: chrome/browser/page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.cc

Issue 2802833002: [Page Load Metrics] Add page load metrics for omnibox. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.cc
diff --git a/chrome/browser/page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.cc
new file mode 100644
index 0000000000000000000000000000000000000000..58d13f4c1da534fb4141f47e108b1b2bf1e7208f
--- /dev/null
+++ b/chrome/browser/page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.cc
@@ -0,0 +1,122 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.h"
+
+#include <algorithm>
+
+#include "chrome/browser/page_load_metrics/page_load_metrics_util.h"
+
+namespace {
+
+const char kSearchFirstContentfulPaint[] =
+ "Omnibox.SuggestionUsed.Search.NavigationToFirstContentfulPaint";
+const char kURLFirstContentfulPaint[] =
+ "Omnibox.SuggestionUsed.URL.NavigationToFirstContentfulPaint";
+const char kPrerenderSearchFirstContentfulPaint[] =
+ "Omnibox.SuggestionUsed.Search.ForegroundToFirstContentfulPaint.Prerender";
+const char kPrerenderURLFirstContentfulPaint[] =
+ "Omnibox.SuggestionUsed.URL.ForegroundToFirstContentfulPaint.Prerender";
+
+const char kSearchFirstMeaningfulPaint[] =
+ "Omnibox.SuggestionUsed.Search.Experimental."
+ "NavigationToFirstMeaningfulPaint";
+const char kURLFirstMeaningfulPaint[] =
+ "Omnibox.SuggestionUsed.URL.Experimental.NavigationToFirstMeaningfulPaint";
+const char kPrerenderSearchFirstMeaningfulPaint[] =
+ "Omnibox.SuggestionUsed.Search.Experimental."
+ "ForegroundToFirstMeaningfulPaint.Prerender";
+const char kPrerenderURLFirstMeaningfulPaint[] =
+ "Omnibox.SuggestionUsed.URL.Experimental."
+ "ForegroundToFirstMeaningfulPaint.Prerender";
+
+const char kPrerenderSearchNavigationToFirstForeground[] =
+ "Omnibox.SuggestionUsed.Search.NavigationToFirstForeground.Prerender";
+const char kPrerenderURLNavigationToFirstForeground[] =
+ "Omnibox.SuggestionUsed.URL.NavigationToFirstForeground.Prerender";
+
+} // namespace
+
+OmniboxSuggestionUsedMetricsObserver::OmniboxSuggestionUsedMetricsObserver(
+ bool is_prerender)
+ : is_prerender_(is_prerender) {}
+
+OmniboxSuggestionUsedMetricsObserver::~OmniboxSuggestionUsedMetricsObserver() {}
+
+page_load_metrics::PageLoadMetricsObserver::ObservePolicy
+OmniboxSuggestionUsedMetricsObserver::OnHidden(
+ const page_load_metrics::PageLoadTiming& timing,
+ const page_load_metrics::PageLoadExtraInfo& info) {
+ return STOP_OBSERVING;
+}
+
+page_load_metrics::PageLoadMetricsObserver::ObservePolicy
+OmniboxSuggestionUsedMetricsObserver::OnCommit(
+ content::NavigationHandle* navigation_handle) {
+ transition_type_ = navigation_handle->GetPageTransition();
+ return (transition_type_ & ui::PAGE_TRANSITION_FROM_ADDRESS_BAR) != 0
+ ? CONTINUE_OBSERVING
+ : STOP_OBSERVING;
+}
+
+void OmniboxSuggestionUsedMetricsObserver::OnFirstContentfulPaint(
+ const page_load_metrics::PageLoadTiming& timing,
+ const page_load_metrics::PageLoadExtraInfo& info) {
+ base::TimeDelta fcp = timing.first_contentful_paint.value();
+
+ if (info.started_in_foreground) {
+ if (ui::PageTransitionCoreTypeIs(transition_type_,
+ ui::PAGE_TRANSITION_GENERATED)) {
+ PAGE_LOAD_HISTOGRAM(kSearchFirstContentfulPaint, fcp);
+ } else if (ui::PageTransitionCoreTypeIs(transition_type_,
+ ui::PAGE_TRANSITION_TYPED)) {
+ PAGE_LOAD_HISTOGRAM(kURLFirstContentfulPaint, fcp);
+ }
+ return;
+ }
+ // Since a page is not supposed to paint in the background,
+ // when this function gets called, first_foreground_time should be set.
+ // We add this check just to be safe.
+ if (is_prerender_ && info.first_foreground_time) {
+ base::TimeDelta perceived_fcp =
+ std::max(base::TimeDelta(), fcp - info.first_foreground_time.value());
+ if (ui::PageTransitionCoreTypeIs(transition_type_,
+ ui::PAGE_TRANSITION_GENERATED)) {
+ PAGE_LOAD_HISTOGRAM(kPrerenderSearchFirstContentfulPaint, perceived_fcp);
+ PAGE_LOAD_HISTOGRAM(kPrerenderSearchNavigationToFirstForeground,
+ info.first_foreground_time.value());
+ } else if (ui::PageTransitionCoreTypeIs(transition_type_,
+ ui::PAGE_TRANSITION_TYPED)) {
+ PAGE_LOAD_HISTOGRAM(kPrerenderURLFirstContentfulPaint, perceived_fcp);
+ PAGE_LOAD_HISTOGRAM(kPrerenderURLNavigationToFirstForeground,
+ info.first_foreground_time.value());
+ }
+ }
+}
+
+void OmniboxSuggestionUsedMetricsObserver::OnFirstMeaningfulPaint(
+ const page_load_metrics::PageLoadTiming& timing,
+ const page_load_metrics::PageLoadExtraInfo& info) {
+ base::TimeDelta fmp = timing.first_meaningful_paint.value();
+
+ if (info.started_in_foreground) {
+ if (ui::PageTransitionCoreTypeIs(transition_type_,
+ ui::PAGE_TRANSITION_GENERATED)) {
+ PAGE_LOAD_HISTOGRAM(kSearchFirstMeaningfulPaint, fmp);
+ } else if (ui::PageTransitionCoreTypeIs(transition_type_,
+ ui::PAGE_TRANSITION_TYPED)) {
+ PAGE_LOAD_HISTOGRAM(kURLFirstMeaningfulPaint, fmp);
+ }
+ } else if (is_prerender_ && info.first_foreground_time) {
+ base::TimeDelta perceived_fmp =
+ std::max(base::TimeDelta(), fmp - info.first_foreground_time.value());
+ if (ui::PageTransitionCoreTypeIs(transition_type_,
+ ui::PAGE_TRANSITION_GENERATED)) {
+ PAGE_LOAD_HISTOGRAM(kPrerenderSearchFirstMeaningfulPaint, perceived_fmp);
+ } else if (ui::PageTransitionCoreTypeIs(transition_type_,
+ ui::PAGE_TRANSITION_TYPED)) {
+ PAGE_LOAD_HISTOGRAM(kPrerenderURLFirstMeaningfulPaint, perceived_fmp);
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698