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 "platform/scheduler/base/task_queue_impl.h" | 7 #include "platform/scheduler/base/task_queue_impl.h" |
8 #include "platform/scheduler/child/web_task_runner_impl.h" | 8 #include "platform/scheduler/child/web_task_runner_impl.h" |
9 #include "platform/scheduler/renderer/renderer_scheduler_impl.h" | 9 #include "platform/scheduler/renderer/renderer_scheduler_impl.h" |
10 #include "platform/testing/TestingPlatformSupport.h" | 10 #include "platform/testing/TestingPlatformSupport.h" |
(...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
589 | 589 |
590 { | 590 { |
591 GCForbiddenScope scope; | 591 GCForbiddenScope scope; |
592 EXPECT_FALSE(record->timerHasFired()); | 592 EXPECT_FALSE(record->timerHasFired()); |
593 m_platform.runUntilIdle(); | 593 m_platform.runUntilIdle(); |
594 EXPECT_FALSE(record->timerHasFired()); | 594 EXPECT_FALSE(record->timerHasFired()); |
595 EXPECT_FALSE(record->ownerIsDestructed()); | 595 EXPECT_FALSE(record->ownerIsDestructed()); |
596 } | 596 } |
597 } | 597 } |
598 | 598 |
| 599 namespace { |
| 600 |
| 601 class TaskObserver : public base::MessageLoop::TaskObserver { |
| 602 public: |
| 603 TaskObserver(WebTaskRunner* task_runner, |
| 604 std::vector<WebTaskRunner*>* runOrder) |
| 605 : m_taskRunner(task_runner), m_runOrder(runOrder) {} |
| 606 |
| 607 void WillProcessTask(const base::PendingTask&) {} |
| 608 |
| 609 void DidProcessTask(const base::PendingTask&) { |
| 610 m_runOrder->push_back(m_taskRunner); |
| 611 } |
| 612 |
| 613 private: |
| 614 WebTaskRunner* m_taskRunner; |
| 615 std::vector<WebTaskRunner*>* m_runOrder; |
| 616 }; |
| 617 |
| 618 } // namespace |
| 619 |
| 620 TEST_F(TimerTest, MoveToNewTaskRunnerOneShot) { |
| 621 std::vector<WebTaskRunner*> runOrder; |
| 622 |
| 623 scoped_refptr<scheduler::TaskQueue> taskRunner1( |
| 624 m_platform.rendererScheduler()->NewTimerTaskRunner( |
| 625 scheduler::TaskQueue::QueueType::TEST)); |
| 626 scheduler::WebTaskRunnerImpl webTaskRunner1(taskRunner1); |
| 627 TaskObserver taskObserver1(&webTaskRunner1, &runOrder); |
| 628 taskRunner1->AddTaskObserver(&taskObserver1); |
| 629 |
| 630 scoped_refptr<scheduler::TaskQueue> taskRunner2( |
| 631 m_platform.rendererScheduler()->NewTimerTaskRunner( |
| 632 scheduler::TaskQueue::QueueType::TEST)); |
| 633 scheduler::WebTaskRunnerImpl webTaskRunner2(taskRunner2); |
| 634 TaskObserver taskObserver2(&webTaskRunner2, &runOrder); |
| 635 taskRunner2->AddTaskObserver(&taskObserver2); |
| 636 |
| 637 TimerForTest<TimerTest> timer(&webTaskRunner1, this, |
| 638 &TimerTest::countingTask); |
| 639 |
| 640 double startTime = monotonicallyIncreasingTime(); |
| 641 |
| 642 timer.startOneShot(1, BLINK_FROM_HERE); |
| 643 |
| 644 m_platform.runForPeriodSeconds(0.5); |
| 645 |
| 646 timer.moveToNewTaskRunner(&webTaskRunner2); |
| 647 |
| 648 m_platform.runUntilIdle(); |
| 649 |
| 650 EXPECT_THAT(m_runTimes, ElementsAre(startTime + 1.0)); |
| 651 |
| 652 EXPECT_THAT(runOrder, ElementsAre(&webTaskRunner2)); |
| 653 |
| 654 EXPECT_TRUE(taskRunner1->IsEmpty()); |
| 655 EXPECT_TRUE(taskRunner2->IsEmpty()); |
| 656 } |
| 657 |
| 658 TEST_F(TimerTest, MoveToNewTaskRunnerRepeating) { |
| 659 std::vector<WebTaskRunner*> runOrder; |
| 660 |
| 661 scoped_refptr<scheduler::TaskQueue> taskRunner1( |
| 662 m_platform.rendererScheduler()->NewTimerTaskRunner( |
| 663 scheduler::TaskQueue::QueueType::TEST)); |
| 664 scheduler::WebTaskRunnerImpl webTaskRunner1(taskRunner1); |
| 665 TaskObserver taskObserver1(&webTaskRunner1, &runOrder); |
| 666 taskRunner1->AddTaskObserver(&taskObserver1); |
| 667 |
| 668 scoped_refptr<scheduler::TaskQueue> taskRunner2( |
| 669 m_platform.rendererScheduler()->NewTimerTaskRunner( |
| 670 scheduler::TaskQueue::QueueType::TEST)); |
| 671 scheduler::WebTaskRunnerImpl webTaskRunner2(taskRunner2); |
| 672 TaskObserver taskObserver2(&webTaskRunner2, &runOrder); |
| 673 taskRunner2->AddTaskObserver(&taskObserver2); |
| 674 |
| 675 TimerForTest<TimerTest> timer(&webTaskRunner1, this, |
| 676 &TimerTest::countingTask); |
| 677 |
| 678 double startTime = monotonicallyIncreasingTime(); |
| 679 |
| 680 timer.startRepeating(1, BLINK_FROM_HERE); |
| 681 |
| 682 m_platform.runForPeriodSeconds(2.5); |
| 683 |
| 684 timer.moveToNewTaskRunner(&webTaskRunner2); |
| 685 |
| 686 m_platform.runForPeriodSeconds(2); |
| 687 |
| 688 EXPECT_THAT(m_runTimes, ElementsAre(startTime + 1.0, startTime + 2.0, |
| 689 startTime + 3.0, startTime + 4.0)); |
| 690 |
| 691 EXPECT_THAT(runOrder, ElementsAre(&webTaskRunner1, &webTaskRunner1, |
| 692 &webTaskRunner2, &webTaskRunner2)); |
| 693 |
| 694 EXPECT_TRUE(taskRunner1->IsEmpty()); |
| 695 EXPECT_FALSE(taskRunner2->IsEmpty()); |
| 696 } |
| 697 |
599 } // namespace | 698 } // namespace |
600 } // namespace blink | 699 } // namespace blink |
OLD | NEW |