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

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

Issue 2039363003: FirstMeaningfulPaint UMA (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: ready for review Created 4 years, 5 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/core_page_load_metrics_observer.cc
diff --git a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc
index eb81d4042bdfd64439d6d3e0216e29b2518f2a35..958c65d3663a8520ccc55032b439045b8105b980 100644
--- a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc
@@ -62,6 +62,13 @@ PageLoadType GetPageLoadType(ui::PageTransition transition) {
return LOAD_TYPE_NONE;
}
+enum FirstMeaningfulPaintStatus {
+ FMP_RECORDED,
+ FMP_DID_NOT_REACH_NETWORK_STABLE,
+ FMP_USER_INTERACTION_BEFORE_FMP,
+ FMP_ENUM_MAX
+};
+
} // namespace
namespace internal {
@@ -154,6 +161,10 @@ const char kHistogramFirstContentfulPaintImmediate[] =
"PageLoad.PaintTiming.NavigationToFirstContentfulPaint";
const char kBackgroundHistogramFirstContentfulPaintImmediate[] =
"PageLoad.PaintTiming.NavigationToFirstContentfulPaint.Background";
+const char kHistogramFirstMeaningfulPaintImmediate[] =
+ "PageLoad.PaintTiming.NavigationToFirstMeaningfulPaint";
+const char kBackgroundHistogramFirstMeaningfulPaintImmediate[] =
+ "PageLoad.PaintTiming.NavigationToFirstMeaningfulPaint.Background";
const char kHistogramParseStartToFirstContentfulPaintImmediate[] =
"PageLoad.PaintTiming.ParseStartToFirstContentfulPaint";
const char kBackgroundHistogramParseStartToFirstContentfulPaintImmediate[] =
@@ -162,6 +173,10 @@ const char kHistogramParseStartImmediate[] =
"PageLoad.ParseTiming.NavigationToParseStart";
const char kBackgroundHistogramParseStartImmediate[] =
"PageLoad.ParseTiming.NavigationToParseStart.Background";
+const char kHistogramFirstMeaningfulPaintToNetworkStable[] =
+ "PageLoad.PaintTiming.FirstMeaningfulPaintToNetworkStable";
+const char kBackgroundHistogramFirstMeaningfulPaintToNetworkStable[] =
+ "PageLoad.PaintTiming.FirstMeaningfulPaintToNetworkStable.Background";
const char kHistogramParseDurationImmediate[] =
"PageLoad.ParseTiming.ParseDuration";
const char kBackgroundHistogramParseDurationImmediate[] =
@@ -218,6 +233,9 @@ const char kHistogramForegroundToFirstPaint[] =
const char kRapporMetricsNameCoarseTiming[] =
"PageLoad.CoarseTiming.NavigationToFirstContentfulPaint";
+const char kHistogramFirstMeaningfulPaintStatus[] =
+ "PageLoad.PaintTiming.FirstMeaningfulPaintStatus";
+
} // namespace internal
CorePageLoadMetricsObserver::CorePageLoadMetricsObserver()
@@ -356,6 +374,35 @@ void CorePageLoadMetricsObserver::OnFirstContentfulPaint(
}
}
+void CorePageLoadMetricsObserver::OnFirstMeaningfulPaint(
+ const page_load_metrics::PageLoadTiming& timing,
+ const page_load_metrics::PageLoadExtraInfo& info) {
+ base::Time stamp =
Bryan McQuade 2016/07/29 15:02:26 Ah, we need to get rid of the base::Time for navig
Kunihiko Sakamoto 2016/08/01 08:52:07 Done.
+ timing.navigation_start + timing.first_meaningful_paint.value();
+ if (!first_user_interaction_time_ || stamp < first_user_interaction_time_) {
Bryan McQuade 2016/07/29 15:02:26 I'm not sure I agree that FMP should only be recor
Kunihiko Sakamoto 2016/08/01 08:52:07 Since current implementation has fairly long layou
+ if (WasStartedInForegroundOptionalEventInForeground(
+ timing.first_meaningful_paint, info)) {
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstMeaningfulPaintImmediate,
+ timing.first_meaningful_paint.value());
+ PAGE_LOAD_HISTOGRAM(
+ internal::kHistogramFirstMeaningfulPaintToNetworkStable,
+ base::Time::Now() - stamp);
+ } else {
+ PAGE_LOAD_HISTOGRAM(
+ internal::kBackgroundHistogramFirstMeaningfulPaintImmediate,
+ timing.first_meaningful_paint.value());
+ PAGE_LOAD_HISTOGRAM(
+ internal::kBackgroundHistogramFirstMeaningfulPaintToNetworkStable,
+ base::Time::Now() - stamp);
+ }
+ UMA_HISTOGRAM_ENUMERATION(internal::kHistogramFirstMeaningfulPaintStatus,
+ FMP_RECORDED, FMP_ENUM_MAX);
+ } else {
+ UMA_HISTOGRAM_ENUMERATION(internal::kHistogramFirstMeaningfulPaintStatus,
+ FMP_USER_INTERACTION_BEFORE_FMP, FMP_ENUM_MAX);
+ }
+}
+
void CorePageLoadMetricsObserver::OnParseStart(
const page_load_metrics::PageLoadTiming& timing,
const page_load_metrics::PageLoadExtraInfo& info) {
@@ -444,6 +491,14 @@ void CorePageLoadMetricsObserver::OnFailedProvisionalLoad(
}
}
+void CorePageLoadMetricsObserver::OnUserInput(
+ const blink::WebInputEvent& event) {
+ if (!first_user_interaction_time_ &&
+ event.type != blink::WebInputEvent::MouseMove) {
+ first_user_interaction_time_ = base::Time::Now();
Bryan McQuade 2016/07/29 15:02:26 same - I'm hoping we can remove this, but we shoul
Kunihiko Sakamoto 2016/08/01 08:52:06 Done.
+ }
+}
+
void CorePageLoadMetricsObserver::RecordTimingHistograms(
const page_load_metrics::PageLoadTiming& timing,
const page_load_metrics::PageLoadExtraInfo& info) {
@@ -621,6 +676,11 @@ void CorePageLoadMetricsObserver::RecordTimingHistograms(
PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstForeground,
info.first_foreground_time.value());
}
+
+ if (!timing.first_meaningful_paint) {
+ UMA_HISTOGRAM_ENUMERATION(internal::kHistogramFirstMeaningfulPaintStatus,
+ FMP_DID_NOT_REACH_NETWORK_STABLE, FMP_ENUM_MAX);
+ }
}
void CorePageLoadMetricsObserver::RecordRappor(

Powered by Google App Engine
This is Rietveld 408576698