| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stddef.h> | 5 #include <stddef.h> |
| 6 #include <deque> | 6 #include <deque> |
| 7 #include <set> | 7 #include <set> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <unordered_map> | 9 #include <unordered_map> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 3288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3299 base::TimeTicks load_start = clock->NowTicks(); | 3299 base::TimeTicks load_start = clock->NowTicks(); |
| 3300 clock->Advance(base::TimeDelta::FromSeconds(1)); | 3300 clock->Advance(base::TimeDelta::FromSeconds(1)); |
| 3301 NavigateToDestURL(); | 3301 NavigateToDestURL(); |
| 3302 | 3302 |
| 3303 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), | 3303 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), |
| 3304 GetActiveWebContents()); | 3304 GetActiveWebContents()); |
| 3305 observer.SetNavigationStartTicksForTesting(load_start); | 3305 observer.SetNavigationStartTicksForTesting(load_start); |
| 3306 | 3306 |
| 3307 page_load_metrics::PageLoadTiming timing; | 3307 page_load_metrics::PageLoadTiming timing; |
| 3308 timing.navigation_start = base::Time::FromDoubleT(1); // Non-null time. | 3308 timing.navigation_start = base::Time::FromDoubleT(1); // Non-null time. |
| 3309 timing.first_contentful_paint = base::TimeDelta::FromMilliseconds(2654); | 3309 timing.paint_timing.first_contentful_paint = |
| 3310 base::TimeDelta::FromMilliseconds(2654); |
| 3310 page_load_metrics::PageLoadMetricsObserverTestHarness:: | 3311 page_load_metrics::PageLoadMetricsObserverTestHarness:: |
| 3311 PopulateRequiredTimingFields(&timing); | 3312 PopulateRequiredTimingFields(&timing); |
| 3312 observer.OnFirstContentfulPaint(timing, GenericPageLoadExtraInfo(dest_url())); | 3313 observer.OnFirstContentfulPaint(timing, GenericPageLoadExtraInfo(dest_url())); |
| 3313 | 3314 |
| 3314 histogram_tester().ExpectTotalCount( | 3315 histogram_tester().ExpectTotalCount( |
| 3315 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1); | 3316 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1); |
| 3316 histogram_tester().ExpectUniqueSample( | 3317 histogram_tester().ExpectUniqueSample( |
| 3317 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1654, 1); | 3318 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1654, 1); |
| 3318 } | 3319 } |
| 3319 | 3320 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 3340 PrerenderTestURL(url, FINAL_STATUS_USED, 1); | 3341 PrerenderTestURL(url, FINAL_STATUS_USED, 1); |
| 3341 clock->Advance(base::TimeDelta::FromSeconds(1)); | 3342 clock->Advance(base::TimeDelta::FromSeconds(1)); |
| 3342 | 3343 |
| 3343 NavigateToDestURL(); | 3344 NavigateToDestURL(); |
| 3344 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), | 3345 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), |
| 3345 GetActiveWebContents()); | 3346 GetActiveWebContents()); |
| 3346 observer.SetNavigationStartTicksForTesting(load_start); | 3347 observer.SetNavigationStartTicksForTesting(load_start); |
| 3347 | 3348 |
| 3348 page_load_metrics::PageLoadTiming timing; | 3349 page_load_metrics::PageLoadTiming timing; |
| 3349 timing.navigation_start = base::Time::FromDoubleT(1); // Non-null time. | 3350 timing.navigation_start = base::Time::FromDoubleT(1); // Non-null time. |
| 3350 timing.first_contentful_paint = base::TimeDelta::FromMilliseconds(2361); | 3351 timing.paint_timing.first_contentful_paint = |
| 3352 base::TimeDelta::FromMilliseconds(2361); |
| 3351 page_load_metrics::PageLoadMetricsObserverTestHarness:: | 3353 page_load_metrics::PageLoadMetricsObserverTestHarness:: |
| 3352 PopulateRequiredTimingFields(&timing); | 3354 PopulateRequiredTimingFields(&timing); |
| 3353 observer.OnFirstContentfulPaint(timing, GenericPageLoadExtraInfo(dest_url())); | 3355 observer.OnFirstContentfulPaint(timing, GenericPageLoadExtraInfo(dest_url())); |
| 3354 | 3356 |
| 3355 histogram_tester().ExpectTotalCount( | 3357 histogram_tester().ExpectTotalCount( |
| 3356 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1); | 3358 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1); |
| 3357 // If the first prerender had been used, the perceived TTFCP would have been | 3359 // If the first prerender had been used, the perceived TTFCP would have been |
| 3358 // under a second: 2362ms - 2 sec worth of Advance(). | 3360 // under a second: 2362ms - 2 sec worth of Advance(). |
| 3359 histogram_tester().ExpectUniqueSample( | 3361 histogram_tester().ExpectUniqueSample( |
| 3360 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1361, 1); | 3362 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1361, 1); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 3380 | 3382 |
| 3381 clock->Advance(base::TimeDelta::FromSeconds(1)); | 3383 clock->Advance(base::TimeDelta::FromSeconds(1)); |
| 3382 NavigateToDestURL(); | 3384 NavigateToDestURL(); |
| 3383 | 3385 |
| 3384 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), | 3386 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), |
| 3385 GetActiveWebContents()); | 3387 GetActiveWebContents()); |
| 3386 observer.SetNavigationStartTicksForTesting(load_start); | 3388 observer.SetNavigationStartTicksForTesting(load_start); |
| 3387 | 3389 |
| 3388 page_load_metrics::PageLoadTiming timing; | 3390 page_load_metrics::PageLoadTiming timing; |
| 3389 timing.navigation_start = base::Time::FromDoubleT(1); // Non-null time. | 3391 timing.navigation_start = base::Time::FromDoubleT(1); // Non-null time. |
| 3390 timing.first_contentful_paint = base::TimeDelta::FromMilliseconds(2361); | 3392 timing.paint_timing.first_contentful_paint = |
| 3393 base::TimeDelta::FromMilliseconds(2361); |
| 3391 page_load_metrics::PageLoadMetricsObserverTestHarness:: | 3394 page_load_metrics::PageLoadMetricsObserverTestHarness:: |
| 3392 PopulateRequiredTimingFields(&timing); | 3395 PopulateRequiredTimingFields(&timing); |
| 3393 observer.OnFirstContentfulPaint(timing, GenericPageLoadExtraInfo(dest_url())); | 3396 observer.OnFirstContentfulPaint(timing, GenericPageLoadExtraInfo(dest_url())); |
| 3394 | 3397 |
| 3395 histogram_tester().ExpectTotalCount( | 3398 histogram_tester().ExpectTotalCount( |
| 3396 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1); | 3399 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1); |
| 3397 // If the timed out had been used, the perceived TTFCP would have been | 3400 // If the timed out had been used, the perceived TTFCP would have been |
| 3398 // negative. | 3401 // negative. |
| 3399 histogram_tester().ExpectUniqueSample( | 3402 histogram_tester().ExpectUniqueSample( |
| 3400 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1361, 1); | 3403 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1361, 1); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 3423 | 3426 |
| 3424 clock->Advance(base::TimeDelta::FromSeconds(1)); | 3427 clock->Advance(base::TimeDelta::FromSeconds(1)); |
| 3425 NavigateToDestURLWithDisposition(WindowOpenDisposition::CURRENT_TAB, false); | 3428 NavigateToDestURLWithDisposition(WindowOpenDisposition::CURRENT_TAB, false); |
| 3426 | 3429 |
| 3427 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), | 3430 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), |
| 3428 GetActiveWebContents()); | 3431 GetActiveWebContents()); |
| 3429 observer.SetNavigationStartTicksForTesting(clock->NowTicks()); | 3432 observer.SetNavigationStartTicksForTesting(clock->NowTicks()); |
| 3430 | 3433 |
| 3431 page_load_metrics::PageLoadTiming timing; | 3434 page_load_metrics::PageLoadTiming timing; |
| 3432 timing.navigation_start = base::Time::FromDoubleT(1); // Non-null time. | 3435 timing.navigation_start = base::Time::FromDoubleT(1); // Non-null time. |
| 3433 timing.first_contentful_paint = base::TimeDelta::FromMilliseconds(2362); | 3436 timing.paint_timing.first_contentful_paint = |
| 3437 base::TimeDelta::FromMilliseconds(2362); |
| 3434 page_load_metrics::PageLoadMetricsObserverTestHarness:: | 3438 page_load_metrics::PageLoadMetricsObserverTestHarness:: |
| 3435 PopulateRequiredTimingFields(&timing); | 3439 PopulateRequiredTimingFields(&timing); |
| 3436 observer.OnFirstContentfulPaint(timing, GenericPageLoadExtraInfo(dest_url())); | 3440 observer.OnFirstContentfulPaint(timing, GenericPageLoadExtraInfo(dest_url())); |
| 3437 | 3441 |
| 3438 histogram_tester().ExpectTotalCount( | 3442 histogram_tester().ExpectTotalCount( |
| 3439 "Prerender.none_PrefetchTTFCP.Warm.Cacheable.Visible", 0); | 3443 "Prerender.none_PrefetchTTFCP.Warm.Cacheable.Visible", 0); |
| 3440 histogram_tester().ExpectTotalCount( | 3444 histogram_tester().ExpectTotalCount( |
| 3441 "Prerender.none_PerceivedTTFCPRecorded.Visible", 1); | 3445 "Prerender.none_PerceivedTTFCPRecorded.Visible", 1); |
| 3442 | 3446 |
| 3443 // Check that the prerender didn't happen with a defined origin. | 3447 // Check that the prerender didn't happen with a defined origin. |
| (...skipping 28 matching lines...) Expand all Loading... |
| 3472 clock->Advance(base::TimeDelta::FromSeconds(1)); | 3476 clock->Advance(base::TimeDelta::FromSeconds(1)); |
| 3473 NavigateToDestURL(); | 3477 NavigateToDestURL(); |
| 3474 | 3478 |
| 3475 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), | 3479 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), |
| 3476 GetActiveWebContents()); | 3480 GetActiveWebContents()); |
| 3477 observer.SetNavigationStartTicksForTesting(load_start); | 3481 observer.SetNavigationStartTicksForTesting(load_start); |
| 3478 | 3482 |
| 3479 page_load_metrics::PageLoadTiming timing; | 3483 page_load_metrics::PageLoadTiming timing; |
| 3480 timing.navigation_start = base::Time::FromDoubleT(1); // Non-null time. | 3484 timing.navigation_start = base::Time::FromDoubleT(1); // Non-null time. |
| 3481 // The FCP time should end up on the edge of the bucket. | 3485 // The FCP time should end up on the edge of the bucket. |
| 3482 timing.first_contentful_paint = base::TimeDelta::FromMilliseconds(2654); | 3486 timing.paint_timing.first_contentful_paint = |
| 3487 base::TimeDelta::FromMilliseconds(2654); |
| 3483 page_load_metrics::PageLoadMetricsObserverTestHarness:: | 3488 page_load_metrics::PageLoadMetricsObserverTestHarness:: |
| 3484 PopulateRequiredTimingFields(&timing); | 3489 PopulateRequiredTimingFields(&timing); |
| 3485 observer.OnFirstContentfulPaint(timing, GenericPageLoadExtraInfo(dest_url())); | 3490 observer.OnFirstContentfulPaint(timing, GenericPageLoadExtraInfo(dest_url())); |
| 3486 | 3491 |
| 3487 histogram_tester().ExpectTotalCount( | 3492 histogram_tester().ExpectTotalCount( |
| 3488 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1); | 3493 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1); |
| 3489 histogram_tester().ExpectUniqueSample( | 3494 histogram_tester().ExpectUniqueSample( |
| 3490 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1654, 1); | 3495 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Visible", 1654, 1); |
| 3491 } | 3496 } |
| 3492 | 3497 |
| 3493 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, FirstContentfulPaintHidden) { | 3498 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, FirstContentfulPaintHidden) { |
| 3494 GetPrerenderManager()->DisablePageLoadMetricsObserverForTesting(); | 3499 GetPrerenderManager()->DisablePageLoadMetricsObserverForTesting(); |
| 3495 base::SimpleTestTickClock* clock = OverridePrerenderManagerTimeTicks(); | 3500 base::SimpleTestTickClock* clock = OverridePrerenderManagerTimeTicks(); |
| 3496 base::TimeTicks load_start = clock->NowTicks(); | 3501 base::TimeTicks load_start = clock->NowTicks(); |
| 3497 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 3502 PrerenderTestURL("/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
| 3498 | 3503 |
| 3499 clock->Advance(base::TimeDelta::FromSeconds(1)); | 3504 clock->Advance(base::TimeDelta::FromSeconds(1)); |
| 3500 NavigateToDestURL(); | 3505 NavigateToDestURL(); |
| 3501 | 3506 |
| 3502 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), | 3507 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), |
| 3503 GetActiveWebContents()); | 3508 GetActiveWebContents()); |
| 3504 observer.SetNavigationStartTicksForTesting(load_start); | 3509 observer.SetNavigationStartTicksForTesting(load_start); |
| 3505 | 3510 |
| 3506 EXPECT_EQ(page_load_metrics::PageLoadMetricsObserver::CONTINUE_OBSERVING, | 3511 EXPECT_EQ(page_load_metrics::PageLoadMetricsObserver::CONTINUE_OBSERVING, |
| 3507 observer.OnHidden(page_load_metrics::PageLoadTiming(), | 3512 observer.OnHidden(page_load_metrics::PageLoadTiming(), |
| 3508 GenericPageLoadExtraInfo(dest_url()))); | 3513 GenericPageLoadExtraInfo(dest_url()))); |
| 3509 | 3514 |
| 3510 page_load_metrics::PageLoadTiming timing; | 3515 page_load_metrics::PageLoadTiming timing; |
| 3511 timing.navigation_start = base::Time::FromDoubleT(1); // Non-null time. | 3516 timing.navigation_start = base::Time::FromDoubleT(1); // Non-null time. |
| 3512 timing.first_contentful_paint = base::TimeDelta::FromMilliseconds(2654); | 3517 timing.paint_timing.first_contentful_paint = |
| 3518 base::TimeDelta::FromMilliseconds(2654); |
| 3513 page_load_metrics::PageLoadMetricsObserverTestHarness:: | 3519 page_load_metrics::PageLoadMetricsObserverTestHarness:: |
| 3514 PopulateRequiredTimingFields(&timing); | 3520 PopulateRequiredTimingFields(&timing); |
| 3515 observer.OnFirstContentfulPaint(timing, GenericPageLoadExtraInfo(dest_url())); | 3521 observer.OnFirstContentfulPaint(timing, GenericPageLoadExtraInfo(dest_url())); |
| 3516 | 3522 |
| 3517 histogram_tester().ExpectTotalCount( | 3523 histogram_tester().ExpectTotalCount( |
| 3518 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Hidden", 1); | 3524 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Hidden", 1); |
| 3519 histogram_tester().ExpectUniqueSample( | 3525 histogram_tester().ExpectUniqueSample( |
| 3520 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Hidden", 1654, 1); | 3526 "Prerender.websame_PrefetchTTFCP.Warm.Cacheable.Hidden", 1654, 1); |
| 3521 } | 3527 } |
| 3522 | 3528 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 3547 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), | 3553 PrerenderPageLoadMetricsObserver observer(GetPrerenderManager(), |
| 3548 GetActiveWebContents()); | 3554 GetActiveWebContents()); |
| 3549 observer.SetNavigationStartTicksForTesting(clock->NowTicks()); | 3555 observer.SetNavigationStartTicksForTesting(clock->NowTicks()); |
| 3550 | 3556 |
| 3551 EXPECT_EQ(page_load_metrics::PageLoadMetricsObserver::CONTINUE_OBSERVING, | 3557 EXPECT_EQ(page_load_metrics::PageLoadMetricsObserver::CONTINUE_OBSERVING, |
| 3552 observer.OnHidden(page_load_metrics::PageLoadTiming(), | 3558 observer.OnHidden(page_load_metrics::PageLoadTiming(), |
| 3553 GenericPageLoadExtraInfo(dest_url()))); | 3559 GenericPageLoadExtraInfo(dest_url()))); |
| 3554 | 3560 |
| 3555 page_load_metrics::PageLoadTiming timing; | 3561 page_load_metrics::PageLoadTiming timing; |
| 3556 timing.navigation_start = base::Time::FromDoubleT(1); // Non-null time. | 3562 timing.navigation_start = base::Time::FromDoubleT(1); // Non-null time. |
| 3557 timing.first_contentful_paint = base::TimeDelta::FromMilliseconds(2362); | 3563 timing.paint_timing.first_contentful_paint = |
| 3564 base::TimeDelta::FromMilliseconds(2362); |
| 3558 page_load_metrics::PageLoadMetricsObserverTestHarness:: | 3565 page_load_metrics::PageLoadMetricsObserverTestHarness:: |
| 3559 PopulateRequiredTimingFields(&timing); | 3566 PopulateRequiredTimingFields(&timing); |
| 3560 observer.OnFirstContentfulPaint(timing, GenericPageLoadExtraInfo(dest_url())); | 3567 observer.OnFirstContentfulPaint(timing, GenericPageLoadExtraInfo(dest_url())); |
| 3561 | 3568 |
| 3562 histogram_tester().ExpectTotalCount( | 3569 histogram_tester().ExpectTotalCount( |
| 3563 "Prerender.none_PrefetchTTFCP.Warm.Cacheable.Hidden", 0); | 3570 "Prerender.none_PrefetchTTFCP.Warm.Cacheable.Hidden", 0); |
| 3564 histogram_tester().ExpectTotalCount( | 3571 histogram_tester().ExpectTotalCount( |
| 3565 "Prerender.none_PerceivedTTFCPRecorded.Hidden", 1); | 3572 "Prerender.none_PerceivedTTFCPRecorded.Hidden", 1); |
| 3566 | 3573 |
| 3567 // Check that the prerender didn't happen with a defined origin. | 3574 // Check that the prerender didn't happen with a defined origin. |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3787 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(web_contents, | 3794 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(web_contents, |
| 3788 "DidDisplayReallyPass()", | 3795 "DidDisplayReallyPass()", |
| 3789 &display_test_result)); | 3796 &display_test_result)); |
| 3790 ASSERT_TRUE(display_test_result); | 3797 ASSERT_TRUE(display_test_result); |
| 3791 } | 3798 } |
| 3792 #endif // !defined(DISABLE_NACL) | 3799 #endif // !defined(DISABLE_NACL) |
| 3793 | 3800 |
| 3794 } // namespace prerender | 3801 } // namespace prerender |
| 3795 | 3802 |
| 3796 #endif // !defined(OS_MACOSX) || !defined(ADDRESS_SANITIZER) | 3803 #endif // !defined(OS_MACOSX) || !defined(ADDRESS_SANITIZER) |
| OLD | NEW |