Commit 5a57aa3f authored by Matt Falkenhagen's avatar Matt Falkenhagen Committed by Chromium LUCI CQ

service worker: Add LCP metric, remove FMP.

We care more about LargestContentfulPaint than FirstMeaningfulPaint
these days.

Bug: 1119700
Change-Id: If9502b42366bd342f5c57e89960d86a17d2fa591
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2586174
Commit-Queue: Matt Falkenhagen <falken@chromium.org>
Reviewed-by: default avatarCharlie Harrison <csharrison@chromium.org>
Reviewed-by: default avatarBrian White <bcwhite@chromium.org>
Reviewed-by: default avatarMakoto Shimazu <shimazu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#836929}
parent b79fad61
......@@ -48,17 +48,14 @@ const char kBackgroundHistogramServiceWorkerFirstContentfulPaint[] =
const char kHistogramServiceWorkerParseStartToFirstContentfulPaint[] =
"PageLoad.Clients.ServiceWorker2.PaintTiming."
"ParseStartToFirstContentfulPaint";
const char kHistogramServiceWorkerFirstMeaningfulPaint[] =
"PageLoad.Clients.ServiceWorker2.Experimental.PaintTiming."
"NavigationToFirstMeaningfulPaint";
const char kHistogramServiceWorkerParseStartToFirstMeaningfulPaint[] =
"PageLoad.Clients.ServiceWorker2.Experimental.PaintTiming."
"ParseStartToFirstMeaningfulPaint";
const char kHistogramServiceWorkerDomContentLoaded[] =
"PageLoad.Clients.ServiceWorker2.DocumentTiming."
"NavigationToDOMContentLoadedEventFired";
const char kHistogramServiceWorkerLoad[] =
"PageLoad.Clients.ServiceWorker2.DocumentTiming.NavigationToLoadEventFired";
const char kHistogramServiceWorkerLargestContentfulPaint[] =
"PageLoad.Clients.ServiceWorker2.PaintTiming."
"NavigationToLargestContentfulPaint2";
const char kHistogramServiceWorkerParseStartInbox[] =
"PageLoad.Clients.ServiceWorker2.ParseTiming.NavigationToParseStart.inbox";
......@@ -68,12 +65,6 @@ const char kHistogramServiceWorkerFirstContentfulPaintInbox[] =
const char kHistogramServiceWorkerParseStartToFirstContentfulPaintInbox[] =
"PageLoad.Clients.ServiceWorker2.PaintTiming."
"ParseStartToFirstContentfulPaint.inbox";
const char kHistogramServiceWorkerFirstMeaningfulPaintInbox[] =
"PageLoad.Clients.ServiceWorker2.Experimental.PaintTiming."
"NavigationToFirstMeaningfulPaint.inbox";
const char kHistogramServiceWorkerParseStartToFirstMeaningfulPaintInbox[] =
"PageLoad.Clients.ServiceWorker2.Experimental.PaintTiming."
"ParseStartToFirstMeaningfulPaint.inbox";
const char kHistogramServiceWorkerDomContentLoadedInbox[] =
"PageLoad.Clients.ServiceWorker2.DocumentTiming."
"NavigationToDOMContentLoadedEventFired.inbox";
......@@ -89,12 +80,6 @@ const char kHistogramServiceWorkerFirstContentfulPaintSearch[] =
const char kHistogramServiceWorkerParseStartToFirstContentfulPaintSearch[] =
"PageLoad.Clients.ServiceWorker2.PaintTiming."
"ParseStartToFirstContentfulPaint.search";
const char kHistogramServiceWorkerFirstMeaningfulPaintSearch[] =
"PageLoad.Clients.ServiceWorker2.Experimental.PaintTiming."
"NavigationToFirstMeaningfulPaint.search";
const char kHistogramServiceWorkerParseStartToFirstMeaningfulPaintSearch[] =
"PageLoad.Clients.ServiceWorker2.Experimental.PaintTiming."
"ParseStartToFirstMeaningfulPaint.search";
const char kHistogramServiceWorkerDomContentLoadedSearch[] =
"PageLoad.Clients.ServiceWorker2.DocumentTiming."
"NavigationToDOMContentLoadedEventFired.search";
......@@ -108,12 +93,6 @@ const char kHistogramNoServiceWorkerFirstContentfulPaintSearch[] =
const char kHistogramNoServiceWorkerParseStartToFirstContentfulPaintSearch[] =
"PageLoad.Clients.NoServiceWorker2.PaintTiming."
"ParseStartToFirstContentfulPaint.search";
const char kHistogramNoServiceWorkerFirstMeaningfulPaintSearch[] =
"PageLoad.Clients.NoServiceWorker2.Experimental.PaintTiming."
"NavigationToFirstMeaningfulPaint.search";
const char kHistogramNoServiceWorkerParseStartToFirstMeaningfulPaintSearch[] =
"PageLoad.Clients.NoServiceWorker2.Experimental.PaintTiming."
"ParseStartToFirstMeaningfulPaint.search";
const char kHistogramNoServiceWorkerDomContentLoadedSearch[] =
"PageLoad.Clients.NoServiceWorker2.DocumentTiming."
"NavigationToDOMContentLoadedEventFired.search";
......@@ -247,53 +226,6 @@ void ServiceWorkerPageLoadMetricsObserver::OnFirstContentfulPaintInPage(
}
}
void ServiceWorkerPageLoadMetricsObserver::
OnFirstMeaningfulPaintInMainFrameDocument(
const page_load_metrics::mojom::PageLoadTiming& timing) {
if (!page_load_metrics::WasStartedInForegroundOptionalEventInForeground(
timing.paint_timing->first_meaningful_paint, GetDelegate())) {
return;
}
if (!IsServiceWorkerControlled()) {
if (!page_load_metrics::IsGoogleSearchResultUrl(GetDelegate().GetUrl()))
return;
PAGE_LOAD_HISTOGRAM(
internal::kHistogramNoServiceWorkerFirstMeaningfulPaintSearch,
timing.paint_timing->first_meaningful_paint.value());
PAGE_LOAD_HISTOGRAM(
internal::
kHistogramNoServiceWorkerParseStartToFirstMeaningfulPaintSearch,
timing.paint_timing->first_meaningful_paint.value() -
timing.parse_timing->parse_start.value());
return;
}
PAGE_LOAD_HISTOGRAM(internal::kHistogramServiceWorkerFirstMeaningfulPaint,
timing.paint_timing->first_meaningful_paint.value());
PAGE_LOAD_HISTOGRAM(
internal::kHistogramServiceWorkerParseStartToFirstMeaningfulPaint,
timing.paint_timing->first_meaningful_paint.value() -
timing.parse_timing->parse_start.value());
if (IsInboxSite(GetDelegate().GetUrl())) {
PAGE_LOAD_HISTOGRAM(
internal::kHistogramServiceWorkerFirstMeaningfulPaintInbox,
timing.paint_timing->first_meaningful_paint.value());
PAGE_LOAD_HISTOGRAM(
internal::kHistogramServiceWorkerParseStartToFirstMeaningfulPaintInbox,
timing.paint_timing->first_meaningful_paint.value() -
timing.parse_timing->parse_start.value());
} else if (page_load_metrics::IsGoogleSearchResultUrl(
GetDelegate().GetUrl())) {
PAGE_LOAD_HISTOGRAM(
internal::kHistogramServiceWorkerFirstMeaningfulPaintSearch,
timing.paint_timing->first_meaningful_paint.value());
PAGE_LOAD_HISTOGRAM(
internal::kHistogramServiceWorkerParseStartToFirstMeaningfulPaintSearch,
timing.paint_timing->first_meaningful_paint.value() -
timing.parse_timing->parse_start.value());
}
}
void ServiceWorkerPageLoadMetricsObserver::OnDomContentLoadedEventStart(
const page_load_metrics::mojom::PageLoadTiming& timing) {
if (!page_load_metrics::WasStartedInForegroundOptionalEventInForeground(
......@@ -420,6 +352,37 @@ void ServiceWorkerPageLoadMetricsObserver::OnLoadingBehaviorObserved(
logged_ukm_event_ = true;
}
void ServiceWorkerPageLoadMetricsObserver::OnComplete(
const page_load_metrics::mojom::PageLoadTiming& timing) {
RecordTimingHistograms();
}
page_load_metrics::PageLoadMetricsObserver::ObservePolicy
ServiceWorkerPageLoadMetricsObserver::FlushMetricsOnAppEnterBackground(
const page_load_metrics::mojom::PageLoadTiming& timing) {
// This follows UmaPageLoadMetricsObserver.
if (GetDelegate().DidCommit())
RecordTimingHistograms();
return STOP_OBSERVING;
}
void ServiceWorkerPageLoadMetricsObserver::RecordTimingHistograms() {
if (!IsServiceWorkerControlled())
return;
const page_load_metrics::ContentfulPaintTimingInfo&
all_frames_largest_contentful_paint =
GetDelegate()
.GetLargestContentfulPaintHandler()
.MergeMainFrameAndSubframes();
if (all_frames_largest_contentful_paint.ContainsValidTime() &&
WasStartedInForegroundOptionalEventInForeground(
all_frames_largest_contentful_paint.Time(), GetDelegate())) {
PAGE_LOAD_HISTOGRAM(internal::kHistogramServiceWorkerLargestContentfulPaint,
all_frames_largest_contentful_paint.Time().value());
}
}
bool ServiceWorkerPageLoadMetricsObserver::IsServiceWorkerControlled() {
return (GetDelegate().GetMainFrameMetadata().behavior_flags &
blink::LoadingBehaviorFlag::
......
......@@ -23,17 +23,13 @@ extern const char kHistogramServiceWorkerFirstContentfulPaintForwardBack[];
extern const char
kHistogramServiceWorkerFirstContentfulPaintForwardBackNoStore[];
extern const char kHistogramServiceWorkerParseStartToFirstContentfulPaint[];
extern const char kHistogramServiceWorkerFirstMeaningfulPaint[];
extern const char kHistogramServiceWorkerParseStartToFirstMeaningfulPaint[];
extern const char kHistogramServiceWorkerDomContentLoaded[];
extern const char kHistogramServiceWorkerLoad[];
extern const char kHistogramServiceWorkerLargestContentfulPaint[];
extern const char kHistogramServiceWorkerParseStartInbox[];
extern const char kHistogramServiceWorkerFirstContentfulPaintInbox[];
extern const char kHistogramServiceWorkerFirstInputDelay[];
extern const char kHistogramServiceWorkerFirstMeaningfulPaintInbox[];
extern const char
kHistogramServiceWorkerParseStartToFirstMeaningfulPaintInbox[];
extern const char
kHistogramServiceWorkerParseStartToFirstContentfulPaintInbox[];
extern const char kHistogramServiceWorkerDomContentLoadedInbox[];
......@@ -41,18 +37,12 @@ extern const char kHistogramServiceWorkerLoadInbox[];
extern const char kHistogramServiceWorkerParseStartSearch[];
extern const char kHistogramServiceWorkerFirstContentfulPaintSearch[];
extern const char kHistogramServiceWorkerFirstMeaningfulPaintSearch[];
extern const char
kHistogramServiceWorkerParseStartToFirstMeaningfulPaintSearch[];
extern const char
kHistogramServiceWorkerParseStartToFirstContentfulPaintSearch[];
extern const char kHistogramServiceWorkerDomContentLoadedSearch[];
extern const char kHistogramServiceWorkerLoadSearch[];
extern const char kHistogramNoServiceWorkerFirstContentfulPaintSearch[];
extern const char kHistogramNoServiceWorkerFirstMeaningfulPaintSearch[];
extern const char
kHistogramNoServiceWorkerParseStartToFirstMeaningfulPaintSearch[];
extern const char
kHistogramNoServiceWorkerParseStartToFirstContentfulPaintSearch[];
extern const char kHistogramNoServiceWorkerDomContentLoadedSearch[];
......@@ -78,16 +68,20 @@ class ServiceWorkerPageLoadMetricsObserver
const page_load_metrics::mojom::PageLoadTiming& timing) override;
void OnFirstContentfulPaintInPage(
const page_load_metrics::mojom::PageLoadTiming& timing) override;
void OnFirstMeaningfulPaintInMainFrameDocument(
const page_load_metrics::mojom::PageLoadTiming& timing) override;
void OnDomContentLoadedEventStart(
const page_load_metrics::mojom::PageLoadTiming& timing) override;
void OnLoadEventStart(
const page_load_metrics::mojom::PageLoadTiming& timing) override;
void OnLoadingBehaviorObserved(content::RenderFrameHost* rfh,
int behavior_flags) override;
void OnComplete(
const page_load_metrics::mojom::PageLoadTiming& timing) override;
page_load_metrics::PageLoadMetricsObserver::ObservePolicy
FlushMetricsOnAppEnterBackground(
const page_load_metrics::mojom::PageLoadTiming& timing) override;
private:
void RecordTimingHistograms();
bool IsServiceWorkerControlled();
ui::PageTransition transition_ = ui::PAGE_TRANSITION_LINK;
......
......@@ -12780,9 +12780,17 @@ reviews. Googlers can read more about this at go/gwsq-gerrit.
<affected-histogram
name="PageLoad.Clients.NoServiceWorker.DocumentTiming.NavigationToLoadEventFired"/>
<affected-histogram
name="PageLoad.Clients.NoServiceWorker.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
name="PageLoad.Clients.NoServiceWorker.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint">
<obsolete>
Removed in December 2020.
</obsolete>
</affected-histogram>
<affected-histogram
name="PageLoad.Clients.NoServiceWorker.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
name="PageLoad.Clients.NoServiceWorker.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint">
<obsolete>
Removed in December 2020.
</obsolete>
</affected-histogram>
<affected-histogram
name="PageLoad.Clients.NoServiceWorker.PaintTiming.NavigationToFirstContentfulPaint"/>
<affected-histogram
......@@ -12956,15 +12964,25 @@ reviews. Googlers can read more about this at go/gwsq-gerrit.
<affected-histogram
name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
<affected-histogram
name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint">
<obsolete>
Removed Dec 2020.
</obsolete>
</affected-histogram>
<affected-histogram
name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint">
<obsolete>
Removed Dec 2020.
</obsolete>
</affected-histogram>
<affected-histogram name="PageLoad.InteractiveTiming.FirstInputDelay"/>
<affected-histogram name="PageLoad.InteractiveTiming.FirstInputDelay2"/>
<affected-histogram name="PageLoad.InteractiveTiming.FirstInputDelay3"/>
<affected-histogram
name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
<affected-histogram name="PageLoad.PaintTiming.NavigationToFirstPaint"/>
<affected-histogram
name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint2"/>
<affected-histogram
name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
<affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
......@@ -12986,9 +13004,17 @@ reviews. Googlers can read more about this at go/gwsq-gerrit.
<affected-histogram
name="PageLoad.Clients.ServiceWorker.DocumentTiming.NavigationToLoadEventFired"/>
<affected-histogram
name="PageLoad.Clients.ServiceWorker.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
name="PageLoad.Clients.ServiceWorker.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint">
<obsolete>
Removed in December 2020.
</obsolete>
</affected-histogram>
<affected-histogram
name="PageLoad.Clients.ServiceWorker.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
name="PageLoad.Clients.ServiceWorker.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint">
<obsolete>
Removed in December 2020.
</obsolete>
</affected-histogram>
<affected-histogram
name="PageLoad.Clients.ServiceWorker.PaintTiming.NavigationToFirstContentfulPaint"/>
<affected-histogram
......@@ -13000,9 +13026,17 @@ reviews. Googlers can read more about this at go/gwsq-gerrit.
<affected-histogram
name="PageLoad.Clients.ServiceWorker2.DocumentTiming.NavigationToLoadEventFired"/>
<affected-histogram
name="PageLoad.Clients.ServiceWorker2.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
name="PageLoad.Clients.ServiceWorker2.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint">
<obsolete>
Removed in December 2020.
</obsolete>
</affected-histogram>
<affected-histogram
name="PageLoad.Clients.ServiceWorker2.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
name="PageLoad.Clients.ServiceWorker2.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint">
<obsolete>
Removed in December 2020.
</obsolete>
</affected-histogram>
<affected-histogram
name="PageLoad.Clients.ServiceWorker2.PaintTiming.NavigationToFirstContentfulPaint"/>
<affected-histogram
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment