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 |