OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "cc/resources/tile_task_worker_pool.h" | 5 #include "cc/resources/tile_task_worker_pool.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/cancelable_callback.h" | 10 #include "base/cancelable_callback.h" |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 : public testing::TestWithParam<TileTaskWorkerPoolType>, | 115 : public testing::TestWithParam<TileTaskWorkerPoolType>, |
116 public TileTaskRunnerClient { | 116 public TileTaskRunnerClient { |
117 public: | 117 public: |
118 struct RasterTaskResult { | 118 struct RasterTaskResult { |
119 unsigned id; | 119 unsigned id; |
120 bool canceled; | 120 bool canceled; |
121 }; | 121 }; |
122 | 122 |
123 typedef std::vector<scoped_refptr<RasterTask>> RasterTaskVector; | 123 typedef std::vector<scoped_refptr<RasterTask>> RasterTaskVector; |
124 | 124 |
125 enum NamedTaskSet { ALL, REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW }; | 125 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW, ALL }; |
126 | 126 |
127 TileTaskWorkerPoolTest() | 127 TileTaskWorkerPoolTest() |
128 : context_provider_(TestContextProvider::Create()), | 128 : context_provider_(TestContextProvider::Create()), |
129 all_tile_tasks_finished_( | 129 all_tile_tasks_finished_( |
130 base::MessageLoopProxy::current().get(), | 130 base::MessageLoopProxy::current().get(), |
131 base::Bind(&TileTaskWorkerPoolTest::AllTileTasksFinished, | 131 base::Bind(&TileTaskWorkerPoolTest::AllTileTasksFinished, |
132 base::Unretained(this))), | 132 base::Unretained(this))), |
133 timeout_seconds_(5), | 133 timeout_seconds_(5), |
134 timed_out_(false) {} | 134 timed_out_(false) {} |
135 | 135 |
(...skipping 18 matching lines...) Expand all Loading... |
154 staging_resource_pool_ = ResourcePool::Create(resource_provider_.get(), | 154 staging_resource_pool_ = ResourcePool::Create(resource_provider_.get(), |
155 GL_TEXTURE_2D, RGBA_8888); | 155 GL_TEXTURE_2D, RGBA_8888); |
156 tile_task_worker_pool_ = OneCopyTileTaskWorkerPool::Create( | 156 tile_task_worker_pool_ = OneCopyTileTaskWorkerPool::Create( |
157 base::MessageLoopProxy::current().get(), | 157 base::MessageLoopProxy::current().get(), |
158 TileTaskWorkerPool::GetTaskGraphRunner(), context_provider_.get(), | 158 TileTaskWorkerPool::GetTaskGraphRunner(), context_provider_.get(), |
159 resource_provider_.get(), staging_resource_pool_.get()); | 159 resource_provider_.get(), staging_resource_pool_.get()); |
160 break; | 160 break; |
161 case TILE_TASK_WORKER_POOL_TYPE_GPU: | 161 case TILE_TASK_WORKER_POOL_TYPE_GPU: |
162 Create3dOutputSurfaceAndResourceProvider(); | 162 Create3dOutputSurfaceAndResourceProvider(); |
163 tile_task_worker_pool_ = GpuTileTaskWorkerPool::Create( | 163 tile_task_worker_pool_ = GpuTileTaskWorkerPool::Create( |
164 base::MessageLoopProxy::current().get(), context_provider_.get(), | 164 base::MessageLoopProxy::current().get(), |
165 resource_provider_.get(), false); | 165 TileTaskWorkerPool::GetTaskGraphRunner()); |
166 break; | 166 break; |
167 case TILE_TASK_WORKER_POOL_TYPE_BITMAP: | 167 case TILE_TASK_WORKER_POOL_TYPE_BITMAP: |
168 CreateSoftwareOutputSurfaceAndResourceProvider(); | 168 CreateSoftwareOutputSurfaceAndResourceProvider(); |
169 tile_task_worker_pool_ = BitmapTileTaskWorkerPool::Create( | 169 tile_task_worker_pool_ = BitmapTileTaskWorkerPool::Create( |
170 base::MessageLoopProxy::current().get(), | 170 base::MessageLoopProxy::current().get(), |
171 TileTaskWorkerPool::GetTaskGraphRunner(), resource_provider_.get()); | 171 TileTaskWorkerPool::GetTaskGraphRunner(), resource_provider_.get()); |
172 break; | 172 break; |
173 } | 173 } |
174 | 174 |
175 DCHECK(tile_task_worker_pool_); | 175 DCHECK(tile_task_worker_pool_); |
176 tile_task_worker_pool_->AsTileTaskRunner()->SetClient(this); | 176 tile_task_worker_pool_->AsTileTaskRunner()->SetClient(this); |
177 } | 177 } |
178 | 178 |
179 void TearDown() override { | 179 void TearDown() override { |
180 tile_task_worker_pool_->AsTileTaskRunner()->Shutdown(); | 180 tile_task_worker_pool_->AsTileTaskRunner()->Shutdown(); |
181 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); | 181 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); |
182 } | 182 } |
183 | 183 |
184 void AllTileTasksFinished() { | 184 void AllTileTasksFinished() { |
185 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); | 185 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); |
186 base::MessageLoop::current()->Quit(); | 186 base::MessageLoop::current()->Quit(); |
187 } | 187 } |
188 | 188 |
189 // Overriden from TileTaskWorkerPoolClient: | 189 // Overriden from TileTaskWorkerPoolClient: |
190 void DidFinishRunningTileTasks(TaskSet task_set) override { | 190 void DidFinishRunningTileTasks(TaskSet task_set) override { |
191 if (task_set == ALL) | 191 EXPECT_FALSE(completed_task_sets_[task_set]); |
| 192 completed_task_sets_[task_set] = true; |
| 193 if (task_set == ALL) { |
| 194 EXPECT_TRUE((~completed_task_sets_).none()); |
192 all_tile_tasks_finished_.Schedule(); | 195 all_tile_tasks_finished_.Schedule(); |
| 196 } |
193 } | 197 } |
194 | 198 |
195 TaskSetCollection TasksThatShouldBeForcedToComplete() const override { | 199 TaskSetCollection TasksThatShouldBeForcedToComplete() const override { |
196 return TaskSetCollection(); | 200 return TaskSetCollection(); |
197 } | 201 } |
198 | 202 |
199 void RunMessageLoopUntilAllTasksHaveCompleted() { | 203 void RunMessageLoopUntilAllTasksHaveCompleted() { |
200 if (timeout_seconds_) { | 204 if (timeout_seconds_) { |
201 timeout_.Reset(base::Bind(&TileTaskWorkerPoolTest::OnTimeout, | 205 timeout_.Reset(base::Bind(&TileTaskWorkerPoolTest::OnTimeout, |
202 base::Unretained(this))); | 206 base::Unretained(this))); |
203 base::MessageLoopProxy::current()->PostDelayedTask( | 207 base::MessageLoopProxy::current()->PostDelayedTask( |
204 FROM_HERE, timeout_.callback(), | 208 FROM_HERE, timeout_.callback(), |
205 base::TimeDelta::FromSeconds(timeout_seconds_)); | 209 base::TimeDelta::FromSeconds(timeout_seconds_)); |
206 } | 210 } |
207 | 211 |
208 base::MessageLoop::current()->Run(); | 212 base::MessageLoop::current()->Run(); |
209 | 213 |
210 timeout_.Cancel(); | 214 timeout_.Cancel(); |
211 | 215 |
212 ASSERT_FALSE(timed_out_) << "Test timed out"; | 216 ASSERT_FALSE(timed_out_) << "Test timed out"; |
213 } | 217 } |
214 | 218 |
215 void ScheduleTasks() { | 219 void ScheduleTasks() { |
216 TileTaskQueue queue; | 220 TileTaskQueue queue; |
217 | 221 |
218 for (RasterTaskVector::const_iterator it = tasks_.begin(); | 222 for (RasterTaskVector::const_iterator it = tasks_.begin(); |
219 it != tasks_.end(); ++it) { | 223 it != tasks_.end(); ++it) { |
220 TaskSetCollection task_sets; | 224 TaskSetCollection task_sets; |
| 225 task_sets[REQUIRED_FOR_ACTIVATION] = true; |
| 226 task_sets[REQUIRED_FOR_DRAW] = true; |
221 task_sets[ALL] = true; | 227 task_sets[ALL] = true; |
222 queue.items.push_back(TileTaskQueue::Item(it->get(), task_sets)); | 228 queue.items.push_back(TileTaskQueue::Item(it->get(), task_sets)); |
223 } | 229 } |
224 | 230 |
| 231 completed_task_sets_.reset(); |
225 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&queue); | 232 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&queue); |
226 } | 233 } |
227 | 234 |
228 void AppendTask(unsigned id, const gfx::Size& size) { | 235 void AppendTask(unsigned id, const gfx::Size& size) { |
229 scoped_ptr<ScopedResource> resource( | 236 scoped_ptr<ScopedResource> resource( |
230 ScopedResource::Create(resource_provider_.get())); | 237 ScopedResource::Create(resource_provider_.get())); |
231 resource->Allocate(size, ResourceProvider::TextureHintImmutable, RGBA_8888); | 238 resource->Allocate(size, ResourceProvider::TextureHintImmutable, RGBA_8888); |
232 const Resource* const_resource = resource.get(); | 239 const Resource* const_resource = resource.get(); |
233 | 240 |
234 ImageDecodeTask::Vector empty; | 241 ImageDecodeTask::Vector empty; |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 scoped_ptr<ResourcePool> staging_resource_pool_; | 311 scoped_ptr<ResourcePool> staging_resource_pool_; |
305 scoped_ptr<TileTaskWorkerPool> tile_task_worker_pool_; | 312 scoped_ptr<TileTaskWorkerPool> tile_task_worker_pool_; |
306 TestGpuMemoryBufferManager gpu_memory_buffer_manager_; | 313 TestGpuMemoryBufferManager gpu_memory_buffer_manager_; |
307 TestSharedBitmapManager shared_bitmap_manager_; | 314 TestSharedBitmapManager shared_bitmap_manager_; |
308 base::CancelableClosure timeout_; | 315 base::CancelableClosure timeout_; |
309 UniqueNotifier all_tile_tasks_finished_; | 316 UniqueNotifier all_tile_tasks_finished_; |
310 int timeout_seconds_; | 317 int timeout_seconds_; |
311 bool timed_out_; | 318 bool timed_out_; |
312 RasterTaskVector tasks_; | 319 RasterTaskVector tasks_; |
313 std::vector<RasterTaskResult> completed_tasks_; | 320 std::vector<RasterTaskResult> completed_tasks_; |
| 321 TaskSetCollection completed_task_sets_; |
314 }; | 322 }; |
315 | 323 |
316 TEST_P(TileTaskWorkerPoolTest, Basic) { | 324 TEST_P(TileTaskWorkerPoolTest, Basic) { |
317 AppendTask(0u); | 325 AppendTask(0u); |
318 AppendTask(1u); | 326 AppendTask(1u); |
319 ScheduleTasks(); | 327 ScheduleTasks(); |
320 | 328 |
321 RunMessageLoopUntilAllTasksHaveCompleted(); | 329 RunMessageLoopUntilAllTasksHaveCompleted(); |
322 | 330 |
323 ASSERT_EQ(2u, completed_tasks().size()); | 331 ASSERT_EQ(2u, completed_tasks().size()); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
389 TileTaskWorkerPoolTests, | 397 TileTaskWorkerPoolTests, |
390 TileTaskWorkerPoolTest, | 398 TileTaskWorkerPoolTest, |
391 ::testing::Values(TILE_TASK_WORKER_POOL_TYPE_PIXEL_BUFFER, | 399 ::testing::Values(TILE_TASK_WORKER_POOL_TYPE_PIXEL_BUFFER, |
392 TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY, | 400 TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY, |
393 TILE_TASK_WORKER_POOL_TYPE_ONE_COPY, | 401 TILE_TASK_WORKER_POOL_TYPE_ONE_COPY, |
394 TILE_TASK_WORKER_POOL_TYPE_GPU, | 402 TILE_TASK_WORKER_POOL_TYPE_GPU, |
395 TILE_TASK_WORKER_POOL_TYPE_BITMAP)); | 403 TILE_TASK_WORKER_POOL_TYPE_BITMAP)); |
396 | 404 |
397 } // namespace | 405 } // namespace |
398 } // namespace cc | 406 } // namespace cc |
OLD | NEW |