Chromium Code Reviews| 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/raster_worker_pool.h" | 5 #include "cc/resources/raster_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 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 100 struct RasterTaskResult { | 100 struct RasterTaskResult { |
| 101 unsigned id; | 101 unsigned id; |
| 102 bool canceled; | 102 bool canceled; |
| 103 }; | 103 }; |
| 104 | 104 |
| 105 typedef std::vector<scoped_refptr<RasterTask> > RasterTaskVector; | 105 typedef std::vector<scoped_refptr<RasterTask> > RasterTaskVector; |
| 106 | 106 |
| 107 RasterWorkerPoolTest() | 107 RasterWorkerPoolTest() |
| 108 : context_provider_(TestContextProvider::Create()), | 108 : context_provider_(TestContextProvider::Create()), |
| 109 timeout_seconds_(5), | 109 timeout_seconds_(5), |
| 110 throttle_bytes_(10000), | |
| 110 timed_out_(false) { | 111 timed_out_(false) { |
| 111 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass(); | 112 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass(); |
| 112 CHECK(output_surface_->BindToClient(&output_surface_client_)); | 113 CHECK(output_surface_->BindToClient(&output_surface_client_)); |
| 113 | 114 |
| 114 shared_bitmap_manager_.reset(new TestSharedBitmapManager()); | 115 shared_bitmap_manager_.reset(new TestSharedBitmapManager()); |
| 115 resource_provider_ = | 116 resource_provider_ = |
| 116 ResourceProvider::Create( | 117 ResourceProvider::Create( |
| 117 output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1, | 118 output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1, |
| 118 false).Pass(); | 119 false).Pass(); |
| 119 staging_resource_pool_ = ResourcePool::Create( | 120 staging_resource_pool_ = ResourcePool::Create( |
| 120 resource_provider_.get(), GL_TEXTURE_2D, RGBA_8888); | 121 resource_provider_.get(), GL_TEXTURE_2D, RGBA_8888); |
| 121 | 122 |
| 122 switch (GetParam()) { | 123 switch (GetParam()) { |
| 123 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER: | 124 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER: |
| 124 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( | 125 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( |
| 125 base::MessageLoopProxy::current().get(), | 126 base::MessageLoopProxy::current().get(), |
| 126 RasterWorkerPool::GetTaskGraphRunner(), | 127 RasterWorkerPool::GetTaskGraphRunner(), |
| 127 context_provider_.get(), | 128 context_provider_.get(), |
| 128 resource_provider_.get(), | 129 resource_provider_.get(), |
| 129 std::numeric_limits<size_t>::max()); | 130 throttle_bytes_); |
| 130 break; | 131 break; |
| 131 case RASTER_WORKER_POOL_TYPE_IMAGE: | 132 case RASTER_WORKER_POOL_TYPE_IMAGE: |
| 132 raster_worker_pool_ = ImageRasterWorkerPool::Create( | 133 raster_worker_pool_ = ImageRasterWorkerPool::Create( |
| 133 base::MessageLoopProxy::current().get(), | 134 base::MessageLoopProxy::current().get(), |
| 134 RasterWorkerPool::GetTaskGraphRunner(), | 135 RasterWorkerPool::GetTaskGraphRunner(), |
| 135 resource_provider_.get()); | 136 resource_provider_.get()); |
| 136 break; | 137 break; |
| 137 case RASTER_WORKER_POOL_TYPE_IMAGE_COPY: | 138 case RASTER_WORKER_POOL_TYPE_IMAGE_COPY: |
| 138 raster_worker_pool_ = ImageCopyRasterWorkerPool::Create( | 139 raster_worker_pool_ = ImageCopyRasterWorkerPool::Create( |
| 139 base::MessageLoopProxy::current().get(), | 140 base::MessageLoopProxy::current().get(), |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 196 RasterTaskQueue queue; | 197 RasterTaskQueue queue; |
| 197 | 198 |
| 198 for (RasterTaskVector::const_iterator it = tasks_.begin(); | 199 for (RasterTaskVector::const_iterator it = tasks_.begin(); |
| 199 it != tasks_.end(); | 200 it != tasks_.end(); |
| 200 ++it) | 201 ++it) |
| 201 queue.items.push_back(RasterTaskQueue::Item(*it, false)); | 202 queue.items.push_back(RasterTaskQueue::Item(*it, false)); |
| 202 | 203 |
| 203 raster_worker_pool_->AsRasterizer()->ScheduleTasks(&queue); | 204 raster_worker_pool_->AsRasterizer()->ScheduleTasks(&queue); |
| 204 } | 205 } |
| 205 | 206 |
| 206 void AppendTask(unsigned id) { | 207 void AppendTask(unsigned id, gfx::Size size) { |
|
reveman
2014/08/21 01:15:47
nit: const gfx::Size& size
enne (OOO)
2014/08/21 01:34:15
Done.
| |
| 207 const gfx::Size size(1, 1); | |
| 208 | |
| 209 scoped_ptr<ScopedResource> resource( | 208 scoped_ptr<ScopedResource> resource( |
| 210 ScopedResource::Create(resource_provider_.get())); | 209 ScopedResource::Create(resource_provider_.get())); |
| 211 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); | 210 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); |
| 212 const Resource* const_resource = resource.get(); | 211 const Resource* const_resource = resource.get(); |
| 213 | 212 |
| 214 ImageDecodeTask::Vector empty; | 213 ImageDecodeTask::Vector empty; |
| 215 tasks_.push_back(new TestRasterTaskImpl( | 214 tasks_.push_back(new TestRasterTaskImpl( |
| 216 const_resource, | 215 const_resource, |
| 217 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, | 216 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, |
| 218 base::Unretained(this), | 217 base::Unretained(this), |
| 219 base::Passed(&resource), | 218 base::Passed(&resource), |
| 220 id), | 219 id), |
| 221 &empty)); | 220 &empty)); |
| 222 } | 221 } |
| 223 | 222 |
| 223 void AppendTask(unsigned id) { AppendTask(id, gfx::Size(1, 1)); } | |
| 224 | |
| 224 void AppendBlockingTask(unsigned id, base::Lock* lock) { | 225 void AppendBlockingTask(unsigned id, base::Lock* lock) { |
| 225 const gfx::Size size(1, 1); | 226 const gfx::Size size(1, 1); |
| 226 | 227 |
| 227 scoped_ptr<ScopedResource> resource( | 228 scoped_ptr<ScopedResource> resource( |
| 228 ScopedResource::Create(resource_provider_.get())); | 229 ScopedResource::Create(resource_provider_.get())); |
| 229 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); | 230 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); |
| 230 const Resource* const_resource = resource.get(); | 231 const Resource* const_resource = resource.get(); |
| 231 | 232 |
| 232 ImageDecodeTask::Vector empty; | 233 ImageDecodeTask::Vector empty; |
| 233 tasks_.push_back(new BlockingTestRasterTaskImpl( | 234 tasks_.push_back(new BlockingTestRasterTaskImpl( |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 263 protected: | 264 protected: |
| 264 scoped_refptr<TestContextProvider> context_provider_; | 265 scoped_refptr<TestContextProvider> context_provider_; |
| 265 FakeOutputSurfaceClient output_surface_client_; | 266 FakeOutputSurfaceClient output_surface_client_; |
| 266 scoped_ptr<FakeOutputSurface> output_surface_; | 267 scoped_ptr<FakeOutputSurface> output_surface_; |
| 267 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; | 268 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; |
| 268 scoped_ptr<ResourceProvider> resource_provider_; | 269 scoped_ptr<ResourceProvider> resource_provider_; |
| 269 scoped_ptr<ResourcePool> staging_resource_pool_; | 270 scoped_ptr<ResourcePool> staging_resource_pool_; |
| 270 scoped_ptr<RasterWorkerPool> raster_worker_pool_; | 271 scoped_ptr<RasterWorkerPool> raster_worker_pool_; |
| 271 base::CancelableClosure timeout_; | 272 base::CancelableClosure timeout_; |
| 272 int timeout_seconds_; | 273 int timeout_seconds_; |
| 274 size_t throttle_bytes_; | |
|
reveman
2014/08/21 01:15:47
nit: max_transfer_buffer_usage_bytes_ as from this
enne (OOO)
2014/08/21 01:34:16
Done.
| |
| 273 bool timed_out_; | 275 bool timed_out_; |
| 274 RasterTaskVector tasks_; | 276 RasterTaskVector tasks_; |
| 275 std::vector<RasterTaskResult> completed_tasks_; | 277 std::vector<RasterTaskResult> completed_tasks_; |
| 276 }; | 278 }; |
| 277 | 279 |
| 278 TEST_P(RasterWorkerPoolTest, Basic) { | 280 TEST_P(RasterWorkerPoolTest, Basic) { |
| 279 AppendTask(0u); | 281 AppendTask(0u); |
| 280 AppendTask(1u); | 282 AppendTask(1u); |
| 281 ScheduleTasks(); | 283 ScheduleTasks(); |
| 282 | 284 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 324 RunMessageLoopUntilAllTasksHaveCompleted(); | 326 RunMessageLoopUntilAllTasksHaveCompleted(); |
| 325 } | 327 } |
| 326 | 328 |
| 327 INSTANTIATE_TEST_CASE_P(RasterWorkerPoolTests, | 329 INSTANTIATE_TEST_CASE_P(RasterWorkerPoolTests, |
| 328 RasterWorkerPoolTest, | 330 RasterWorkerPoolTest, |
| 329 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, | 331 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, |
| 330 RASTER_WORKER_POOL_TYPE_IMAGE, | 332 RASTER_WORKER_POOL_TYPE_IMAGE, |
| 331 RASTER_WORKER_POOL_TYPE_IMAGE_COPY, | 333 RASTER_WORKER_POOL_TYPE_IMAGE_COPY, |
| 332 RASTER_WORKER_POOL_TYPE_GPU)); | 334 RASTER_WORKER_POOL_TYPE_GPU)); |
| 333 | 335 |
| 336 class PixelBufferRasterWorkerPoolTest : public RasterWorkerPoolTest {}; | |
| 337 | |
| 338 TEST_P(PixelBufferRasterWorkerPoolTest, BigTaskThrottling) { | |
|
reveman
2014/08/21 01:15:47
How about we call this LargeResources and run it f
enne (OOO)
2014/08/21 01:34:15
Done.
| |
| 339 gfx::Size size(1000, 1000); | |
| 340 | |
| 341 { | |
| 342 // Verify a resource of this size will get throttled. | |
|
reveman
2014/08/21 01:15:47
are we missing a "not" here? Maybe just "Verify a
enne (OOO)
2014/08/21 01:34:16
No, but maybe it should be "could get throttled".
| |
| 343 scoped_ptr<ScopedResource> resource( | |
| 344 ScopedResource::Create(resource_provider_.get())); | |
| 345 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); | |
| 346 EXPECT_GE(resource->bytes(), throttle_bytes_); | |
|
reveman
2014/08/21 01:15:47
Could you instead compute |size| based on kMaxTran
enne (OOO)
2014/08/21 01:34:15
That's why there's the block of code right here, t
| |
| 347 } | |
| 348 | |
| 349 AppendTask(0u, size); | |
| 350 AppendTask(1u, size); | |
| 351 AppendTask(2u, size); | |
| 352 ScheduleTasks(); | |
| 353 | |
| 354 // This will time out if a resource that is larger than the throttle limit | |
| 355 // never gets scheduled. | |
| 356 RunMessageLoopUntilAllTasksHaveCompleted(); | |
| 357 } | |
| 358 | |
| 359 INSTANTIATE_TEST_CASE_P( | |
| 360 PixelBufferRasterWorkerPoolTests, | |
| 361 PixelBufferRasterWorkerPoolTest, | |
| 362 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER)); | |
| 363 | |
| 334 } // namespace | 364 } // namespace |
| 335 } // namespace cc | 365 } // namespace cc |
| OLD | NEW |