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

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

Issue 2747173003: UKM: log PageTransition and failed provisional load info (Closed)
Patch Set: fix comment Created 3 years, 9 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/ukm_page_load_metrics_observer.cc
diff --git a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc
index 29b01b3282b5f0c2622187a8b5c3716f97b69a33..43f863441e2a3447abc92eacca1fb4b90f5a6cdc 100644
--- a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc
@@ -24,8 +24,12 @@ const char kUkmFirstContentfulPaintName[] =
const char kUkmFirstMeaningfulPaintName[] =
"Experimental.PaintTiming.NavigationToFirstMeaningfulPaint";
const char kUkmForegroundDurationName[] = "PageTiming.ForegroundDuration";
+const char kUkmFailedProvisionaLoadName[] =
+ "PageTiming.NavigationToFailedProvisionalLoad";
const char kUkmEffectiveConnectionType[] =
"Net.EffectiveConnectionType.OnNavigationStart";
+const char kUkmNetErrorCode[] = "Net.ErrorCode.OnFailedProvisionalLoad";
+const char kUkmPageTransition[] = "Navigation.PageTransition";
} // namespace internal
@@ -78,6 +82,14 @@ UkmPageLoadMetricsObserver::ObservePolicy UkmPageLoadMetricsObserver::OnStart(
effective_connection_type_ =
network_quality_provider_->GetEffectiveConnectionType();
}
+ page_transition_ = navigation_handle->GetPageTransition();
+ return CONTINUE_OBSERVING;
+}
+
+UkmPageLoadMetricsObserver::ObservePolicy UkmPageLoadMetricsObserver::OnCommit(
+ content::NavigationHandle* navigation_handle) {
+ // The PageTransition for the navigation may be updated on commit.
+ page_transition_ = navigation_handle->GetPageTransition();
return CONTINUE_OBSERVING;
}
@@ -104,6 +116,19 @@ void UkmPageLoadMetricsObserver::OnFailedProvisionalLoad(
const page_load_metrics::PageLoadExtraInfo& extra_info) {
RecordPageLoadExtraInfoMetrics(
extra_info, base::TimeTicks() /* no app_background_time */);
+
+ ukm::UkmService* ukm_service = g_browser_process->ukm_service();
+ std::unique_ptr<ukm::UkmEntryBuilder> builder =
+ ukm_service->GetEntryBuilder(source_id_, internal::kUkmPageLoadEventName);
+ // Error codes have negative values, however we log net error code enum values
+ // for UMA histograms using the equivalent positive value. For consistency in
+ // UKM, we convert to a positive value here.
+ int64_t net_error_code = static_cast<int64_t>(failed_load_info.error) * -1;
+ DCHECK_GE(net_error_code, 0);
+ builder->AddMetric(internal::kUkmNetErrorCode, net_error_code);
+ builder->AddMetric(
+ internal::kUkmFailedProvisionaLoadName,
+ failed_load_info.time_to_failed_provisional_load.InMilliseconds());
}
void UkmPageLoadMetricsObserver::OnComplete(
@@ -162,4 +187,7 @@ void UkmPageLoadMetricsObserver::RecordPageLoadExtraInfoMetrics(
builder->AddMetric(internal::kUkmEffectiveConnectionType,
static_cast<int64_t>(effective_connection_type_));
}
+ // page_transition_ fits in a uint32_t, so we can safely cast to int64_t.
+ builder->AddMetric(internal::kUkmPageTransition,
+ static_cast<int64_t>(page_transition_));
}

Powered by Google App Engine
This is Rietveld 408576698