Commit 6e02181b authored by Bryan McQuade's avatar Bryan McQuade Committed by Commit Bot

Record LCP in FromGWS page load metrics observer.

Change-Id: I7d0ebe844fe5396665e17e0202698a5ff25afbc8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1857299
Commit-Queue: Bryan McQuade <bmcquade@chromium.org>
Reviewed-by: default avatarCharlie Harrison <csharrison@chromium.org>
Reviewed-by: default avatarTimothy Dresser <tdresser@chromium.org>
Cr-Commit-Position: refs/heads/master@{#707038}
parent 9b92d09c
......@@ -30,6 +30,9 @@ const char kHistogramFromGWSFirstImagePaint[] =
const char kHistogramFromGWSFirstContentfulPaint[] =
"PageLoad.Clients.FromGoogleSearch.PaintTiming."
"NavigationToFirstContentfulPaint";
const char kHistogramFromGWSLargestContentfulPaint[] =
"PageLoad.Clients.FromGoogleSearch.PaintTiming."
"NavigationToLargestContentfulPaint";
const char kHistogramFromGWSParseStartToFirstContentfulPaint[] =
"PageLoad.Clients.FromGoogleSearch.PaintTiming."
"ParseStartToFirstContentfulPaint";
......@@ -321,7 +324,8 @@ bool WasAbortedBeforeInteraction(
} // namespace
FromGWSPageLoadMetricsLogger::FromGWSPageLoadMetricsLogger() {}
FromGWSPageLoadMetricsLogger::FromGWSPageLoadMetricsLogger() = default;
FromGWSPageLoadMetricsLogger::~FromGWSPageLoadMetricsLogger() = default;
void FromGWSPageLoadMetricsLogger::SetPreviouslyCommittedUrl(const GURL& url) {
previously_committed_url_is_search_results_ =
......@@ -431,6 +435,17 @@ void FromGWSPageLoadMetricsObserver::OnUserInput(
logger_.OnUserInput(event, timing, GetDelegate());
}
void FromGWSPageLoadMetricsObserver::OnTimingUpdate(
content::RenderFrameHost* subframe_rfh,
const page_load_metrics::mojom::PageLoadTiming& timing) {
logger_.OnTimingUpdate(subframe_rfh, timing);
}
void FromGWSPageLoadMetricsObserver::OnDidFinishSubFrameNavigation(
content::NavigationHandle* navigation_handle) {
logger_.OnDidFinishSubFrameNavigation(navigation_handle, GetDelegate());
}
void FromGWSPageLoadMetricsLogger::OnCommit(
content::NavigationHandle* navigation_handle,
ukm::SourceId source_id) {
......@@ -446,6 +461,8 @@ void FromGWSPageLoadMetricsLogger::OnComplete(
if (!ShouldLogPostCommitMetrics(delegate.GetUrl()))
return;
LogMetricsOnComplete(delegate);
page_load_metrics::PageAbortInfo abort_info = GetPageAbortInfo(delegate);
if (!WasAbortedInForeground(delegate, abort_info))
return;
......@@ -644,5 +661,36 @@ void FromGWSPageLoadMetricsLogger::OnUserInput(
void FromGWSPageLoadMetricsLogger::FlushMetricsOnAppEnterBackground(
const page_load_metrics::mojom::PageLoadTiming& timing,
const page_load_metrics::PageLoadMetricsObserverDelegate& delegate) {
LogMetricsOnComplete(delegate);
LogForegroundDurations(timing, delegate, base::TimeTicks::Now());
}
void FromGWSPageLoadMetricsLogger::OnTimingUpdate(
content::RenderFrameHost* subframe_rfh,
const page_load_metrics::mojom::PageLoadTiming& timing) {
largest_contentful_paint_handler_.RecordTiming(timing.paint_timing,
subframe_rfh);
}
void FromGWSPageLoadMetricsLogger::OnDidFinishSubFrameNavigation(
content::NavigationHandle* navigation_handle,
const page_load_metrics::PageLoadMetricsObserverDelegate& delegate) {
largest_contentful_paint_handler_.OnDidFinishSubFrameNavigation(
navigation_handle, delegate);
}
void FromGWSPageLoadMetricsLogger::LogMetricsOnComplete(
const page_load_metrics::PageLoadMetricsObserverDelegate& delegate) {
if (!delegate.DidCommit() || !ShouldLogPostCommitMetrics(delegate.GetUrl()))
return;
const page_load_metrics::ContentfulPaintTimingInfo&
all_frames_largest_contentful_paint =
largest_contentful_paint_handler_.MergeMainFrameAndSubframes();
if (!all_frames_largest_contentful_paint.IsEmpty() &&
WasStartedInForegroundOptionalEventInForeground(
all_frames_largest_contentful_paint.Time(), delegate)) {
PAGE_LOAD_HISTOGRAM(internal::kHistogramFromGWSLargestContentfulPaint,
all_frames_largest_contentful_paint.Time().value());
}
}
......@@ -7,6 +7,7 @@
#include "base/macros.h"
#include "base/optional.h"
#include "components/page_load_metrics/browser/observers/largest_contentful_paint_handler.h"
#include "components/page_load_metrics/browser/page_load_metrics_observer.h"
#include "services/metrics/public/cpp/ukm_source.h"
#include "url/gurl.h"
......@@ -18,6 +19,7 @@ extern const char kHistogramFromGWSLoad[];
extern const char kHistogramFromGWSFirstPaint[];
extern const char kHistogramFromGWSFirstImagePaint[];
extern const char kHistogramFromGWSFirstContentfulPaint[];
extern const char kHistogramFromGWSLargestContentfulPaint[];
extern const char kHistogramFromGWSParseStartToFirstContentfulPaint[];
extern const char kHistogramFromGWSParseDuration[];
extern const char kHistogramFromGWSParseStart[];
......@@ -48,6 +50,7 @@ extern const char kHistogramFromGWSForegroundDurationNoCommit[];
class FromGWSPageLoadMetricsLogger {
public:
FromGWSPageLoadMetricsLogger();
~FromGWSPageLoadMetricsLogger();
void SetPreviouslyCommittedUrl(const GURL& url);
void SetProvisionalUrl(const GURL& url);
......@@ -106,6 +109,13 @@ class FromGWSPageLoadMetricsLogger {
const page_load_metrics::mojom::PageLoadTiming& timing,
const page_load_metrics::PageLoadMetricsObserverDelegate& delegate);
void OnTimingUpdate(content::RenderFrameHost* subframe_rfh,
const page_load_metrics::mojom::PageLoadTiming& timing);
void OnDidFinishSubFrameNavigation(
content::NavigationHandle* navigation_handle,
const page_load_metrics::PageLoadMetricsObserverDelegate& delegate);
// The methods below are public only for testing.
bool ShouldLogFailedProvisionalLoadMetrics();
bool ShouldLogPostCommitMetrics(const GURL& url);
......@@ -114,6 +124,9 @@ class FromGWSPageLoadMetricsLogger {
const page_load_metrics::PageLoadMetricsObserverDelegate& delegate);
private:
void LogMetricsOnComplete(
const page_load_metrics::PageLoadMetricsObserverDelegate& delegate);
bool previously_committed_url_is_search_results_ = false;
bool previously_committed_url_is_search_redirector_ = false;
bool navigation_initiated_via_link_ = false;
......@@ -127,6 +140,9 @@ class FromGWSPageLoadMetricsLogger {
// The time of first user interaction after paint from navigation start.
base::Optional<base::TimeDelta> first_user_interaction_after_paint_;
page_load_metrics::LargestContentfulPaintHandler
largest_contentful_paint_handler_;
DISALLOW_COPY_AND_ASSIGN(FromGWSPageLoadMetricsLogger);
};
......@@ -172,6 +188,13 @@ class FromGWSPageLoadMetricsObserver
const blink::WebInputEvent& event,
const page_load_metrics::mojom::PageLoadTiming& timing) override;
void OnTimingUpdate(
content::RenderFrameHost* subframe_rfh,
const page_load_metrics::mojom::PageLoadTiming& timing) override;
void OnDidFinishSubFrameNavigation(
content::NavigationHandle* navigation_handle) override;
private:
FromGWSPageLoadMetricsLogger logger_;
......
......@@ -149,6 +149,8 @@ TEST_F(FromGWSPageLoadMetricsObserverTest, SearchPreviousCommittedUrl1) {
timing.paint_timing->first_paint = base::TimeDelta::FromMilliseconds(20);
timing.paint_timing->first_contentful_paint =
base::TimeDelta::FromMilliseconds(40);
timing.paint_timing->largest_text_paint =
base::TimeDelta::FromMilliseconds(50);
timing.paint_timing->first_image_paint =
base::TimeDelta::FromMilliseconds(160);
timing.parse_timing->parse_stop = base::TimeDelta::FromMilliseconds(320);
......@@ -187,6 +189,12 @@ TEST_F(FromGWSPageLoadMetricsObserverTest, SearchPreviousCommittedUrl1) {
internal::kHistogramFromGWSFirstContentfulPaint,
timing.paint_timing->first_contentful_paint.value().InMilliseconds(), 1);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramFromGWSLargestContentfulPaint, 1);
tester()->histogram_tester().ExpectBucketCount(
internal::kHistogramFromGWSLargestContentfulPaint,
timing.paint_timing->largest_text_paint.value().InMilliseconds(), 1);
tester()->histogram_tester().ExpectTotalCount(
internal::kHistogramFromGWSParseStartToFirstContentfulPaint, 1);
tester()->histogram_tester().ExpectBucketCount(
......
......@@ -174329,6 +174329,8 @@ regressions. -->
<affected-histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint"/>
<affected-histogram name="PageLoad.PaintTiming.NavigationToFirstPaint"/>
<affected-histogram name="PageLoad.PaintTiming.NavigationToFirstTextPaint"/>
<affected-histogram
name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint"/>
<affected-histogram
name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
<affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
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