| Index: Source/platform/TimerTest.cpp
|
| diff --git a/Source/platform/TimerTest.cpp b/Source/platform/TimerTest.cpp
|
| index 74531768c39a777515d63a32fa32353913b08ce4..912d1706c44439ecac46b1ede1d40506f63656c4 100644
|
| --- a/Source/platform/TimerTest.cpp
|
| +++ b/Source/platform/TimerTest.cpp
|
| @@ -41,10 +41,10 @@
|
|
|
| class DelayedTask {
|
| public:
|
| - DelayedTask(WebThread::Task* task, double delaySecs)
|
| + DelayedTask(WebThread::Task* task, long long delayMs)
|
| : m_task(adoptRef(new RefCountedTaskContainer(task)))
|
| - , m_runTimeSecs(monotonicallyIncreasingTime() + delaySecs)
|
| - , m_delaySecs(delaySecs) { }
|
| + , m_runTimeSecs(monotonicallyIncreasingTime() + 0.001 * static_cast<double>(delayMs))
|
| + , m_delayMs(delayMs) { }
|
|
|
| bool operator<(const DelayedTask& other) const
|
| {
|
| @@ -61,15 +61,15 @@
|
| return m_runTimeSecs;
|
| }
|
|
|
| - double delaySecs() const
|
| - {
|
| - return m_delaySecs;
|
| + long long delayMs() const
|
| + {
|
| + return m_delayMs;
|
| }
|
|
|
| private:
|
| RefPtr<RefCountedTaskContainer> m_task;
|
| double m_runTimeSecs;
|
| - double m_delaySecs;
|
| + long long m_delayMs;
|
| };
|
|
|
| class MockWebScheduler : public WebScheduler {
|
| @@ -103,9 +103,9 @@
|
| {
|
| }
|
|
|
| - void postTimerTask(const WebTraceLocation&, WebThread::Task* task, double delaySecs) override
|
| - {
|
| - m_timerTasks.push(DelayedTask(task, delaySecs));
|
| + void postTimerTask(const WebTraceLocation&, WebThread::Task* task, long long delayMs) override
|
| + {
|
| + m_timerTasks.push(DelayedTask(task, delayMs));
|
| }
|
|
|
| void postTimerTaskAt(const WebTraceLocation&, WebThread::Task* task, double monotonicTime) override
|
| @@ -135,23 +135,15 @@
|
| }
|
| }
|
|
|
| - void runPendingTasks()
|
| - {
|
| - while (!m_timerTasks.empty() && m_timerTasks.top().runTimeSecs() <= gCurrentTimeSecs) {
|
| - m_timerTasks.top().run();
|
| - m_timerTasks.pop();
|
| - }
|
| - }
|
| -
|
| bool hasOneTimerTask() const
|
| {
|
| return m_timerTasks.size() == 1;
|
| }
|
|
|
| - double nextTimerTaskDelaySecs() const
|
| + long nextTimerTaskDelayMillis() const
|
| {
|
| ASSERT(hasOneTimerTask());
|
| - return m_timerTasks.top().delaySecs();
|
| + return m_timerTasks.top().delayMs();
|
| }
|
|
|
| private:
|
| @@ -232,11 +224,6 @@
|
| mockScheduler()->runUntilIdle();
|
| }
|
|
|
| - void runPendingTasks()
|
| - {
|
| - mockScheduler()->runPendingTasks();
|
| - }
|
| -
|
| void runUntilIdleOrDeadlinePassed(double deadline)
|
| {
|
| mockScheduler()->runUntilIdleOrDeadlinePassed(deadline);
|
| @@ -247,9 +234,9 @@
|
| return mockScheduler()->hasOneTimerTask();
|
| }
|
|
|
| - double nextTimerTaskDelaySecs() const
|
| - {
|
| - return mockScheduler()->nextTimerTaskDelaySecs();
|
| + long nextTimerTaskDelayMillis() const
|
| + {
|
| + return mockScheduler()->nextTimerTaskDelayMillis();
|
| }
|
|
|
| private:
|
| @@ -285,11 +272,6 @@
|
| m_runTimes.push_back(monotonicallyIncreasingTime());
|
| }
|
|
|
| - void recordNextFireTimeTask(Timer<TimerTest>* timer)
|
| - {
|
| - m_nextFireTimes.push_back(monotonicallyIncreasingTime() + timer->nextFireInterval());
|
| - }
|
| -
|
| void advanceTimeBy(double timeSecs)
|
| {
|
| gCurrentTimeSecs += timeSecs;
|
| @@ -300,11 +282,6 @@
|
| m_platform->runUntilIdle();
|
| }
|
|
|
| - void runPendingTasks()
|
| - {
|
| - m_platform->runPendingTasks();
|
| - }
|
| -
|
| void runUntilIdleOrDeadlinePassed(double deadline)
|
| {
|
| m_platform->runUntilIdleOrDeadlinePassed(deadline);
|
| @@ -315,15 +292,14 @@
|
| return m_platform->hasOneTimerTask();
|
| }
|
|
|
| - double nextTimerTaskDelaySecs() const
|
| - {
|
| - return m_platform->nextTimerTaskDelaySecs();
|
| + long nextTimerTaskDelayMillis() const
|
| + {
|
| + return m_platform->nextTimerTaskDelayMillis();
|
| }
|
|
|
| protected:
|
| double m_startTime;
|
| std::vector<double> m_runTimes;
|
| - std::vector<double> m_nextFireTimes;
|
|
|
| private:
|
| OwnPtr<TimerTestPlatform> m_platform;
|
| @@ -336,7 +312,7 @@
|
| timer.startOneShot(0, FROM_HERE);
|
|
|
| ASSERT(hasOneTimerTask());
|
| - EXPECT_EQ(0.0, nextTimerTaskDelaySecs());
|
| + EXPECT_EQ(0ll, nextTimerTaskDelayMillis());
|
|
|
| runUntilIdle();
|
| EXPECT_THAT(m_runTimes, ElementsAre(m_startTime));
|
| @@ -348,7 +324,7 @@
|
| timer.startOneShot(0, FROM_HERE);
|
|
|
| ASSERT(hasOneTimerTask());
|
| - EXPECT_EQ(0.0, nextTimerTaskDelaySecs());
|
| + EXPECT_EQ(0ll, nextTimerTaskDelayMillis());
|
|
|
| timer.stop();
|
|
|
| @@ -362,7 +338,7 @@
|
| timer.startOneShot(0, FROM_HERE);
|
|
|
| ASSERT(hasOneTimerTask());
|
| - EXPECT_EQ(0.0, nextTimerTaskDelaySecs());
|
| + EXPECT_EQ(0ll, nextTimerTaskDelayMillis());
|
|
|
| timer.stop();
|
|
|
| @@ -372,7 +348,7 @@
|
| timer.startOneShot(0, FROM_HERE);
|
|
|
| ASSERT(hasOneTimerTask());
|
| - EXPECT_EQ(0.0, nextTimerTaskDelaySecs());
|
| + EXPECT_EQ(0ll, nextTimerTaskDelayMillis());
|
|
|
| runUntilIdle();
|
| EXPECT_THAT(m_runTimes, ElementsAre(m_startTime));
|
| @@ -384,7 +360,7 @@
|
| timer.startOneShot(0, FROM_HERE);
|
|
|
| ASSERT(hasOneTimerTask());
|
| - EXPECT_EQ(0.0, nextTimerTaskDelaySecs());
|
| + EXPECT_EQ(0ll, nextTimerTaskDelayMillis());
|
|
|
| runUntilIdle();
|
| EXPECT_THAT(m_runTimes, ElementsAre(m_startTime));
|
| @@ -392,7 +368,7 @@
|
| timer.startOneShot(0, FROM_HERE);
|
|
|
| ASSERT(hasOneTimerTask());
|
| - EXPECT_EQ(0.0, nextTimerTaskDelaySecs());
|
| + EXPECT_EQ(0ll, nextTimerTaskDelayMillis());
|
|
|
| runUntilIdle();
|
| EXPECT_THAT(m_runTimes, ElementsAre(m_startTime, m_startTime));
|
| @@ -404,7 +380,7 @@
|
| timer.startOneShot(10.0, FROM_HERE);
|
|
|
| ASSERT(hasOneTimerTask());
|
| - EXPECT_EQ(10.0, nextTimerTaskDelaySecs());
|
| + EXPECT_EQ(10000ll, nextTimerTaskDelayMillis());
|
|
|
| runUntilIdle();
|
| EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 10.0));
|
| @@ -416,7 +392,7 @@
|
| timer.startOneShot(10, FROM_HERE);
|
|
|
| ASSERT(hasOneTimerTask());
|
| - EXPECT_EQ(10.0, nextTimerTaskDelaySecs());
|
| + EXPECT_EQ(10000ll, nextTimerTaskDelayMillis());
|
|
|
| timer.stop();
|
|
|
| @@ -430,7 +406,7 @@
|
| timer.startOneShot(10, FROM_HERE);
|
|
|
| ASSERT(hasOneTimerTask());
|
| - EXPECT_EQ(10.0, nextTimerTaskDelaySecs());
|
| + EXPECT_EQ(10000ll, nextTimerTaskDelayMillis());
|
|
|
| timer.stop();
|
|
|
| @@ -441,7 +417,7 @@
|
| timer.startOneShot(10, FROM_HERE);
|
|
|
| ASSERT(hasOneTimerTask());
|
| - EXPECT_EQ(10.0, nextTimerTaskDelaySecs());
|
| + EXPECT_EQ(10000ll, nextTimerTaskDelayMillis());
|
|
|
| runUntilIdle();
|
| EXPECT_THAT(m_runTimes, ElementsAre(secondPostTime + 10.0));
|
| @@ -453,7 +429,7 @@
|
| timer.startOneShot(10, FROM_HERE);
|
|
|
| ASSERT(hasOneTimerTask());
|
| - EXPECT_EQ(10.0, nextTimerTaskDelaySecs());
|
| + EXPECT_EQ(10000ll, nextTimerTaskDelayMillis());
|
|
|
| runUntilIdle();
|
| EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 10.0));
|
| @@ -461,7 +437,7 @@
|
| timer.startOneShot(20, FROM_HERE);
|
|
|
| ASSERT(hasOneTimerTask());
|
| - EXPECT_EQ(20.0, nextTimerTaskDelaySecs());
|
| + EXPECT_EQ(20000ll, nextTimerTaskDelayMillis());
|
|
|
| runUntilIdle();
|
| EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 10.0, m_startTime + 30.0));
|
| @@ -474,7 +450,7 @@
|
| timer.startOneShot(10, FROM_HERE);
|
|
|
| ASSERT(hasOneTimerTask());
|
| - EXPECT_EQ(10.0, nextTimerTaskDelaySecs());
|
| + EXPECT_EQ(10000ll, nextTimerTaskDelayMillis());
|
|
|
| runUntilIdle();
|
| EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 10.0));
|
| @@ -506,7 +482,7 @@
|
| timer.startRepeating(1.0, FROM_HERE);
|
|
|
| ASSERT(hasOneTimerTask());
|
| - EXPECT_EQ(1.0, nextTimerTaskDelaySecs());
|
| + EXPECT_EQ(1000ll, nextTimerTaskDelayMillis());
|
|
|
| runUntilIdleOrDeadlinePassed(m_startTime + 5.5);
|
| EXPECT_THAT(m_runTimes, ElementsAre(
|
| @@ -519,7 +495,7 @@
|
| timer.startRepeating(1.0, FROM_HERE);
|
|
|
| ASSERT(hasOneTimerTask());
|
| - EXPECT_EQ(1.0, nextTimerTaskDelaySecs());
|
| + EXPECT_EQ(1000ll, nextTimerTaskDelayMillis());
|
|
|
| runUntilIdleOrDeadlinePassed(m_startTime + 2.5);
|
| EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 1.0, m_startTime + 2.0));
|
| @@ -536,7 +512,7 @@
|
| timer.startRepeating(1.0, FROM_HERE);
|
|
|
| ASSERT(hasOneTimerTask());
|
| - EXPECT_EQ(1.0, nextTimerTaskDelaySecs());
|
| + EXPECT_EQ(1000ll, nextTimerTaskDelayMillis());
|
|
|
| runUntilIdleOrDeadlinePassed(m_startTime + 2.5);
|
| EXPECT_THAT(m_runTimes, ElementsAre(m_startTime + 1.0, m_startTime + 2.0));
|
| @@ -760,42 +736,6 @@
|
| EXPECT_FLOAT_EQ(m_startTime, timer.lastFireTime());
|
| }
|
|
|
| -TEST_F(TimerTest, RepeatingTimerDoesNotDrift)
|
| -{
|
| - Timer<TimerTest> timer(this, &TimerTest::recordNextFireTimeTask);
|
| - timer.startRepeating(2.0, FROM_HERE);
|
| -
|
| - ASSERT(hasOneTimerTask());
|
| - recordNextFireTimeTask(&timer); // Scheduled to run at m_startTime + 2.0
|
| -
|
| - advanceTimeBy(2.0);
|
| - runPendingTasks(); // Scheduled to run at m_startTime + 4.0
|
| -
|
| - advanceTimeBy(2.1);
|
| - runPendingTasks(); // Scheduled to run at m_startTime + 6.0
|
| -
|
| - advanceTimeBy(2.9);
|
| - runPendingTasks(); // Scheduled to run at m_startTime + 8.0
|
| -
|
| - advanceTimeBy(3.1);
|
| - runPendingTasks(); // Scheduled to run at m_startTime + 12.0 (skips a beat)
|
| -
|
| - advanceTimeBy(4.0);
|
| - runPendingTasks(); // Scheduled to run at m_startTime + 16.0 (skips a beat)
|
| -
|
| - advanceTimeBy(10.0); // Scheduled to run at m_startTime + 22.0 (skips a few beats)
|
| - runPendingTasks();
|
| -
|
| - runUntilIdleOrDeadlinePassed(m_startTime + 5.5);
|
| - EXPECT_THAT(m_nextFireTimes, ElementsAre(
|
| - m_startTime + 2.0,
|
| - m_startTime + 4.0,
|
| - m_startTime + 6.0,
|
| - m_startTime + 8.0,
|
| - m_startTime + 12.0,
|
| - m_startTime + 16.0,
|
| - m_startTime + 26.0));
|
| -}
|
|
|
| } // namespace
|
| } // namespace blink
|
|
|