OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "platform/scheduler/renderer/webthread_impl_for_renderer_scheduler.h" | 5 #include "platform/scheduler/renderer/webthread_impl_for_renderer_scheduler.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "base/location.h" | 9 #include "base/location.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 21 matching lines...) Expand all Loading... |
32 MOCK_METHOD0(Run, void()); | 32 MOCK_METHOD0(Run, void()); |
33 }; | 33 }; |
34 | 34 |
35 class MockTaskObserver : public blink::WebThread::TaskObserver { | 35 class MockTaskObserver : public blink::WebThread::TaskObserver { |
36 public: | 36 public: |
37 MOCK_METHOD0(WillProcessTask, void()); | 37 MOCK_METHOD0(WillProcessTask, void()); |
38 MOCK_METHOD0(DidProcessTask, void()); | 38 MOCK_METHOD0(DidProcessTask, void()); |
39 }; | 39 }; |
40 } // namespace | 40 } // namespace |
41 | 41 |
42 class WebThreadImplForRendererSchedulerTest : public testing::Test { | 42 class WebThreadImplForRendererSchedulerTest : public ::testing::Test { |
43 public: | 43 public: |
44 WebThreadImplForRendererSchedulerTest() {} | 44 WebThreadImplForRendererSchedulerTest() {} |
45 | 45 |
46 void SetUp() override { | 46 void SetUp() override { |
47 clock_.reset(new base::SimpleTestTickClock()); | 47 clock_.reset(new base::SimpleTestTickClock()); |
48 clock_->Advance(base::TimeDelta::FromMicroseconds(5000)); | 48 clock_->Advance(base::TimeDelta::FromMicroseconds(5000)); |
49 scheduler_.reset(new RendererSchedulerImpl(SchedulerTqmDelegateImpl::Create( | 49 scheduler_.reset(new RendererSchedulerImpl(SchedulerTqmDelegateImpl::Create( |
50 &message_loop_, base::MakeUnique<TestTimeSource>(clock_.get())))); | 50 &message_loop_, base::MakeUnique<TestTimeSource>(clock_.get())))); |
51 default_task_runner_ = scheduler_->DefaultTaskQueue(); | 51 default_task_runner_ = scheduler_->DefaultTaskQueue(); |
52 thread_ = scheduler_->CreateMainThread(); | 52 thread_ = scheduler_->CreateMainThread(); |
(...skipping 17 matching lines...) Expand all Loading... |
70 | 70 |
71 DISALLOW_COPY_AND_ASSIGN(WebThreadImplForRendererSchedulerTest); | 71 DISALLOW_COPY_AND_ASSIGN(WebThreadImplForRendererSchedulerTest); |
72 }; | 72 }; |
73 | 73 |
74 TEST_F(WebThreadImplForRendererSchedulerTest, TestTaskObserver) { | 74 TEST_F(WebThreadImplForRendererSchedulerTest, TestTaskObserver) { |
75 MockTaskObserver observer; | 75 MockTaskObserver observer; |
76 thread_->AddTaskObserver(&observer); | 76 thread_->AddTaskObserver(&observer); |
77 MockTask task; | 77 MockTask task; |
78 | 78 |
79 { | 79 { |
80 testing::InSequence sequence; | 80 ::testing::InSequence sequence; |
81 EXPECT_CALL(observer, WillProcessTask()); | 81 EXPECT_CALL(observer, WillProcessTask()); |
82 EXPECT_CALL(task, Run()); | 82 EXPECT_CALL(task, Run()); |
83 EXPECT_CALL(observer, DidProcessTask()); | 83 EXPECT_CALL(observer, DidProcessTask()); |
84 } | 84 } |
85 | 85 |
86 thread_->GetWebTaskRunner()->PostTask( | 86 thread_->GetWebTaskRunner()->PostTask( |
87 BLINK_FROM_HERE, WTF::Bind(&MockTask::Run, WTF::Unretained(&task))); | 87 BLINK_FROM_HERE, WTF::Bind(&MockTask::Run, WTF::Unretained(&task))); |
88 base::RunLoop().RunUntilIdle(); | 88 base::RunLoop().RunUntilIdle(); |
89 thread_->RemoveTaskObserver(&observer); | 89 thread_->RemoveTaskObserver(&observer); |
90 } | 90 } |
91 | 91 |
92 TEST_F(WebThreadImplForRendererSchedulerTest, TestWorkBatchWithOneTask) { | 92 TEST_F(WebThreadImplForRendererSchedulerTest, TestWorkBatchWithOneTask) { |
93 MockTaskObserver observer; | 93 MockTaskObserver observer; |
94 thread_->AddTaskObserver(&observer); | 94 thread_->AddTaskObserver(&observer); |
95 MockTask task; | 95 MockTask task; |
96 | 96 |
97 SetWorkBatchSizeForTesting(kWorkBatchSize); | 97 SetWorkBatchSizeForTesting(kWorkBatchSize); |
98 { | 98 { |
99 testing::InSequence sequence; | 99 ::testing::InSequence sequence; |
100 EXPECT_CALL(observer, WillProcessTask()); | 100 EXPECT_CALL(observer, WillProcessTask()); |
101 EXPECT_CALL(task, Run()); | 101 EXPECT_CALL(task, Run()); |
102 EXPECT_CALL(observer, DidProcessTask()); | 102 EXPECT_CALL(observer, DidProcessTask()); |
103 } | 103 } |
104 | 104 |
105 thread_->GetWebTaskRunner()->PostTask( | 105 thread_->GetWebTaskRunner()->PostTask( |
106 BLINK_FROM_HERE, WTF::Bind(&MockTask::Run, WTF::Unretained(&task))); | 106 BLINK_FROM_HERE, WTF::Bind(&MockTask::Run, WTF::Unretained(&task))); |
107 base::RunLoop().RunUntilIdle(); | 107 base::RunLoop().RunUntilIdle(); |
108 thread_->RemoveTaskObserver(&observer); | 108 thread_->RemoveTaskObserver(&observer); |
109 } | 109 } |
110 | 110 |
111 TEST_F(WebThreadImplForRendererSchedulerTest, TestWorkBatchWithTwoTasks) { | 111 TEST_F(WebThreadImplForRendererSchedulerTest, TestWorkBatchWithTwoTasks) { |
112 MockTaskObserver observer; | 112 MockTaskObserver observer; |
113 thread_->AddTaskObserver(&observer); | 113 thread_->AddTaskObserver(&observer); |
114 MockTask task1; | 114 MockTask task1; |
115 MockTask task2; | 115 MockTask task2; |
116 | 116 |
117 SetWorkBatchSizeForTesting(kWorkBatchSize); | 117 SetWorkBatchSizeForTesting(kWorkBatchSize); |
118 { | 118 { |
119 testing::InSequence sequence; | 119 ::testing::InSequence sequence; |
120 EXPECT_CALL(observer, WillProcessTask()); | 120 EXPECT_CALL(observer, WillProcessTask()); |
121 EXPECT_CALL(task1, Run()); | 121 EXPECT_CALL(task1, Run()); |
122 EXPECT_CALL(observer, DidProcessTask()); | 122 EXPECT_CALL(observer, DidProcessTask()); |
123 | 123 |
124 EXPECT_CALL(observer, WillProcessTask()); | 124 EXPECT_CALL(observer, WillProcessTask()); |
125 EXPECT_CALL(task2, Run()); | 125 EXPECT_CALL(task2, Run()); |
126 EXPECT_CALL(observer, DidProcessTask()); | 126 EXPECT_CALL(observer, DidProcessTask()); |
127 } | 127 } |
128 | 128 |
129 thread_->GetWebTaskRunner()->PostTask( | 129 thread_->GetWebTaskRunner()->PostTask( |
130 BLINK_FROM_HERE, WTF::Bind(&MockTask::Run, WTF::Unretained(&task1))); | 130 BLINK_FROM_HERE, WTF::Bind(&MockTask::Run, WTF::Unretained(&task1))); |
131 thread_->GetWebTaskRunner()->PostTask( | 131 thread_->GetWebTaskRunner()->PostTask( |
132 BLINK_FROM_HERE, WTF::Bind(&MockTask::Run, WTF::Unretained(&task2))); | 132 BLINK_FROM_HERE, WTF::Bind(&MockTask::Run, WTF::Unretained(&task2))); |
133 base::RunLoop().RunUntilIdle(); | 133 base::RunLoop().RunUntilIdle(); |
134 thread_->RemoveTaskObserver(&observer); | 134 thread_->RemoveTaskObserver(&observer); |
135 } | 135 } |
136 | 136 |
137 TEST_F(WebThreadImplForRendererSchedulerTest, TestWorkBatchWithThreeTasks) { | 137 TEST_F(WebThreadImplForRendererSchedulerTest, TestWorkBatchWithThreeTasks) { |
138 MockTaskObserver observer; | 138 MockTaskObserver observer; |
139 thread_->AddTaskObserver(&observer); | 139 thread_->AddTaskObserver(&observer); |
140 MockTask task1; | 140 MockTask task1; |
141 MockTask task2; | 141 MockTask task2; |
142 MockTask task3; | 142 MockTask task3; |
143 | 143 |
144 SetWorkBatchSizeForTesting(kWorkBatchSize); | 144 SetWorkBatchSizeForTesting(kWorkBatchSize); |
145 { | 145 { |
146 testing::InSequence sequence; | 146 ::testing::InSequence sequence; |
147 EXPECT_CALL(observer, WillProcessTask()); | 147 EXPECT_CALL(observer, WillProcessTask()); |
148 EXPECT_CALL(task1, Run()); | 148 EXPECT_CALL(task1, Run()); |
149 EXPECT_CALL(observer, DidProcessTask()); | 149 EXPECT_CALL(observer, DidProcessTask()); |
150 | 150 |
151 EXPECT_CALL(observer, WillProcessTask()); | 151 EXPECT_CALL(observer, WillProcessTask()); |
152 EXPECT_CALL(task2, Run()); | 152 EXPECT_CALL(task2, Run()); |
153 EXPECT_CALL(observer, DidProcessTask()); | 153 EXPECT_CALL(observer, DidProcessTask()); |
154 | 154 |
155 EXPECT_CALL(observer, WillProcessTask()); | 155 EXPECT_CALL(observer, WillProcessTask()); |
156 EXPECT_CALL(task3, Run()); | 156 EXPECT_CALL(task3, Run()); |
(...skipping 19 matching lines...) Expand all Loading... |
176 WTF::Bind(&base::RunLoop::Quit, WTF::Unretained(&run_loop))); | 176 WTF::Bind(&base::RunLoop::Quit, WTF::Unretained(&run_loop))); |
177 message_loop->SetNestableTasksAllowed(true); | 177 message_loop->SetNestableTasksAllowed(true); |
178 run_loop.Run(); | 178 run_loop.Run(); |
179 } | 179 } |
180 | 180 |
181 TEST_F(WebThreadImplForRendererSchedulerTest, TestNestedRunLoop) { | 181 TEST_F(WebThreadImplForRendererSchedulerTest, TestNestedRunLoop) { |
182 MockTaskObserver observer; | 182 MockTaskObserver observer; |
183 thread_->AddTaskObserver(&observer); | 183 thread_->AddTaskObserver(&observer); |
184 | 184 |
185 { | 185 { |
186 testing::InSequence sequence; | 186 ::testing::InSequence sequence; |
187 | 187 |
188 // One callback for EnterRunLoop. | 188 // One callback for EnterRunLoop. |
189 EXPECT_CALL(observer, WillProcessTask()); | 189 EXPECT_CALL(observer, WillProcessTask()); |
190 | 190 |
191 // A pair for ExitRunLoopTask. | 191 // A pair for ExitRunLoopTask. |
192 EXPECT_CALL(observer, WillProcessTask()); | 192 EXPECT_CALL(observer, WillProcessTask()); |
193 EXPECT_CALL(observer, DidProcessTask()); | 193 EXPECT_CALL(observer, DidProcessTask()); |
194 | 194 |
195 // A final callback for EnterRunLoop. | 195 // A final callback for EnterRunLoop. |
196 EXPECT_CALL(observer, DidProcessTask()); | 196 EXPECT_CALL(observer, DidProcessTask()); |
197 } | 197 } |
198 | 198 |
199 message_loop_.task_runner()->PostTask( | 199 message_loop_.task_runner()->PostTask( |
200 FROM_HERE, base::Bind(&EnterRunLoop, base::Unretained(&message_loop_), | 200 FROM_HERE, base::Bind(&EnterRunLoop, base::Unretained(&message_loop_), |
201 base::Unretained(thread_.get()))); | 201 base::Unretained(thread_.get()))); |
202 base::RunLoop().RunUntilIdle(); | 202 base::RunLoop().RunUntilIdle(); |
203 thread_->RemoveTaskObserver(&observer); | 203 thread_->RemoveTaskObserver(&observer); |
204 } | 204 } |
205 | 205 |
206 } // namespace scheduler | 206 } // namespace scheduler |
207 } // namespace blink | 207 } // namespace blink |
OLD | NEW |