| 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/RuntimeEnabledFeatures.h" | 8 #include "platform/RuntimeEnabledFeatures.h" |
| 9 #include "platform/TestingPlatformSupport.h" | 9 #include "platform/TestingPlatformSupport.h" |
| 10 #include "public/platform/Platform.h" | 10 #include "public/platform/Platform.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 SchedulerForTest(WebScheduler* webScheduler): | 27 SchedulerForTest(WebScheduler* webScheduler): |
| 28 Scheduler(webScheduler) | 28 Scheduler(webScheduler) |
| 29 { | 29 { |
| 30 } | 30 } |
| 31 }; | 31 }; |
| 32 | 32 |
| 33 class WebSchedulerForTest : public WebScheduler { | 33 class WebSchedulerForTest : public WebScheduler { |
| 34 public: | 34 public: |
| 35 WebSchedulerForTest() | 35 WebSchedulerForTest() |
| 36 : m_shouldYieldForHighPriorityWork(false) | 36 : m_shouldYieldForHighPriorityWork(false) |
| 37 , m_didShutdown(false) | |
| 38 { | 37 { |
| 39 } | 38 } |
| 40 | 39 |
| 41 // WebScheduler implementation: | 40 // WebScheduler implementation: |
| 42 void shutdown() override | |
| 43 { | |
| 44 m_didShutdown = true; | |
| 45 } | |
| 46 | |
| 47 bool shouldYieldForHighPriorityWork() override | 41 bool shouldYieldForHighPriorityWork() override |
| 48 { | 42 { |
| 49 return m_shouldYieldForHighPriorityWork; | 43 return m_shouldYieldForHighPriorityWork; |
| 50 } | 44 } |
| 51 | 45 |
| 52 void postIdleTask(const WebTraceLocation&, IdleTask* task) override | 46 void postIdleTask(const WebTraceLocation&, IdleTask* task) override |
| 53 { | 47 { |
| 54 m_latestIdleTask = adoptPtr(task); | 48 m_latestIdleTask = adoptPtr(task); |
| 55 } | 49 } |
| 56 | 50 |
| 57 bool didShutdown() const | |
| 58 { | |
| 59 return m_didShutdown; | |
| 60 } | |
| 61 | |
| 62 void setShouldYieldForHighPriorityWork(bool shouldYieldForHighPriorityWork) | 51 void setShouldYieldForHighPriorityWork(bool shouldYieldForHighPriorityWork) |
| 63 { | 52 { |
| 64 m_shouldYieldForHighPriorityWork = shouldYieldForHighPriorityWork; | 53 m_shouldYieldForHighPriorityWork = shouldYieldForHighPriorityWork; |
| 65 } | 54 } |
| 66 | 55 |
| 67 void runLatestIdleTask(double deadlineSeconds) | 56 void runLatestIdleTask(double deadlineSeconds) |
| 68 { | 57 { |
| 69 m_latestIdleTask->run(deadlineSeconds); | 58 m_latestIdleTask->run(deadlineSeconds); |
| 70 m_latestIdleTask.clear(); | 59 m_latestIdleTask.clear(); |
| 71 } | 60 } |
| 72 | 61 |
| 73 protected: | 62 protected: |
| 74 bool m_shouldYieldForHighPriorityWork; | 63 bool m_shouldYieldForHighPriorityWork; |
| 75 bool m_didShutdown; | |
| 76 | 64 |
| 77 OwnPtr<WebScheduler::IdleTask> m_latestIdleTask; | 65 OwnPtr<WebScheduler::IdleTask> m_latestIdleTask; |
| 78 }; | 66 }; |
| 79 | 67 |
| 80 class SchedulerTest : public testing::Test { | 68 class SchedulerTest : public testing::Test { |
| 81 public: | 69 public: |
| 82 SchedulerTest() | 70 SchedulerTest() |
| 83 { | 71 { |
| 84 blink::RuntimeEnabledFeatures::setBlinkSchedulerEnabled(true); | 72 blink::RuntimeEnabledFeatures::setBlinkSchedulerEnabled(true); |
| 85 m_webScheduler = adoptPtr(new WebSchedulerForTest()); | 73 m_webScheduler = adoptPtr(new WebSchedulerForTest()); |
| 86 m_scheduler = adoptPtr(new SchedulerForTest(m_webScheduler.get())); | 74 m_scheduler = adoptPtr(new SchedulerForTest(m_webScheduler.get())); |
| 87 } | 75 } |
| 88 | 76 |
| 89 protected: | 77 protected: |
| 90 OwnPtr<WebSchedulerForTest> m_webScheduler; | 78 OwnPtr<WebSchedulerForTest> m_webScheduler; |
| 91 OwnPtr<SchedulerForTest> m_scheduler; | 79 OwnPtr<SchedulerForTest> m_scheduler; |
| 92 }; | 80 }; |
| 93 | 81 |
| 94 TEST_F(SchedulerTest, TestShutdown) | |
| 95 { | |
| 96 EXPECT_FALSE(m_webScheduler->didShutdown()); | |
| 97 m_scheduler.clear(); | |
| 98 EXPECT_TRUE(m_webScheduler->didShutdown()); | |
| 99 } | |
| 100 | |
| 101 TEST_F(SchedulerTest, TestShouldYield) | 82 TEST_F(SchedulerTest, TestShouldYield) |
| 102 { | 83 { |
| 103 EXPECT_FALSE(m_scheduler->shouldYieldForHighPriorityWork()); | 84 EXPECT_FALSE(m_scheduler->shouldYieldForHighPriorityWork()); |
| 104 m_webScheduler->setShouldYieldForHighPriorityWork(true); | 85 m_webScheduler->setShouldYieldForHighPriorityWork(true); |
| 105 EXPECT_TRUE(m_scheduler->shouldYieldForHighPriorityWork()); | 86 EXPECT_TRUE(m_scheduler->shouldYieldForHighPriorityWork()); |
| 106 } | 87 } |
| 107 | 88 |
| 108 void idleTestTask(double expectedDeadline, double deadlineSeconds) | 89 void idleTestTask(double expectedDeadline, double deadlineSeconds) |
| 109 { | 90 { |
| 110 EXPECT_EQ(expectedDeadline, deadlineSeconds); | 91 EXPECT_EQ(expectedDeadline, deadlineSeconds); |
| 111 } | 92 } |
| 112 | 93 |
| 113 TEST_F(SchedulerTest, TestIdleTasks) | 94 TEST_F(SchedulerTest, TestIdleTasks) |
| 114 { | 95 { |
| 115 double deadline = 1.1; | 96 double deadline = 1.1; |
| 116 m_scheduler->postIdleTask(FROM_HERE, WTF::bind<double>(&idleTestTask, deadli
ne)); | 97 m_scheduler->postIdleTask(FROM_HERE, WTF::bind<double>(&idleTestTask, deadli
ne)); |
| 117 m_webScheduler->runLatestIdleTask(deadline); | 98 m_webScheduler->runLatestIdleTask(deadline); |
| 118 } | 99 } |
| 119 | 100 |
| 120 } // namespace | 101 } // namespace |
| OLD | NEW |