| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "components/scheduler/renderer/web_view_scheduler_impl.h" | 5 #include "components/scheduler/renderer/web_view_scheduler_impl.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/callback.h" | 9 #include "base/callback.h" |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| 11 #include "base/test/simple_test_tick_clock.h" | 11 #include "base/test/simple_test_tick_clock.h" |
| 12 #include "cc/test/ordered_simple_task_runner.h" | 12 #include "cc/test/ordered_simple_task_runner.h" |
| 13 #include "components/scheduler/base/test_time_source.h" | 13 #include "components/scheduler/base/test_time_source.h" |
| 14 #include "components/scheduler/child/scheduler_tqm_delegate_for_test.h" | 14 #include "components/scheduler/child/scheduler_tqm_delegate_for_test.h" |
| 15 #include "components/scheduler/renderer/renderer_scheduler_impl.h" | 15 #include "components/scheduler/renderer/renderer_scheduler_impl.h" |
| 16 #include "components/scheduler/renderer/web_frame_scheduler_impl.h" | 16 #include "components/scheduler/renderer/web_frame_scheduler_impl.h" |
| 17 #include "testing/gmock/include/gmock/gmock.h" | 17 #include "testing/gmock/include/gmock/gmock.h" |
| 18 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 19 #include "third_party/WebKit/public/platform/WebTaskRunner.h" | 19 #include "third_party/WebKit/public/platform/WebTaskRunner.h" |
| 20 #include "third_party/WebKit/public/platform/WebTraceLocation.h" | 20 #include "third_party/WebKit/public/platform/WebTraceLocation.h" |
| 21 | 21 |
| 22 using testing::ElementsAre; | 22 using testing::ElementsAre; |
| 23 using VirtualTimePolicy = blink::WebViewScheduler::VirtualTimePolicy; |
| 23 | 24 |
| 24 namespace scheduler { | 25 namespace scheduler { |
| 25 | 26 |
| 26 class WebViewSchedulerImplTest : public testing::Test { | 27 class WebViewSchedulerImplTest : public testing::Test { |
| 27 public: | 28 public: |
| 28 WebViewSchedulerImplTest() {} | 29 WebViewSchedulerImplTest() {} |
| 29 ~WebViewSchedulerImplTest() override {} | 30 ~WebViewSchedulerImplTest() override {} |
| 30 | 31 |
| 31 void SetUp() override { | 32 void SetUp() override { |
| 32 clock_.reset(new base::SimpleTestTickClock()); | 33 clock_.reset(new base::SimpleTestTickClock()); |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 private: | 329 private: |
| 329 int index_; | 330 int index_; |
| 330 blink::WebTaskRunner* task_runner_; // NOT OWNED | 331 blink::WebTaskRunner* task_runner_; // NOT OWNED |
| 331 std::vector<int>* out_run_order_; // NOT OWNED | 332 std::vector<int>* out_run_order_; // NOT OWNED |
| 332 }; | 333 }; |
| 333 } | 334 } |
| 334 | 335 |
| 335 TEST_F(WebViewSchedulerImplTest, VirtualTime_NotAllowedToAdvance) { | 336 TEST_F(WebViewSchedulerImplTest, VirtualTime_NotAllowedToAdvance) { |
| 336 std::vector<int> run_order; | 337 std::vector<int> run_order; |
| 337 | 338 |
| 338 web_view_scheduler_->setAllowVirtualTimeToAdvance(false); | 339 web_view_scheduler_->setVirtualTimePolicy(VirtualTimePolicy::PAUSE); |
| 339 web_view_scheduler_->enableVirtualTime(); | 340 web_view_scheduler_->enableVirtualTime(); |
| 340 | 341 |
| 341 web_frame_scheduler_->timerTaskRunner()->postTask( | 342 web_frame_scheduler_->timerTaskRunner()->postTask( |
| 342 BLINK_FROM_HERE, new RunOrderTask(0, &run_order)); | 343 BLINK_FROM_HERE, new RunOrderTask(0, &run_order)); |
| 343 | 344 |
| 344 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( | 345 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( |
| 345 BLINK_FROM_HERE, | 346 BLINK_FROM_HERE, |
| 346 new DelayedRunOrderTask(1, web_frame_scheduler_->timerTaskRunner(), | 347 new DelayedRunOrderTask(1, web_frame_scheduler_->timerTaskRunner(), |
| 347 &run_order), | 348 &run_order), |
| 348 2.0); | 349 2.0); |
| 349 | 350 |
| 350 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( | 351 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( |
| 351 BLINK_FROM_HERE, | 352 BLINK_FROM_HERE, |
| 352 new DelayedRunOrderTask(3, web_frame_scheduler_->timerTaskRunner(), | 353 new DelayedRunOrderTask(3, web_frame_scheduler_->timerTaskRunner(), |
| 353 &run_order), | 354 &run_order), |
| 354 4.0); | 355 4.0); |
| 355 | 356 |
| 356 mock_task_runner_->RunUntilIdle(); | 357 mock_task_runner_->RunUntilIdle(); |
| 357 | 358 |
| 358 // Immediate tasks are allowed to run even if delayed tasks are not. | 359 // Immediate tasks are allowed to run even if delayed tasks are not. |
| 359 EXPECT_THAT(run_order, ElementsAre(0)); | 360 EXPECT_THAT(run_order, ElementsAre(0)); |
| 360 } | 361 } |
| 361 | 362 |
| 362 TEST_F(WebViewSchedulerImplTest, VirtualTime_AllowedToAdvance) { | 363 TEST_F(WebViewSchedulerImplTest, VirtualTime_AllowedToAdvance) { |
| 363 std::vector<int> run_order; | 364 std::vector<int> run_order; |
| 364 | 365 |
| 365 web_view_scheduler_->setAllowVirtualTimeToAdvance(true); | 366 web_view_scheduler_->setVirtualTimePolicy(VirtualTimePolicy::ADVANCE); |
| 366 web_view_scheduler_->enableVirtualTime(); | 367 web_view_scheduler_->enableVirtualTime(); |
| 367 | 368 |
| 368 web_frame_scheduler_->timerTaskRunner()->postTask( | 369 web_frame_scheduler_->timerTaskRunner()->postTask( |
| 369 BLINK_FROM_HERE, new RunOrderTask(0, &run_order)); | 370 BLINK_FROM_HERE, new RunOrderTask(0, &run_order)); |
| 370 | 371 |
| 371 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( | 372 web_frame_scheduler_->timerTaskRunner()->postDelayedTask( |
| 372 BLINK_FROM_HERE, | 373 BLINK_FROM_HERE, |
| 373 new DelayedRunOrderTask(1, web_frame_scheduler_->timerTaskRunner(), | 374 new DelayedRunOrderTask(1, web_frame_scheduler_->timerTaskRunner(), |
| 374 &run_order), | 375 &run_order), |
| 375 2.0); | 376 2.0); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 404 new RepeatingTask(web_frame_scheduler_->timerTaskRunner(), &run_count), | 405 new RepeatingTask(web_frame_scheduler_->timerTaskRunner(), &run_count), |
| 405 1.0); | 406 1.0); |
| 406 | 407 |
| 407 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); | 408 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); |
| 408 EXPECT_EQ(1000, run_count); | 409 EXPECT_EQ(1000, run_count); |
| 409 } | 410 } |
| 410 | 411 |
| 411 TEST_F(WebViewSchedulerImplTest, VirtualTimeSettings_NewWebFrameScheduler) { | 412 TEST_F(WebViewSchedulerImplTest, VirtualTimeSettings_NewWebFrameScheduler) { |
| 412 std::vector<int> run_order; | 413 std::vector<int> run_order; |
| 413 | 414 |
| 414 web_view_scheduler_->setAllowVirtualTimeToAdvance(false); | 415 web_view_scheduler_->setVirtualTimePolicy(VirtualTimePolicy::PAUSE); |
| 415 web_view_scheduler_->enableVirtualTime(); | 416 web_view_scheduler_->enableVirtualTime(); |
| 416 | 417 |
| 417 std::unique_ptr<WebFrameSchedulerImpl> web_frame_scheduler = | 418 std::unique_ptr<WebFrameSchedulerImpl> web_frame_scheduler = |
| 418 web_view_scheduler_->createWebFrameSchedulerImpl(nullptr); | 419 web_view_scheduler_->createWebFrameSchedulerImpl(nullptr); |
| 419 | 420 |
| 420 web_frame_scheduler->timerTaskRunner()->postDelayedTask( | 421 web_frame_scheduler->timerTaskRunner()->postDelayedTask( |
| 421 BLINK_FROM_HERE, new RunOrderTask(1, &run_order), 0.1); | 422 BLINK_FROM_HERE, new RunOrderTask(1, &run_order), 0.1); |
| 422 | 423 |
| 423 mock_task_runner_->RunUntilIdle(); | 424 mock_task_runner_->RunUntilIdle(); |
| 424 EXPECT_TRUE(run_order.empty()); | 425 EXPECT_TRUE(run_order.empty()); |
| 425 | 426 |
| 426 web_view_scheduler_->setAllowVirtualTimeToAdvance(true); | 427 web_view_scheduler_->setVirtualTimePolicy(VirtualTimePolicy::ADVANCE); |
| 427 mock_task_runner_->RunUntilIdle(); | 428 mock_task_runner_->RunUntilIdle(); |
| 428 | 429 |
| 429 EXPECT_THAT(run_order, ElementsAre(1)); | 430 EXPECT_THAT(run_order, ElementsAre(1)); |
| 430 } | 431 } |
| 431 | 432 |
| 432 namespace { | 433 namespace { |
| 433 class DeleteWebFrameSchedulerTask : public blink::WebTaskRunner::Task { | 434 class DeleteWebFrameSchedulerTask : public blink::WebTaskRunner::Task { |
| 434 public: | 435 public: |
| 435 explicit DeleteWebFrameSchedulerTask(WebViewSchedulerImpl* web_view_scheduler) | 436 explicit DeleteWebFrameSchedulerTask(WebViewSchedulerImpl* web_view_scheduler) |
| 436 : web_frame_scheduler_( | 437 : web_frame_scheduler_( |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 494 // Note this will run at time t = 10s since we start at time t = 5000us, and | 495 // Note this will run at time t = 10s since we start at time t = 5000us, and |
| 495 // it will prevent further tasks from running (i.e. the RepeatingTask) by | 496 // it will prevent further tasks from running (i.e. the RepeatingTask) by |
| 496 // deleting the WebFrameScheduler. | 497 // deleting the WebFrameScheduler. |
| 497 timer_task_runner->postDelayedTask(BLINK_FROM_HERE, delete_frame_task, | 498 timer_task_runner->postDelayedTask(BLINK_FROM_HERE, delete_frame_task, |
| 498 9990.0); | 499 9990.0); |
| 499 | 500 |
| 500 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(100)); | 501 mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(100)); |
| 501 EXPECT_EQ(10, run_count); | 502 EXPECT_EQ(10, run_count); |
| 502 } | 503 } |
| 503 | 504 |
| 505 TEST_F(WebViewSchedulerImplTest, |
| 506 VirtualTimePolicy_PAUSE_IF_NETWORK_FETCHES_PENDING) { |
| 507 web_view_scheduler_->setVirtualTimePolicy( |
| 508 VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING); |
| 509 EXPECT_TRUE(web_view_scheduler_->virtualTimeAllowedToAdvance()); |
| 510 |
| 511 web_view_scheduler_->incrementPendingResourceLoadCount(); |
| 512 EXPECT_FALSE(web_view_scheduler_->virtualTimeAllowedToAdvance()); |
| 513 |
| 514 web_view_scheduler_->incrementPendingResourceLoadCount(); |
| 515 EXPECT_FALSE(web_view_scheduler_->virtualTimeAllowedToAdvance()); |
| 516 |
| 517 web_view_scheduler_->decrementPendingResourceLoadCount(); |
| 518 EXPECT_FALSE(web_view_scheduler_->virtualTimeAllowedToAdvance()); |
| 519 |
| 520 web_view_scheduler_->incrementPendingResourceLoadCount(); |
| 521 EXPECT_FALSE(web_view_scheduler_->virtualTimeAllowedToAdvance()); |
| 522 |
| 523 web_view_scheduler_->decrementPendingResourceLoadCount(); |
| 524 EXPECT_FALSE(web_view_scheduler_->virtualTimeAllowedToAdvance()); |
| 525 |
| 526 web_view_scheduler_->decrementPendingResourceLoadCount(); |
| 527 EXPECT_TRUE(web_view_scheduler_->virtualTimeAllowedToAdvance()); |
| 528 } |
| 529 |
| 504 } // namespace scheduler | 530 } // namespace scheduler |
| OLD | NEW |