| 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 |