| Index: third_party/WebKit/Source/platform/TimerTest.cpp
|
| diff --git a/third_party/WebKit/Source/platform/TimerTest.cpp b/third_party/WebKit/Source/platform/TimerTest.cpp
|
| index 1135c84eaea3cf98c63a346dbb70f787bedc694f..2288573228a191ba61979ea0517753137e6b3b62 100644
|
| --- a/third_party/WebKit/Source/platform/TimerTest.cpp
|
| +++ b/third_party/WebKit/Source/platform/TimerTest.cpp
|
| @@ -596,5 +596,104 @@ TEST_F(TimerTest, MarkOnHeapTimerAsUnreachable) {
|
| }
|
| }
|
|
|
| +namespace {
|
| +
|
| +class TaskObserver : public base::MessageLoop::TaskObserver {
|
| + public:
|
| + TaskObserver(WebTaskRunner* task_runner,
|
| + std::vector<WebTaskRunner*>* runOrder)
|
| + : m_taskRunner(task_runner), m_runOrder(runOrder) {}
|
| +
|
| + void WillProcessTask(const base::PendingTask&) {}
|
| +
|
| + void DidProcessTask(const base::PendingTask&) {
|
| + m_runOrder->push_back(m_taskRunner);
|
| + }
|
| +
|
| + private:
|
| + WebTaskRunner* m_taskRunner;
|
| + std::vector<WebTaskRunner*>* m_runOrder;
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +TEST_F(TimerTest, MoveToNewTaskRunnerOneShot) {
|
| + std::vector<WebTaskRunner*> runOrder;
|
| +
|
| + scoped_refptr<scheduler::TaskQueue> taskRunner1(
|
| + m_platform.rendererScheduler()->NewTimerTaskRunner(
|
| + scheduler::TaskQueue::QueueType::TEST));
|
| + scheduler::WebTaskRunnerImpl webTaskRunner1(taskRunner1);
|
| + TaskObserver taskObserver1(&webTaskRunner1, &runOrder);
|
| + taskRunner1->AddTaskObserver(&taskObserver1);
|
| +
|
| + scoped_refptr<scheduler::TaskQueue> taskRunner2(
|
| + m_platform.rendererScheduler()->NewTimerTaskRunner(
|
| + scheduler::TaskQueue::QueueType::TEST));
|
| + scheduler::WebTaskRunnerImpl webTaskRunner2(taskRunner2);
|
| + TaskObserver taskObserver2(&webTaskRunner2, &runOrder);
|
| + taskRunner2->AddTaskObserver(&taskObserver2);
|
| +
|
| + TimerForTest<TimerTest> timer(&webTaskRunner1, this,
|
| + &TimerTest::countingTask);
|
| +
|
| + double startTime = monotonicallyIncreasingTime();
|
| +
|
| + timer.startOneShot(1, BLINK_FROM_HERE);
|
| +
|
| + m_platform.runForPeriodSeconds(0.5);
|
| +
|
| + timer.moveToNewTaskRunner(&webTaskRunner2);
|
| +
|
| + m_platform.runUntilIdle();
|
| +
|
| + EXPECT_THAT(m_runTimes, ElementsAre(startTime + 1.0));
|
| +
|
| + EXPECT_THAT(runOrder, ElementsAre(&webTaskRunner2));
|
| +
|
| + EXPECT_TRUE(taskRunner1->IsEmpty());
|
| + EXPECT_TRUE(taskRunner2->IsEmpty());
|
| +}
|
| +
|
| +TEST_F(TimerTest, MoveToNewTaskRunnerRepeating) {
|
| + std::vector<WebTaskRunner*> runOrder;
|
| +
|
| + scoped_refptr<scheduler::TaskQueue> taskRunner1(
|
| + m_platform.rendererScheduler()->NewTimerTaskRunner(
|
| + scheduler::TaskQueue::QueueType::TEST));
|
| + scheduler::WebTaskRunnerImpl webTaskRunner1(taskRunner1);
|
| + TaskObserver taskObserver1(&webTaskRunner1, &runOrder);
|
| + taskRunner1->AddTaskObserver(&taskObserver1);
|
| +
|
| + scoped_refptr<scheduler::TaskQueue> taskRunner2(
|
| + m_platform.rendererScheduler()->NewTimerTaskRunner(
|
| + scheduler::TaskQueue::QueueType::TEST));
|
| + scheduler::WebTaskRunnerImpl webTaskRunner2(taskRunner2);
|
| + TaskObserver taskObserver2(&webTaskRunner2, &runOrder);
|
| + taskRunner2->AddTaskObserver(&taskObserver2);
|
| +
|
| + TimerForTest<TimerTest> timer(&webTaskRunner1, this,
|
| + &TimerTest::countingTask);
|
| +
|
| + double startTime = monotonicallyIncreasingTime();
|
| +
|
| + timer.startRepeating(1, BLINK_FROM_HERE);
|
| +
|
| + m_platform.runForPeriodSeconds(2.5);
|
| +
|
| + timer.moveToNewTaskRunner(&webTaskRunner2);
|
| +
|
| + m_platform.runForPeriodSeconds(2);
|
| +
|
| + EXPECT_THAT(m_runTimes, ElementsAre(startTime + 1.0, startTime + 2.0,
|
| + startTime + 3.0, startTime + 4.0));
|
| +
|
| + EXPECT_THAT(runOrder, ElementsAre(&webTaskRunner1, &webTaskRunner1,
|
| + &webTaskRunner2, &webTaskRunner2));
|
| +
|
| + EXPECT_TRUE(taskRunner1->IsEmpty());
|
| + EXPECT_FALSE(taskRunner2->IsEmpty());
|
| +}
|
| +
|
| } // namespace
|
| } // namespace blink
|
|
|