| 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 "platform/Timer.h" | 5 #include "platform/Timer.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <queue> | 8 #include <queue> |
| 9 #include "platform/scheduler/base/task_queue_impl.h" | 9 #include "platform/scheduler/base/task_queue_impl.h" |
| 10 #include "platform/scheduler/child/web_task_runner_impl.h" | 10 #include "platform/scheduler/child/web_task_runner_impl.h" |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 EXPECT_GE(period, 0.0); | 47 EXPECT_GE(period, 0.0); |
| 48 platform_->RunForPeriodSeconds(period); | 48 platform_->RunForPeriodSeconds(period); |
| 49 } | 49 } |
| 50 | 50 |
| 51 // Returns false if there are no pending delayed tasks, otherwise sets |time| | 51 // Returns false if there are no pending delayed tasks, otherwise sets |time| |
| 52 // to the delay in seconds till the next pending delayed task is scheduled to | 52 // to the delay in seconds till the next pending delayed task is scheduled to |
| 53 // fire. | 53 // fire. |
| 54 bool TimeTillNextDelayedTask(double* time) const { | 54 bool TimeTillNextDelayedTask(double* time) const { |
| 55 base::TimeTicks next_run_time; | 55 base::TimeTicks next_run_time; |
| 56 if (!platform_->GetRendererScheduler() | 56 if (!platform_->GetRendererScheduler() |
| 57 ->TimerTaskRunner() | 57 ->TimerTaskQueue() |
| 58 ->GetTimeDomain() | 58 ->GetTimeDomain() |
| 59 ->NextScheduledRunTime(&next_run_time)) | 59 ->NextScheduledRunTime(&next_run_time)) |
| 60 return false; | 60 return false; |
| 61 *time = (next_run_time - platform_->GetRendererScheduler() | 61 *time = (next_run_time - platform_->GetRendererScheduler() |
| 62 ->TimerTaskRunner() | 62 ->TimerTaskQueue() |
| 63 ->GetTimeDomain() | 63 ->GetTimeDomain() |
| 64 ->Now()) | 64 ->Now()) |
| 65 .InSecondsF(); | 65 .InSecondsF(); |
| 66 return true; | 66 return true; |
| 67 } | 67 } |
| 68 | 68 |
| 69 protected: | 69 protected: |
| 70 double start_time_; | 70 double start_time_; |
| 71 WTF::Vector<double> run_times_; | 71 WTF::Vector<double> run_times_; |
| 72 WTF::Vector<double> next_fire_times_; | 72 WTF::Vector<double> next_fire_times_; |
| (...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 529 TimerForTest(RefPtr<WebTaskRunner> web_task_runner, | 529 TimerForTest(RefPtr<WebTaskRunner> web_task_runner, |
| 530 TimerFiredClass* timer_fired_class, | 530 TimerFiredClass* timer_fired_class, |
| 531 TimerFiredFunction timer_fired_function) | 531 TimerFiredFunction timer_fired_function) |
| 532 : TaskRunnerTimer<TimerFiredClass>(std::move(web_task_runner), | 532 : TaskRunnerTimer<TimerFiredClass>(std::move(web_task_runner), |
| 533 timer_fired_class, | 533 timer_fired_class, |
| 534 timer_fired_function) {} | 534 timer_fired_function) {} |
| 535 }; | 535 }; |
| 536 | 536 |
| 537 TEST_F(TimerTest, UserSuppliedWebTaskRunner) { | 537 TEST_F(TimerTest, UserSuppliedWebTaskRunner) { |
| 538 scoped_refptr<scheduler::TaskQueue> task_runner( | 538 scoped_refptr<scheduler::TaskQueue> task_runner( |
| 539 platform_->GetRendererScheduler()->NewTimerTaskRunner( | 539 platform_->GetRendererScheduler()->NewTimerTaskQueue( |
| 540 scheduler::TaskQueue::QueueType::TEST)); | 540 scheduler::TaskQueue::QueueType::TEST)); |
| 541 RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner = | 541 RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner = |
| 542 scheduler::WebTaskRunnerImpl::Create(task_runner); | 542 scheduler::WebTaskRunnerImpl::Create(task_runner); |
| 543 TimerForTest<TimerTest> timer(web_task_runner, this, | 543 TimerForTest<TimerTest> timer(web_task_runner, this, |
| 544 &TimerTest::CountingTask); | 544 &TimerTest::CountingTask); |
| 545 timer.StartOneShot(0, BLINK_FROM_HERE); | 545 timer.StartOneShot(0, BLINK_FROM_HERE); |
| 546 | 546 |
| 547 // Make sure the task was posted on taskRunner. | 547 // Make sure the task was posted on taskRunner. |
| 548 EXPECT_FALSE(task_runner->IsEmpty()); | 548 EXPECT_FALSE(task_runner->IsEmpty()); |
| 549 } | 549 } |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 617 RefPtr<WebTaskRunner> task_runner_; | 617 RefPtr<WebTaskRunner> task_runner_; |
| 618 std::vector<RefPtr<WebTaskRunner>>* run_order_; | 618 std::vector<RefPtr<WebTaskRunner>>* run_order_; |
| 619 }; | 619 }; |
| 620 | 620 |
| 621 } // namespace | 621 } // namespace |
| 622 | 622 |
| 623 TEST_F(TimerTest, MoveToNewTaskRunnerOneShot) { | 623 TEST_F(TimerTest, MoveToNewTaskRunnerOneShot) { |
| 624 std::vector<RefPtr<WebTaskRunner>> run_order; | 624 std::vector<RefPtr<WebTaskRunner>> run_order; |
| 625 | 625 |
| 626 scoped_refptr<scheduler::TaskQueue> task_runner1( | 626 scoped_refptr<scheduler::TaskQueue> task_runner1( |
| 627 platform_->GetRendererScheduler()->NewTimerTaskRunner( | 627 platform_->GetRendererScheduler()->NewTimerTaskQueue( |
| 628 scheduler::TaskQueue::QueueType::TEST)); | 628 scheduler::TaskQueue::QueueType::TEST)); |
| 629 RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner1 = | 629 RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner1 = |
| 630 scheduler::WebTaskRunnerImpl::Create(task_runner1); | 630 scheduler::WebTaskRunnerImpl::Create(task_runner1); |
| 631 TaskObserver task_observer1(web_task_runner1, &run_order); | 631 TaskObserver task_observer1(web_task_runner1, &run_order); |
| 632 task_runner1->AddTaskObserver(&task_observer1); | 632 task_runner1->AddTaskObserver(&task_observer1); |
| 633 | 633 |
| 634 scoped_refptr<scheduler::TaskQueue> task_runner2( | 634 scoped_refptr<scheduler::TaskQueue> task_runner2( |
| 635 platform_->GetRendererScheduler()->NewTimerTaskRunner( | 635 platform_->GetRendererScheduler()->NewTimerTaskQueue( |
| 636 scheduler::TaskQueue::QueueType::TEST)); | 636 scheduler::TaskQueue::QueueType::TEST)); |
| 637 RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner2 = | 637 RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner2 = |
| 638 scheduler::WebTaskRunnerImpl::Create(task_runner2); | 638 scheduler::WebTaskRunnerImpl::Create(task_runner2); |
| 639 TaskObserver task_observer2(web_task_runner2, &run_order); | 639 TaskObserver task_observer2(web_task_runner2, &run_order); |
| 640 task_runner2->AddTaskObserver(&task_observer2); | 640 task_runner2->AddTaskObserver(&task_observer2); |
| 641 | 641 |
| 642 TimerForTest<TimerTest> timer(web_task_runner1, this, | 642 TimerForTest<TimerTest> timer(web_task_runner1, this, |
| 643 &TimerTest::CountingTask); | 643 &TimerTest::CountingTask); |
| 644 | 644 |
| 645 double start_time = MonotonicallyIncreasingTime(); | 645 double start_time = MonotonicallyIncreasingTime(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 657 EXPECT_THAT(run_order, ElementsAre(web_task_runner2)); | 657 EXPECT_THAT(run_order, ElementsAre(web_task_runner2)); |
| 658 | 658 |
| 659 EXPECT_TRUE(task_runner1->IsEmpty()); | 659 EXPECT_TRUE(task_runner1->IsEmpty()); |
| 660 EXPECT_TRUE(task_runner2->IsEmpty()); | 660 EXPECT_TRUE(task_runner2->IsEmpty()); |
| 661 } | 661 } |
| 662 | 662 |
| 663 TEST_F(TimerTest, MoveToNewTaskRunnerRepeating) { | 663 TEST_F(TimerTest, MoveToNewTaskRunnerRepeating) { |
| 664 std::vector<RefPtr<WebTaskRunner>> run_order; | 664 std::vector<RefPtr<WebTaskRunner>> run_order; |
| 665 | 665 |
| 666 scoped_refptr<scheduler::TaskQueue> task_runner1( | 666 scoped_refptr<scheduler::TaskQueue> task_runner1( |
| 667 platform_->GetRendererScheduler()->NewTimerTaskRunner( | 667 platform_->GetRendererScheduler()->NewTimerTaskQueue( |
| 668 scheduler::TaskQueue::QueueType::TEST)); | 668 scheduler::TaskQueue::QueueType::TEST)); |
| 669 RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner1 = | 669 RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner1 = |
| 670 scheduler::WebTaskRunnerImpl::Create(task_runner1); | 670 scheduler::WebTaskRunnerImpl::Create(task_runner1); |
| 671 TaskObserver task_observer1(web_task_runner1, &run_order); | 671 TaskObserver task_observer1(web_task_runner1, &run_order); |
| 672 task_runner1->AddTaskObserver(&task_observer1); | 672 task_runner1->AddTaskObserver(&task_observer1); |
| 673 | 673 |
| 674 scoped_refptr<scheduler::TaskQueue> task_runner2( | 674 scoped_refptr<scheduler::TaskQueue> task_runner2( |
| 675 platform_->GetRendererScheduler()->NewTimerTaskRunner( | 675 platform_->GetRendererScheduler()->NewTimerTaskQueue( |
| 676 scheduler::TaskQueue::QueueType::TEST)); | 676 scheduler::TaskQueue::QueueType::TEST)); |
| 677 RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner2 = | 677 RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner2 = |
| 678 scheduler::WebTaskRunnerImpl::Create(task_runner2); | 678 scheduler::WebTaskRunnerImpl::Create(task_runner2); |
| 679 TaskObserver task_observer2(web_task_runner2, &run_order); | 679 TaskObserver task_observer2(web_task_runner2, &run_order); |
| 680 task_runner2->AddTaskObserver(&task_observer2); | 680 task_runner2->AddTaskObserver(&task_observer2); |
| 681 | 681 |
| 682 TimerForTest<TimerTest> timer(web_task_runner1, this, | 682 TimerForTest<TimerTest> timer(web_task_runner1, this, |
| 683 &TimerTest::CountingTask); | 683 &TimerTest::CountingTask); |
| 684 | 684 |
| 685 double start_time = MonotonicallyIncreasingTime(); | 685 double start_time = MonotonicallyIncreasingTime(); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 699 web_task_runner2, web_task_runner2)); | 699 web_task_runner2, web_task_runner2)); |
| 700 | 700 |
| 701 EXPECT_TRUE(task_runner1->IsEmpty()); | 701 EXPECT_TRUE(task_runner1->IsEmpty()); |
| 702 EXPECT_FALSE(task_runner2->IsEmpty()); | 702 EXPECT_FALSE(task_runner2->IsEmpty()); |
| 703 } | 703 } |
| 704 | 704 |
| 705 // This test checks that when inactive timer is moved to a different task | 705 // This test checks that when inactive timer is moved to a different task |
| 706 // runner it isn't activated. | 706 // runner it isn't activated. |
| 707 TEST_F(TimerTest, MoveToNewTaskRunnerWithoutTasks) { | 707 TEST_F(TimerTest, MoveToNewTaskRunnerWithoutTasks) { |
| 708 scoped_refptr<scheduler::TaskQueue> task_runner1( | 708 scoped_refptr<scheduler::TaskQueue> task_runner1( |
| 709 platform_->GetRendererScheduler()->NewTimerTaskRunner( | 709 platform_->GetRendererScheduler()->NewTimerTaskQueue( |
| 710 scheduler::TaskQueue::QueueType::TEST)); | 710 scheduler::TaskQueue::QueueType::TEST)); |
| 711 RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner1 = | 711 RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner1 = |
| 712 scheduler::WebTaskRunnerImpl::Create(task_runner1); | 712 scheduler::WebTaskRunnerImpl::Create(task_runner1); |
| 713 | 713 |
| 714 scoped_refptr<scheduler::TaskQueue> task_runner2( | 714 scoped_refptr<scheduler::TaskQueue> task_runner2( |
| 715 platform_->GetRendererScheduler()->NewTimerTaskRunner( | 715 platform_->GetRendererScheduler()->NewTimerTaskQueue( |
| 716 scheduler::TaskQueue::QueueType::TEST)); | 716 scheduler::TaskQueue::QueueType::TEST)); |
| 717 RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner2 = | 717 RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner2 = |
| 718 scheduler::WebTaskRunnerImpl::Create(task_runner2); | 718 scheduler::WebTaskRunnerImpl::Create(task_runner2); |
| 719 | 719 |
| 720 TimerForTest<TimerTest> timer(web_task_runner1, this, | 720 TimerForTest<TimerTest> timer(web_task_runner1, this, |
| 721 &TimerTest::CountingTask); | 721 &TimerTest::CountingTask); |
| 722 | 722 |
| 723 platform_->RunUntilIdle(); | 723 platform_->RunUntilIdle(); |
| 724 EXPECT_TRUE(!run_times_.size()); | 724 EXPECT_TRUE(!run_times_.size()); |
| 725 EXPECT_TRUE(task_runner1->IsEmpty()); | 725 EXPECT_TRUE(task_runner1->IsEmpty()); |
| 726 EXPECT_TRUE(task_runner2->IsEmpty()); | 726 EXPECT_TRUE(task_runner2->IsEmpty()); |
| 727 } | 727 } |
| 728 | 728 |
| 729 } // namespace | 729 } // namespace |
| 730 } // namespace blink | 730 } // namespace blink |
| OLD | NEW |