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;
......
......@@ -11,6 +11,7 @@
#include "components/page_load_metrics/common/test/page_load_metrics_test_util.h"
#include "content/public/browser/web_contents.h"
#include "services/metrics/public/cpp/ukm_builders.h"
#include "testing/gmock/include/gmock/gmock-matchers.h"
namespace {
......@@ -51,10 +52,6 @@ class ServiceWorkerPageLoadMetricsObserverTest
0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerParseStartToFirstContentfulPaint, 0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerFirstMeaningfulPaint, 0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerParseStartToFirstMeaningfulPaint, 0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerDomContentLoaded, 0);
tester()->histogram_tester().ExpectTotalCount(
......@@ -63,6 +60,11 @@ class ServiceWorkerPageLoadMetricsObserverTest
internal::kHistogramServiceWorkerParseStart, 0);
tester()->histogram_tester().ExpectTotalCount(
internal::kBackgroundHistogramServiceWorkerParseStart, 0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerLargestContentfulPaint, 0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerLargestContentfulPaint, 0);
}
void AssertNoInboxHistogramsLogged() {
......@@ -73,11 +75,6 @@ class ServiceWorkerPageLoadMetricsObserverTest
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerParseStartToFirstContentfulPaintInbox,
0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerFirstMeaningfulPaintInbox, 0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerParseStartToFirstMeaningfulPaintInbox,
0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerDomContentLoadedInbox, 0);
tester()->histogram_tester().ExpectTotalCount(
......@@ -92,11 +89,6 @@ class ServiceWorkerPageLoadMetricsObserverTest
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerParseStartToFirstContentfulPaintSearch,
0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerFirstMeaningfulPaintSearch, 0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerParseStartToFirstMeaningfulPaintSearch,
0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerDomContentLoadedSearch, 0);
tester()->histogram_tester().ExpectTotalCount(
......@@ -110,12 +102,6 @@ class ServiceWorkerPageLoadMetricsObserverTest
internal::
kHistogramNoServiceWorkerParseStartToFirstContentfulPaintSearch,
0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramNoServiceWorkerFirstMeaningfulPaintSearch, 0);
tester()->histogram_tester().ExpectTotalCount(
internal::
kHistogramNoServiceWorkerParseStartToFirstMeaningfulPaintSearch,
0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramNoServiceWorkerDomContentLoadedSearch, 0);
tester()->histogram_tester().ExpectTotalCount(
......@@ -134,12 +120,16 @@ class ServiceWorkerPageLoadMetricsObserverTest
timing->paint_timing->first_paint = base::TimeDelta::FromMilliseconds(200);
timing->paint_timing->first_contentful_paint =
base::TimeDelta::FromMilliseconds(300);
timing->paint_timing->first_meaningful_paint =
base::TimeDelta::FromMilliseconds(700);
timing->document_timing->dom_content_loaded_event_start =
base::TimeDelta::FromMilliseconds(600);
timing->document_timing->load_event_start =
base::TimeDelta::FromMilliseconds(1000);
timing->paint_timing->largest_contentful_paint->largest_image_paint =
base::TimeDelta::FromMilliseconds(4780);
timing->paint_timing->largest_contentful_paint->largest_image_paint_size =
100u;
PopulateRequiredTimingFields(timing);
}
};
......@@ -178,11 +168,14 @@ TEST_F(ServiceWorkerPageLoadMetricsObserverTest, WithServiceWorker) {
InitializeTestPageLoadTiming(&timing);
NavigateAndCommit(GURL(kDefaultTestUrl));
page_load_metrics::mojom::FrameMetadata metadata;
metadata.behavior_flags |=
blink::LoadingBehaviorFlag::kLoadingBehaviorServiceWorkerControlled;
tester()->SimulateTimingAndMetadataUpdate(timing, metadata);
tester()->NavigateToUntrackedUrl();
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerFirstInputDelay, 1);
tester()->histogram_tester().ExpectBucketCount(
......@@ -237,6 +230,10 @@ TEST_F(ServiceWorkerPageLoadMetricsObserverTest, WithServiceWorker) {
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerParseStartForwardBackNoStore, 0);
EXPECT_THAT(tester()->histogram_tester().GetAllSamples(
internal::kHistogramServiceWorkerLargestContentfulPaint),
testing::ElementsAre(base::Bucket(4780, 1)));
const auto& entries = tester()->test_ukm_recorder().GetEntriesByName(
ukm::builders::PageLoad_ServiceWorkerControlled::kEntryName);
EXPECT_EQ(1u, entries.size());
......@@ -262,7 +259,7 @@ TEST_F(ServiceWorkerPageLoadMetricsObserverTest, WithServiceWorkerBackground) {
NavigateAndCommit(GURL(kDefaultTestUrl));
tester()->SimulateTimingAndMetadataUpdate(timing, metadata);
// Background the tab, then forground it.
// Background the tab, then foreground it.
web_contents()->WasHidden();
web_contents()->WasShown();
......@@ -280,14 +277,12 @@ TEST_F(ServiceWorkerPageLoadMetricsObserverTest, WithServiceWorkerBackground) {
timing.paint_timing->first_contentful_paint.value().InMilliseconds(), 1);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerParseStartToFirstContentfulPaint, 0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerFirstMeaningfulPaint, 0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerParseStartToFirstMeaningfulPaint, 0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerDomContentLoaded, 0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerLoad, 0);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerLargestContentfulPaint, 0);
// TODO(crbug.com/686590): The following expectation fails on Win7 Tests
// (dbg)(1) builder, so is disabled for the time being.
// tester()->histogram_tester().ExpectTotalCount(
......@@ -365,35 +360,6 @@ TEST_F(ServiceWorkerPageLoadMetricsObserverTest, InboxSite) {
.InMilliseconds(),
1);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerFirstMeaningfulPaint, 1);
tester()->histogram_tester().ExpectBucketCount(
internal::kHistogramServiceWorkerFirstMeaningfulPaint,
timing.paint_timing->first_meaningful_paint.value().InMilliseconds(), 1);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerFirstMeaningfulPaintInbox, 1);
tester()->histogram_tester().ExpectBucketCount(
internal::kHistogramServiceWorkerFirstMeaningfulPaintInbox,
timing.paint_timing->first_meaningful_paint.value().InMilliseconds(), 1);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerParseStartToFirstMeaningfulPaint, 1);
tester()->histogram_tester().ExpectBucketCount(
internal::kHistogramServiceWorkerParseStartToFirstMeaningfulPaint,
(timing.paint_timing->first_meaningful_paint.value() -
timing.parse_timing->parse_start.value())
.InMilliseconds(),
1);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerParseStartToFirstMeaningfulPaintInbox,
1);
tester()->histogram_tester().ExpectBucketCount(
internal::kHistogramServiceWorkerParseStartToFirstMeaningfulPaintInbox,
(timing.paint_timing->first_meaningful_paint.value() -
timing.parse_timing->parse_start.value())
.InMilliseconds(),
1);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerDomContentLoaded, 1);
tester()->histogram_tester().ExpectBucketCount(
......@@ -488,35 +454,6 @@ TEST_F(ServiceWorkerPageLoadMetricsObserverTest, SearchSite) {
.InMilliseconds(),
1);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerFirstMeaningfulPaint, 1);
tester()->histogram_tester().ExpectBucketCount(
internal::kHistogramServiceWorkerFirstMeaningfulPaint,
timing.paint_timing->first_meaningful_paint.value().InMilliseconds(), 1);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerFirstMeaningfulPaintSearch, 1);
tester()->histogram_tester().ExpectBucketCount(
internal::kHistogramServiceWorkerFirstMeaningfulPaintSearch,
timing.paint_timing->first_meaningful_paint.value().InMilliseconds(), 1);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerParseStartToFirstMeaningfulPaint, 1);
tester()->histogram_tester().ExpectBucketCount(
internal::kHistogramServiceWorkerParseStartToFirstMeaningfulPaint,
(timing.paint_timing->first_meaningful_paint.value() -
timing.parse_timing->parse_start.value())
.InMilliseconds(),
1);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerParseStartToFirstMeaningfulPaintSearch,
1);
tester()->histogram_tester().ExpectBucketCount(
internal::kHistogramServiceWorkerParseStartToFirstMeaningfulPaintSearch,
(timing.paint_timing->first_meaningful_paint.value() -
timing.parse_timing->parse_start.value())
.InMilliseconds(),
1);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerDomContentLoaded, 1);
tester()->histogram_tester().ExpectBucketCount(
......@@ -576,22 +513,6 @@ TEST_F(ServiceWorkerPageLoadMetricsObserverTest, SearchNoSWSite) {
.InMilliseconds(),
1);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramNoServiceWorkerFirstMeaningfulPaintSearch, 1);
tester()->histogram_tester().ExpectBucketCount(
internal::kHistogramNoServiceWorkerFirstMeaningfulPaintSearch,
timing.paint_timing->first_meaningful_paint.value().InMilliseconds(), 1);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramNoServiceWorkerParseStartToFirstMeaningfulPaintSearch,
1);
tester()->histogram_tester().ExpectBucketCount(
internal::kHistogramNoServiceWorkerParseStartToFirstMeaningfulPaintSearch,
(timing.paint_timing->first_meaningful_paint.value() -
timing.parse_timing->parse_start.value())
.InMilliseconds(),
1);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramNoServiceWorkerDomContentLoadedSearch, 1);
tester()->histogram_tester().ExpectBucketCount(
......@@ -628,6 +549,7 @@ TEST_F(ServiceWorkerPageLoadMetricsObserverTest,
metadata.behavior_flags |=
blink::LoadingBehaviorFlag::kLoadingBehaviorServiceWorkerControlled;
tester()->SimulateTimingAndMetadataUpdate(timing, metadata);
tester()->NavigateToUntrackedUrl();
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerFirstPaint, 1);
......@@ -656,4 +578,46 @@ TEST_F(ServiceWorkerPageLoadMetricsObserverTest,
tester()->histogram_tester().ExpectBucketCount(
internal::kHistogramServiceWorkerParseStartForwardBack,
timing.parse_timing->parse_start.value().InMilliseconds(), 1);
EXPECT_THAT(tester()->histogram_tester().GetAllSamples(
internal::kHistogramServiceWorkerLargestContentfulPaint),
testing::ElementsAre(base::Bucket(4780, 1)));
}
TEST_F(ServiceWorkerPageLoadMetricsObserverTest,
FlushMetricsOnAppEnterBackground) {
page_load_metrics::mojom::PageLoadTiming timing;
InitializeTestPageLoadTiming(&timing);
NavigateAndCommit(GURL(kDefaultTestUrl));
page_load_metrics::mojom::FrameMetadata metadata;
metadata.behavior_flags |=
blink::LoadingBehaviorFlag::kLoadingBehaviorServiceWorkerControlled;
tester()->SimulateTimingAndMetadataUpdate(timing, metadata);
// Most timings have been recorded. Just test FCP for simplicity. LCP has not
// yet been recorded.
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerFirstContentfulPaint, 1);
tester()->histogram_tester().ExpectBucketCount(
internal::kHistogramServiceWorkerFirstContentfulPaint,
timing.paint_timing->first_contentful_paint.value().InMilliseconds(), 1);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramServiceWorkerLargestContentfulPaint, 0);
// This flushes LCP.
tester()->SimulateAppEnterBackground();
EXPECT_THAT(tester()->histogram_tester().GetAllSamples(
internal::kHistogramServiceWorkerLargestContentfulPaint),
testing::ElementsAre(base::Bucket(4780, 1)));
// Navigate again, forcing completion callbacks to be called.
tester()->NavigateToUntrackedUrl();
// LCP will not be recorded again, since FlushMetricsOnAppEnterBackground()
// returned STOP_OBSERVING.
EXPECT_THAT(tester()->histogram_tester().GetAllSamples(
internal::kHistogramServiceWorkerLargestContentfulPaint),
testing::ElementsAre(base::Bucket(4780, 1)));
}
......@@ -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