diff options
author | ksakamoto <ksakamoto@chromium.org> | 2015-10-06 21:27:31 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-10-07 04:28:13 +0000 |
commit | dcc645d4800a86840a2a84ec1cf37019d7736d81 (patch) | |
tree | 7c6d432c5e789c061c30c1b0dafc2395612f8cb2 /components/page_load_metrics | |
parent | 9c26dc00c7fcd248973c4250c543be3071ff9637 (diff) | |
download | chromium_src-dcc645d4800a86840a2a84ec1cf37019d7736d81.zip chromium_src-dcc645d4800a86840a2a84ec1cf37019d7736d81.tar.gz chromium_src-dcc645d4800a86840a2a84ec1cf37019d7736d81.tar.bz2 |
Add "time to first text paint" to PageLoadMetrics system
This adds PageLoad.Timing2.NavigationToFirstTextPaint(.BG) UMA histogram which
measures the time between navigation start to first non-blank text paint.
BUG=520410
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
Review URL: https://codereview.chromium.org/1376643002
Cr-Commit-Position: refs/heads/master@{#352770}
Diffstat (limited to 'components/page_load_metrics')
6 files changed, 40 insertions, 3 deletions
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer.cc b/components/page_load_metrics/browser/metrics_web_contents_observer.cc index df37a05..2961f1e 100644 --- a/components/page_load_metrics/browser/metrics_web_contents_observer.cc +++ b/components/page_load_metrics/browser/metrics_web_contents_observer.cc @@ -146,7 +146,15 @@ void PageLoadTracker::RecordTimingHistograms() { RecordEvent(PAGE_LOAD_SUCCESSFUL_FIRST_LAYOUT_BACKGROUND); } } - + if (!timing_.first_text_paint.is_zero()) { + if (timing_.first_text_paint < background_delta) { + PAGE_LOAD_HISTOGRAM("PageLoad.Timing2.NavigationToFirstTextPaint", + timing_.first_text_paint); + } else { + PAGE_LOAD_HISTOGRAM("PageLoad.Timing2.NavigationToFirstTextPaint.BG", + timing_.first_text_paint); + } + } } void PageLoadTracker::RecordEvent(PageLoadEvent event) { diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc index 147f094..fd06574 100644 --- a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc +++ b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc @@ -24,6 +24,8 @@ const char kDefaultTestUrl2[] = "https://whatever.com"; const char kHistogramNameFirstLayout[] = "PageLoad.Timing2.NavigationToFirstLayout"; +const char kHistogramNameFirstTextPaint[] = + "PageLoad.Timing2.NavigationToFirstTextPaint"; const char kHistogramNameDomContent[] = "PageLoad.Timing2.NavigationToDOMContentLoadedEventFired"; const char kHistogramNameLoad[] = @@ -31,6 +33,8 @@ const char kHistogramNameLoad[] = const char kBGHistogramNameFirstLayout[] = "PageLoad.Timing2.NavigationToFirstLayout.BG"; +const char kBGHistogramNameFirstTextPaint[] = + "PageLoad.Timing2.NavigationToFirstTextPaint.BG"; const char kBGHistogramNameDomContent[] = "PageLoad.Timing2.NavigationToDOMContentLoadedEventFired.BG"; const char kBGHistogramNameLoad[] = @@ -55,6 +59,7 @@ class MetricsWebContentsObserverTest histogram_tester_.ExpectTotalCount(kHistogramNameDomContent, 0); histogram_tester_.ExpectTotalCount(kHistogramNameLoad, 0); histogram_tester_.ExpectTotalCount(kHistogramNameFirstLayout, 0); + histogram_tester_.ExpectTotalCount(kHistogramNameFirstTextPaint, 0); } protected: @@ -141,6 +146,7 @@ TEST_F(MetricsWebContentsObserverTest, SamePageNoTriggerUntilTrueNavCommit) { histogram_tester_.ExpectTotalCount(kHistogramNameFirstLayout, 1); histogram_tester_.ExpectBucketCount(kHistogramNameFirstLayout, first_layout.InMilliseconds(), 1); + histogram_tester_.ExpectTotalCount(kHistogramNameFirstTextPaint, 0); } TEST_F(MetricsWebContentsObserverTest, SingleMetricAfterCommit) { @@ -168,12 +174,14 @@ TEST_F(MetricsWebContentsObserverTest, SingleMetricAfterCommit) { histogram_tester_.ExpectTotalCount(kHistogramNameFirstLayout, 1); histogram_tester_.ExpectBucketCount(kHistogramNameFirstLayout, first_layout.InMilliseconds(), 1); + histogram_tester_.ExpectTotalCount(kHistogramNameFirstTextPaint, 0); } TEST_F(MetricsWebContentsObserverTest, MultipleMetricsAfterCommits) { base::TimeDelta first_layout_1 = base::TimeDelta::FromMilliseconds(1); base::TimeDelta first_layout_2 = base::TimeDelta::FromMilliseconds(20); base::TimeDelta response = base::TimeDelta::FromMilliseconds(10); + base::TimeDelta first_text_paint = base::TimeDelta::FromMilliseconds(30); base::TimeDelta dom_content = base::TimeDelta::FromMilliseconds(40); base::TimeDelta load = base::TimeDelta::FromMilliseconds(100); @@ -181,6 +189,7 @@ TEST_F(MetricsWebContentsObserverTest, MultipleMetricsAfterCommits) { timing.navigation_start = base::Time::FromDoubleT(1); timing.first_layout = first_layout_1; timing.response_start = response; + timing.first_text_paint = first_text_paint; timing.dom_content_loaded_event_start = dom_content; timing.load_event_start = load; @@ -212,6 +221,10 @@ TEST_F(MetricsWebContentsObserverTest, MultipleMetricsAfterCommits) { histogram_tester_.ExpectBucketCount(kHistogramNameFirstLayout, first_layout_2.InMilliseconds(), 1); + histogram_tester_.ExpectTotalCount(kHistogramNameFirstTextPaint, 1); + histogram_tester_.ExpectBucketCount(kHistogramNameFirstTextPaint, + first_text_paint.InMilliseconds(), 1); + histogram_tester_.ExpectTotalCount(kHistogramNameDomContent, 1); histogram_tester_.ExpectBucketCount(kHistogramNameDomContent, dom_content.InMilliseconds(), 1); @@ -252,10 +265,12 @@ TEST_F(MetricsWebContentsObserverTest, BackgroundDifferentHistogram) { histogram_tester_.ExpectTotalCount(kBGHistogramNameFirstLayout, 1); histogram_tester_.ExpectBucketCount(kBGHistogramNameFirstLayout, first_layout.InMilliseconds(), 1); + histogram_tester_.ExpectTotalCount(kBGHistogramNameFirstTextPaint, 0); histogram_tester_.ExpectTotalCount(kHistogramNameDomContent, 0); histogram_tester_.ExpectTotalCount(kHistogramNameLoad, 0); histogram_tester_.ExpectTotalCount(kHistogramNameFirstLayout, 0); + histogram_tester_.ExpectTotalCount(kHistogramNameFirstTextPaint, 0); } TEST_F(MetricsWebContentsObserverTest, OnlyBackgroundLaterEvents) { @@ -278,6 +293,7 @@ TEST_F(MetricsWebContentsObserverTest, OnlyBackgroundLaterEvents) { observer_->WasHidden(); observer_->WasShown(); timing.first_layout = base::TimeDelta::FromSeconds(3); + timing.first_text_paint = base::TimeDelta::FromSeconds(4); observer_->OnMessageReceived( PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing), web_contents()->GetMainFrame()); @@ -290,6 +306,10 @@ TEST_F(MetricsWebContentsObserverTest, OnlyBackgroundLaterEvents) { histogram_tester_.ExpectTotalCount(kBGHistogramNameFirstLayout, 1); histogram_tester_.ExpectBucketCount(kBGHistogramNameFirstLayout, timing.first_layout.InMilliseconds(), 1); + histogram_tester_.ExpectTotalCount(kBGHistogramNameFirstTextPaint, 1); + histogram_tester_.ExpectBucketCount(kBGHistogramNameFirstTextPaint, + timing.first_text_paint.InMilliseconds(), + 1); histogram_tester_.ExpectTotalCount(kHistogramNameDomContent, 1); histogram_tester_.ExpectBucketCount( @@ -297,6 +317,7 @@ TEST_F(MetricsWebContentsObserverTest, OnlyBackgroundLaterEvents) { timing.dom_content_loaded_event_start.InMilliseconds(), 1); histogram_tester_.ExpectTotalCount(kHistogramNameLoad, 0); histogram_tester_.ExpectTotalCount(kHistogramNameFirstLayout, 0); + histogram_tester_.ExpectTotalCount(kHistogramNameFirstTextPaint, 0); } TEST_F(MetricsWebContentsObserverTest, DontBackgroundQuickerLoad) { @@ -336,6 +357,7 @@ TEST_F(MetricsWebContentsObserverTest, DontBackgroundQuickerLoad) { histogram_tester_.ExpectTotalCount(kHistogramNameFirstLayout, 1); histogram_tester_.ExpectBucketCount(kHistogramNameFirstLayout, first_layout.InMilliseconds(), 1); + histogram_tester_.ExpectTotalCount(kHistogramNameFirstTextPaint, 0); } TEST_F(MetricsWebContentsObserverTest, FailProvisionalLoad) { diff --git a/components/page_load_metrics/common/page_load_metrics_messages.h b/components/page_load_metrics/common/page_load_metrics_messages.h index 466e244..0ad0d67 100644 --- a/components/page_load_metrics/common/page_load_metrics_messages.h +++ b/components/page_load_metrics/common/page_load_metrics_messages.h @@ -18,6 +18,7 @@ IPC_STRUCT_TRAITS_BEGIN(page_load_metrics::PageLoadTiming) IPC_STRUCT_TRAITS_MEMBER(dom_content_loaded_event_start) IPC_STRUCT_TRAITS_MEMBER(load_event_start) IPC_STRUCT_TRAITS_MEMBER(first_layout) + IPC_STRUCT_TRAITS_MEMBER(first_text_paint) IPC_STRUCT_TRAITS_END() // Sent from renderer to browser process when the PageLoadTiming for the diff --git a/components/page_load_metrics/common/page_load_timing.cc b/components/page_load_metrics/common/page_load_timing.cc index 781048e..0af13ea 100644 --- a/components/page_load_metrics/common/page_load_timing.cc +++ b/components/page_load_metrics/common/page_load_timing.cc @@ -16,13 +16,15 @@ bool PageLoadTiming::operator==(const PageLoadTiming& other) const { dom_content_loaded_event_start == other.dom_content_loaded_event_start && load_event_start == other.load_event_start && - first_layout == other.first_layout; + first_layout == other.first_layout && + first_text_paint == other.first_text_paint; } bool PageLoadTiming::IsEmpty() const { return navigation_start.is_null() && response_start.is_zero() && dom_content_loaded_event_start.is_zero() && - load_event_start.is_zero() && first_layout.is_zero(); + load_event_start.is_zero() && first_layout.is_zero() && + first_text_paint.is_zero(); } } // namespace page_load_metrics diff --git a/components/page_load_metrics/common/page_load_timing.h b/components/page_load_metrics/common/page_load_timing.h index 80a9701..f5a94ff 100644 --- a/components/page_load_metrics/common/page_load_timing.h +++ b/components/page_load_metrics/common/page_load_timing.h @@ -38,6 +38,9 @@ struct PageLoadTiming { // Time when the first layout is completed. base::TimeDelta first_layout; + // Time when the first non-blank text is painted. + base::TimeDelta first_text_paint; + // If you add additional members, also be sure to update operator==, // page_load_metrics_messages.h, and IsEmpty(). }; diff --git a/components/page_load_metrics/renderer/metrics_render_frame_observer.cc b/components/page_load_metrics/renderer/metrics_render_frame_observer.cc index 7d06f9a..9d41dd3 100644 --- a/components/page_load_metrics/renderer/metrics_render_frame_observer.cc +++ b/components/page_load_metrics/renderer/metrics_render_frame_observer.cc @@ -112,6 +112,7 @@ PageLoadTiming MetricsRenderFrameObserver::GetTiming() const { ClampDelta(perf.domContentLoadedEventStart(), start); timing.load_event_start = ClampDelta(perf.loadEventStart(), start); timing.first_layout = ClampDelta(perf.firstLayout(), start); + timing.first_text_paint = ClampDelta(perf.firstTextPaint(), start); return timing; } |