OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "config.h" | 5 #include "config.h" |
6 #include "platform/scheduler/Scheduler.h" | 6 #include "platform/scheduler/Scheduler.h" |
7 | 7 |
8 #include "platform/TestingPlatformSupport.h" | 8 #include "platform/TestingPlatformSupport.h" |
9 #include "platform/TraceLocation.h" | 9 #include "platform/TraceLocation.h" |
10 #include "public/platform/Platform.h" | 10 #include "public/platform/Platform.h" |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
69 }; | 69 }; |
70 | 70 |
71 class SchedulerTestingPlatformSupport : blink::TestingPlatformSupport { | 71 class SchedulerTestingPlatformSupport : blink::TestingPlatformSupport { |
72 public: | 72 public: |
73 SchedulerTestingPlatformSupport() | 73 SchedulerTestingPlatformSupport() |
74 : TestingPlatformSupport(TestingPlatformSupport::Config()) | 74 : TestingPlatformSupport(TestingPlatformSupport::Config()) |
75 , m_sharedTimerFunction(nullptr) | 75 , m_sharedTimerFunction(nullptr) |
76 , m_sharedTimerRunning(false) | 76 , m_sharedTimerRunning(false) |
77 , m_sharedTimerFireInterval(0) | 77 , m_sharedTimerFireInterval(0) |
78 { | 78 { |
79 WTF::setMonotonicallyIncreasingTimeFunction(getDebugTime); | |
80 } | |
81 | |
82 virtual ~SchedulerTestingPlatformSupport() | |
83 { | |
84 WTF::setMonotonicallyIncreasingTimeFunction(0); | |
79 } | 85 } |
80 | 86 |
81 // blink::Platform implementation. | 87 // blink::Platform implementation. |
82 virtual blink::WebThread* currentThread() OVERRIDE | 88 virtual blink::WebThread* currentThread() OVERRIDE |
83 { | 89 { |
84 return &m_mainThread; | 90 return &m_mainThread; |
85 } | 91 } |
86 | 92 |
87 virtual void setSharedTimerFiredFunction(SharedTimerFunction timerFunction) OVERRIDE | 93 virtual void setSharedTimerFiredFunction(SharedTimerFunction timerFunction) OVERRIDE |
88 { | 94 { |
89 m_sharedTimerFunction = timerFunction; | 95 m_sharedTimerFunction = timerFunction; |
90 } | 96 } |
91 | 97 |
98 virtual double monotonicallyIncreasingTime() OVERRIDE | |
99 { | |
100 return s_debugTime; | |
101 } | |
102 | |
92 virtual void setSharedTimerFireInterval(double) | 103 virtual void setSharedTimerFireInterval(double) |
93 { | 104 { |
94 m_sharedTimerFireInterval = 0; | 105 m_sharedTimerFireInterval = 0; |
95 m_sharedTimerRunning = true; | 106 m_sharedTimerRunning = true; |
96 } | 107 } |
97 | 108 |
98 virtual void stopSharedTimer() | 109 virtual void stopSharedTimer() |
99 { | 110 { |
100 m_sharedTimerRunning = false; | 111 m_sharedTimerRunning = false; |
101 } | 112 } |
(...skipping 16 matching lines...) Expand all Loading... | |
118 void triggerSharedTimer() | 129 void triggerSharedTimer() |
119 { | 130 { |
120 m_sharedTimerFunction(); | 131 m_sharedTimerFunction(); |
121 } | 132 } |
122 | 133 |
123 size_t numPendingMainThreadTasks() const | 134 size_t numPendingMainThreadTasks() const |
124 { | 135 { |
125 return m_mainThread.numPendingMainThreadTasks(); | 136 return m_mainThread.numPendingMainThreadTasks(); |
126 } | 137 } |
127 | 138 |
139 static void setDebugTime(double time) | |
140 { | |
141 s_debugTime = time; | |
142 } | |
143 | |
128 private: | 144 private: |
145 static double getDebugTime(void) | |
eseidel
2014/09/10 16:09:01
Atypical to have "get" as a method prefix in blink
| |
146 { | |
147 return s_debugTime; | |
148 } | |
149 | |
129 TestMainThread m_mainThread; | 150 TestMainThread m_mainThread; |
130 SharedTimerFunction m_sharedTimerFunction; | 151 SharedTimerFunction m_sharedTimerFunction; |
131 bool m_sharedTimerRunning; | 152 bool m_sharedTimerRunning; |
132 double m_sharedTimerFireInterval; | 153 double m_sharedTimerFireInterval; |
154 | |
155 static double s_debugTime; | |
133 }; | 156 }; |
134 | 157 |
158 double SchedulerTestingPlatformSupport::s_debugTime = 0; | |
159 | |
135 class SchedulerTest : public testing::Test { | 160 class SchedulerTest : public testing::Test { |
136 public: | 161 public: |
137 SchedulerTest() | 162 SchedulerTest() |
138 : m_reentrantCount(0) | 163 : m_reentrantCount(0) |
139 , m_maxRecursion(4) | 164 , m_maxRecursion(4) |
140 { | 165 { |
141 Scheduler::initializeOnMainThread(); | 166 Scheduler::initializeOnMainThread(); |
142 m_scheduler = Scheduler::shared(); | 167 m_scheduler = Scheduler::shared(); |
143 } | 168 } |
144 | 169 |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
392 m_scheduler->setSharedTimerFireInterval(0); | 417 m_scheduler->setSharedTimerFireInterval(0); |
393 m_platformSupport.triggerSharedTimer(); | 418 m_platformSupport.triggerSharedTimer(); |
394 | 419 |
395 EXPECT_EQ(1, s_dummyTaskCount); | 420 EXPECT_EQ(1, s_dummyTaskCount); |
396 | 421 |
397 // Clean up. | 422 // Clean up. |
398 m_scheduler->stopSharedTimer(); | 423 m_scheduler->stopSharedTimer(); |
399 m_scheduler->setSharedTimerFiredFunction(nullptr); | 424 m_scheduler->setSharedTimerFiredFunction(nullptr); |
400 } | 425 } |
401 | 426 |
427 TEST_F(SchedulerTest, TestInputEventTriggersShouldYield) | |
428 { | |
429 ASSERT_FALSE(m_scheduler->shouldYieldForHighPriorityWork()); | |
430 m_scheduler->postInputTask(FROM_HERE, WTF::bind(&dummyTask)); | |
431 | |
432 EXPECT_TRUE(m_scheduler->shouldYieldForHighPriorityWork()); | |
433 } | |
434 | |
435 TEST_F(SchedulerTest, TestCompositorEventDoesNotTriggerShouldYield_InNormalMode) | |
436 { | |
437 ASSERT_FALSE(m_scheduler->shouldYieldForHighPriorityWork()); | |
438 m_scheduler->postCompositorTask(FROM_HERE, WTF::bind(&dummyTask)); | |
439 | |
440 EXPECT_FALSE(m_scheduler->shouldYieldForHighPriorityWork()); | |
441 } | |
442 | |
443 TEST_F(SchedulerTest, TestInputEventTriggersLowLatencyMode) | |
444 { | |
445 // Fire off an input task to put us in low latency mode. | |
446 m_scheduler->postInputTask(FROM_HERE, WTF::bind(&dummyTask)); | |
447 runPendingTasks(); | |
448 | |
449 ASSERT_FALSE(m_scheduler->shouldYieldForHighPriorityWork()); | |
450 m_scheduler->postCompositorTask(FROM_HERE, WTF::bind(&dummyTask)); | |
451 | |
452 EXPECT_TRUE(m_scheduler->shouldYieldForHighPriorityWork()); | |
453 } | |
454 | |
455 TEST_F(SchedulerTest, TestCompositorEvent_LowLatencyModeDoesntLastLongWithoutInp utEvents) | |
456 { | |
457 SchedulerTestingPlatformSupport::setDebugTime(1000.0); | |
458 | |
459 // Fire off an input task to put us in low latency mode. | |
460 m_scheduler->postInputTask(FROM_HERE, WTF::bind(&dummyTask)); | |
461 SchedulerTestingPlatformSupport::setDebugTime(1000.5); | |
462 runPendingTasks(); | |
463 | |
464 ASSERT_FALSE(m_scheduler->shouldYieldForHighPriorityWork()); | |
465 m_scheduler->postCompositorTask(FROM_HERE, WTF::bind(&dummyTask)); | |
466 | |
467 EXPECT_FALSE(m_scheduler->shouldYieldForHighPriorityWork()); | |
468 } | |
469 | |
402 } // namespace | 470 } // namespace |
OLD | NEW |