Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(489)

Unified Diff: third_party/WebKit/Source/platform/TimerTest.cpp

Issue 2556053004: [blink] Support moving timers between WebTaskRunners (Closed)
Patch Set: Address nits Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/platform/Timer.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « third_party/WebKit/Source/platform/Timer.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698