Commit 8b232f22 authored by Sophie Chang's avatar Sophie Chang Committed by Commit Bot

Add From GWS FID and CLS histograms

Bug: 1085065
Change-Id: I7d702ecc4d44bcea29172de8b6b6eb359915feb1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2209604Reviewed-by: default avatarRyan Sturm <ryansturm@chromium.org>
Reviewed-by: default avatarTarun Bansal <tbansal@chromium.org>
Commit-Queue: Sophie Chang <sophiechang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#770761}
parent 498c6ca7
......@@ -41,7 +41,7 @@ const char kHistogramFromGWSParseDuration[] =
const char kHistogramFromGWSParseStart[] =
"PageLoad.Clients.FromGoogleSearch.ParseTiming.NavigationToParseStart";
const char kHistogramFromGWSFirstInputDelay[] =
"PageLoad.Clients.FromGoogleSearch.InteractiveTiming.FirstInputDelay3";
"PageLoad.Clients.FromGoogleSearch.InteractiveTiming.FirstInputDelay4";
const char kHistogramFromGWSAbortNewNavigationBeforeCommit[] =
"PageLoad.Clients.FromGoogleSearch.Experimental.AbortTiming.NewNavigation."
......@@ -115,6 +115,10 @@ const char kHistogramFromGWSForegroundDurationWithoutPaint[] =
const char kHistogramFromGWSForegroundDurationNoCommit[] =
"PageLoad.Clients.FromGoogleSearch.PageTiming.ForegroundDuration.NoCommit";
const char kHistogramFromGWSCumulativeLayoutShiftMainFrame[] =
"PageLoad.Clients.FromGoogleSearch.LayoutInstability.CumulativeShiftScore."
"MainFrame";
} // namespace internal
namespace {
......@@ -322,6 +326,11 @@ bool WasAbortedBeforeInteraction(
}
}
int32_t LayoutShiftUmaValue(float shift_score) {
// Report (shift_score * 10) as an int in the range [0, 100].
return static_cast<int>(roundf(std::min(shift_score, 10.0f) * 10.0f));
}
} // namespace
FromGWSPageLoadMetricsLogger::FromGWSPageLoadMetricsLogger() = default;
......@@ -621,8 +630,11 @@ void FromGWSPageLoadMetricsLogger::OnFirstInputInPage(
const page_load_metrics::PageLoadMetricsObserverDelegate& delegate) {
if (ShouldLogForegroundEventAfterCommit(
timing.interactive_timing->first_input_delay, delegate)) {
PAGE_LOAD_HISTOGRAM(internal::kHistogramFromGWSFirstInputDelay,
timing.interactive_timing->first_input_delay.value());
UMA_HISTOGRAM_CUSTOM_TIMES(
internal::kHistogramFromGWSFirstInputDelay,
timing.interactive_timing->first_input_delay.value(),
base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromSeconds(60),
50);
}
}
......@@ -693,4 +705,9 @@ void FromGWSPageLoadMetricsLogger::LogMetricsOnComplete(
PAGE_LOAD_HISTOGRAM(internal::kHistogramFromGWSLargestContentfulPaint,
all_frames_largest_contentful_paint.Time().value());
}
UMA_HISTOGRAM_COUNTS_100(
internal::kHistogramFromGWSCumulativeLayoutShiftMainFrame,
LayoutShiftUmaValue(
delegate.GetMainFrameRenderData().layout_shift_score));
}
......@@ -37,6 +37,7 @@ extern const char kHistogramFromGWSAbortReloadBeforeInteraction[];
extern const char kHistogramFromGWSForegroundDuration[];
extern const char kHistogramFromGWSForegroundDurationAfterPaint[];
extern const char kHistogramFromGWSForegroundDurationNoCommit[];
extern const char kHistogramFromGWSCumulativeLayoutShiftMainFrame[];
} // namespace internal
......
......@@ -170,6 +170,12 @@ TEST_F(FromGWSPageLoadMetricsObserverTest, SearchPreviousCommittedUrl1) {
NavigateAndCommit(GURL(kExampleUrl));
tester()->SimulateTimingUpdate(timing);
page_load_metrics::mojom::FrameRenderDataUpdate render_data(1.0, 1.0, 0, 0, 0,
0);
tester()->SimulateRenderDataUpdate(render_data);
render_data.layout_shift_delta = 1.5;
render_data.layout_shift_delta_before_input_or_scroll = 0.0;
tester()->SimulateRenderDataUpdate(render_data);
// Navigate again to force logging.
tester()->NavigateToUntrackedUrl();
......@@ -242,6 +248,11 @@ TEST_F(FromGWSPageLoadMetricsObserverTest, SearchPreviousCommittedUrl1) {
internal::kHistogramFromGWSFirstInputDelay,
timing.interactive_timing->first_input_delay.value().InMilliseconds(), 1);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramFromGWSCumulativeLayoutShiftMainFrame, 1);
tester()->histogram_tester().ExpectBucketCount(
internal::kHistogramFromGWSCumulativeLayoutShiftMainFrame, 25, 1);
auto entries = tester()->test_ukm_recorder().GetEntriesByName(
ukm::builders::PageLoad_FromGoogleSearch::kEntryName);
EXPECT_EQ(1u, entries.size());
......@@ -573,9 +584,15 @@ TEST_F(FromGWSPageLoadMetricsObserverTest,
NavigateAndCommit(GURL("https://www.google.com/search#q=test"));
NavigateAndCommit(GURL(kExampleUrl));
page_load_metrics::mojom::FrameRenderDataUpdate render_data(1.0, 1.0, 0, 0, 0,
0);
tester()->SimulateRenderDataUpdate(render_data);
web_contents()->WasHidden();
tester()->SimulateTimingUpdate(timing);
render_data.layout_shift_delta = 1.5;
render_data.layout_shift_delta_before_input_or_scroll = 0.0;
tester()->SimulateRenderDataUpdate(render_data);
// If the system clock is low resolution PageLoadTracker's background_time_
// may be < timing.first_image_paint.
......@@ -591,6 +608,15 @@ TEST_F(FromGWSPageLoadMetricsObserverTest,
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramFromGWSFirstImagePaint, 0);
}
// Navigate again to force logging layout shift score.
tester()->NavigateToUntrackedUrl();
// Layout shift score should still be updated after tab was hidden.
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramFromGWSCumulativeLayoutShiftMainFrame, 1);
tester()->histogram_tester().ExpectBucketCount(
internal::kHistogramFromGWSCumulativeLayoutShiftMainFrame, 25, 1);
}
TEST_F(FromGWSPageLoadMetricsObserverTest, NewNavigationBeforeCommit) {
......
......@@ -200840,6 +200840,9 @@ regressions. -->
name="PageLoad.Experimental.AbortTiming.Stop.BeforeCommit"/>
<affected-histogram name="PageLoad.InteractiveTiming.FirstInputDelay2"/>
<affected-histogram name="PageLoad.InteractiveTiming.FirstInputDelay3"/>
<affected-histogram name="PageLoad.InteractiveTiming.FirstInputDelay4"/>
<affected-histogram
name="PageLoad.LayoutInstability.CumulativeShiftScore.MainFrame"/>
<affected-histogram name="PageLoad.PageTiming.ForegroundDuration"/>
<affected-histogram
name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
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