| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "config.h" | |
| 6 #include "platform/scheduler/Scheduler.h" | |
| 7 | |
| 8 #include "platform/RuntimeEnabledFeatures.h" | |
| 9 #include "platform/TestingPlatformSupport.h" | |
| 10 #include "public/platform/Platform.h" | |
| 11 #include "public/platform/WebScheduler.h" | |
| 12 #include "public/platform/WebTraceLocation.h" | |
| 13 | |
| 14 #include <gmock/gmock.h> | |
| 15 #include <gtest/gtest.h> | |
| 16 #include <string> | |
| 17 #include <vector> | |
| 18 | |
| 19 using blink::Scheduler; | |
| 20 using blink::WebScheduler; | |
| 21 using blink::WebTraceLocation; | |
| 22 | |
| 23 namespace { | |
| 24 | |
| 25 class SchedulerForTest : public Scheduler { | |
| 26 public: | |
| 27 SchedulerForTest(WebScheduler* webScheduler): | |
| 28 Scheduler(webScheduler) | |
| 29 { | |
| 30 } | |
| 31 }; | |
| 32 | |
| 33 class WebSchedulerForTest : public WebScheduler { | |
| 34 public: | |
| 35 WebSchedulerForTest() | |
| 36 : m_shouldYieldForHighPriorityWork(false) | |
| 37 { | |
| 38 } | |
| 39 | |
| 40 // WebScheduler implementation: | |
| 41 bool shouldYieldForHighPriorityWork() override | |
| 42 { | |
| 43 return m_shouldYieldForHighPriorityWork; | |
| 44 } | |
| 45 | |
| 46 void postIdleTask(const WebTraceLocation&, blink::WebThread::IdleTask* task)
override | |
| 47 { | |
| 48 m_latestIdleTask = adoptPtr(task); | |
| 49 } | |
| 50 | |
| 51 void setShouldYieldForHighPriorityWork(bool shouldYieldForHighPriorityWork) | |
| 52 { | |
| 53 m_shouldYieldForHighPriorityWork = shouldYieldForHighPriorityWork; | |
| 54 } | |
| 55 | |
| 56 void runLatestIdleTask(double deadlineSeconds) | |
| 57 { | |
| 58 m_latestIdleTask->run(deadlineSeconds); | |
| 59 m_latestIdleTask.clear(); | |
| 60 } | |
| 61 | |
| 62 protected: | |
| 63 bool m_shouldYieldForHighPriorityWork; | |
| 64 | |
| 65 OwnPtr<blink::WebThread::IdleTask> m_latestIdleTask; | |
| 66 }; | |
| 67 | |
| 68 class SchedulerTest : public testing::Test { | |
| 69 public: | |
| 70 SchedulerTest() | |
| 71 { | |
| 72 blink::RuntimeEnabledFeatures::setBlinkSchedulerEnabled(true); | |
| 73 m_webScheduler = adoptPtr(new WebSchedulerForTest()); | |
| 74 m_scheduler = adoptPtr(new SchedulerForTest(m_webScheduler.get())); | |
| 75 } | |
| 76 | |
| 77 protected: | |
| 78 OwnPtr<WebSchedulerForTest> m_webScheduler; | |
| 79 OwnPtr<SchedulerForTest> m_scheduler; | |
| 80 }; | |
| 81 | |
| 82 TEST_F(SchedulerTest, TestShouldYield) | |
| 83 { | |
| 84 EXPECT_FALSE(m_scheduler->shouldYieldForHighPriorityWork()); | |
| 85 m_webScheduler->setShouldYieldForHighPriorityWork(true); | |
| 86 EXPECT_TRUE(m_scheduler->shouldYieldForHighPriorityWork()); | |
| 87 } | |
| 88 | |
| 89 void idleTestTask(double expectedDeadline, double deadlineSeconds) | |
| 90 { | |
| 91 EXPECT_EQ(expectedDeadline, deadlineSeconds); | |
| 92 } | |
| 93 | |
| 94 TEST_F(SchedulerTest, TestIdleTasks) | |
| 95 { | |
| 96 double deadline = 1.1; | |
| 97 m_scheduler->postIdleTask(FROM_HERE, WTF::bind<double>(&idleTestTask, deadli
ne)); | |
| 98 m_webScheduler->runLatestIdleTask(deadline); | |
| 99 } | |
| 100 | |
| 101 } // namespace | |
| OLD | NEW |