Index: chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer_unittest.cc |
diff --git a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer_unittest.cc |
index eefc6bf6ded56b4255814bcace6ee330f876040b..d66de85856e5bf3c9c24665bc9172469be13ab0a 100644 |
--- a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer_unittest.cc |
+++ b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer_unittest.cc |
@@ -7,6 +7,7 @@ |
#include "base/memory/ptr_util.h" |
#include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h" |
#include "chrome/test/base/testing_browser_process.h" |
+#include "components/page_load_metrics/browser/page_load_metrics_util.h" |
#include "components/rappor/rappor_utils.h" |
#include "components/rappor/test_rappor_service.h" |
@@ -238,10 +239,51 @@ TEST_F(CorePageLoadMetricsObserverTest, BackgroundDifferentHistogram) { |
histogram_tester().ExpectTotalCount(internal::kHistogramFirstTextPaint, 0); |
} |
+TEST_F(CorePageLoadMetricsObserverTest, |
+ BackgroundCommitHistogramClockResolutionNonDeterministic) { |
+ base::TimeDelta first_layout = base::TimeDelta::FromMilliseconds(1); |
+ |
+ page_load_metrics::PageLoadTiming timing; |
+ timing.navigation_start = base::Time::FromDoubleT(1); |
+ timing.first_layout = first_layout; |
+ PopulateRequiredTimingFields(&timing); |
+ |
+ // Start a provisional load. |
+ GURL url(kDefaultTestUrl2); |
+ content::RenderFrameHostTester* rfh_tester = |
+ content::RenderFrameHostTester::For(main_rfh()); |
+ rfh_tester->SimulateNavigationStart(url); |
+ |
+ // Background and then commit. |
+ web_contents()->WasHidden(); |
+ rfh_tester->SimulateNavigationCommit(url); |
+ SimulateTimingUpdate(timing); |
+ rfh_tester->SimulateNavigationStop(); |
+ |
+ page_load_metrics::PageLoadExtraInfo info = |
+ GetPageLoadExtraInfoForCommittedLoad(); |
+ |
+ // Navigate again to force histograms to be logged. |
+ NavigateAndCommit(GURL(kDefaultTestUrl)); |
+ |
+ // If the system clock is low resolution PageLoadTracker's commit_time_ may |
+ // be = first_background_time_. |
+ if (page_load_metrics::WasStartedInForegroundOptionalEventInForeground( |
+ info.time_to_commit, info)) { |
+ histogram_tester().ExpectTotalCount(internal::kBackgroundHistogramCommit, |
+ 0); |
+ histogram_tester().ExpectTotalCount(internal::kHistogramCommit, 1); |
+ } else { |
+ histogram_tester().ExpectTotalCount(internal::kBackgroundHistogramCommit, |
+ 1); |
+ histogram_tester().ExpectTotalCount(internal::kHistogramCommit, 0); |
+ } |
+} |
+ |
TEST_F(CorePageLoadMetricsObserverTest, OnlyBackgroundLaterEvents) { |
page_load_metrics::PageLoadTiming timing; |
timing.navigation_start = base::Time::FromDoubleT(1); |
- // Set these events at 1 microsecond so they are definitely occur before we |
+ // Set these events at 1 microsecond so they definitely occur before we |
// background the tab later in the test. |
timing.response_start = base::TimeDelta::FromMicroseconds(1); |
timing.dom_loading = base::TimeDelta::FromMicroseconds(1); |
@@ -250,7 +292,7 @@ TEST_F(CorePageLoadMetricsObserverTest, OnlyBackgroundLaterEvents) { |
NavigateAndCommit(GURL(kDefaultTestUrl)); |
SimulateTimingUpdate(timing); |
- // Background the tab, then forground it. |
+ // Background the tab, then foreground it. |
web_contents()->WasHidden(); |
web_contents()->WasShown(); |
timing.first_layout = base::TimeDelta::FromSeconds(3); |
@@ -258,12 +300,33 @@ TEST_F(CorePageLoadMetricsObserverTest, OnlyBackgroundLaterEvents) { |
PopulateRequiredTimingFields(&timing); |
SimulateTimingUpdate(timing); |
+ // If the system clock is low resolution, PageLoadTracker's |
+ // first_background_time_ may be same as other times such as |
+ // dom_content_loaded_event_start. |
+ page_load_metrics::PageLoadExtraInfo info = |
+ GetPageLoadExtraInfoForCommittedLoad(); |
+ |
// Navigate again to force histogram recording. |
NavigateAndCommit(GURL(kDefaultTestUrl2)); |
histogram_tester().ExpectTotalCount(internal::kBackgroundHistogramCommit, 0); |
- histogram_tester().ExpectTotalCount( |
- internal::kBackgroundHistogramDomContentLoaded, 0); |
+ |
+ if (page_load_metrics::WasStartedInForegroundEventInForeground( |
+ timing.dom_content_loaded_event_start, info)) { |
+ histogram_tester().ExpectTotalCount(internal::kHistogramDomContentLoaded, |
+ 1); |
+ histogram_tester().ExpectBucketCount( |
+ internal::kHistogramDomContentLoaded, |
+ timing.dom_content_loaded_event_start.InMilliseconds(), 1); |
+ histogram_tester().ExpectTotalCount( |
+ internal::kBackgroundHistogramDomContentLoaded, 0); |
+ } else { |
+ histogram_tester().ExpectTotalCount( |
+ internal::kBackgroundHistogramDomContentLoaded, 1); |
+ histogram_tester().ExpectTotalCount(internal::kHistogramDomContentLoaded, |
+ 0); |
+ } |
+ |
histogram_tester().ExpectTotalCount(internal::kBackgroundHistogramLoad, 0); |
histogram_tester().ExpectTotalCount(internal::kBackgroundHistogramFirstLayout, |
1); |
@@ -277,10 +340,6 @@ TEST_F(CorePageLoadMetricsObserverTest, OnlyBackgroundLaterEvents) { |
timing.first_text_paint.InMilliseconds(), 1); |
histogram_tester().ExpectTotalCount(internal::kHistogramCommit, 1); |
- histogram_tester().ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); |
- histogram_tester().ExpectBucketCount( |
- internal::kHistogramDomContentLoaded, |
- timing.dom_content_loaded_event_start.InMilliseconds(), 1); |
histogram_tester().ExpectTotalCount(internal::kHistogramLoad, 0); |
histogram_tester().ExpectTotalCount(internal::kHistogramFirstLayout, 0); |
histogram_tester().ExpectTotalCount(internal::kHistogramFirstTextPaint, 0); |
@@ -345,10 +404,10 @@ TEST_F(CorePageLoadMetricsObserverTest, FailedBackgroundProvisionalLoad) { |
// Test that failed provisional event does not get logged in the |
// histogram if it happened in the background |
GURL url(kDefaultTestUrl); |
+ web_contents()->WasHidden(); |
content::RenderFrameHostTester* rfh_tester = |
content::RenderFrameHostTester::For(main_rfh()); |
rfh_tester->SimulateNavigationStart(url); |
- web_contents()->WasHidden(); |
rfh_tester->SimulateNavigationError(url, net::ERR_TIMED_OUT); |
rfh_tester->SimulateNavigationStop(); |