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 |