| 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" |
| 11 #include "cc/resources/direct_raster_worker_pool.h" | 11 #include "cc/resources/direct_raster_worker_pool.h" |
| 12 #include "cc/resources/image_raster_worker_pool.h" | 12 #include "cc/resources/image_raster_worker_pool.h" |
| 13 #include "cc/resources/picture_pile.h" | 13 #include "cc/resources/picture_pile.h" |
| 14 #include "cc/resources/picture_pile_impl.h" | 14 #include "cc/resources/picture_pile_impl.h" |
| 15 #include "cc/resources/pixel_buffer_raster_worker_pool.h" | 15 #include "cc/resources/pixel_buffer_raster_worker_pool.h" |
| 16 #include "cc/resources/rasterizer.h" |
| 16 #include "cc/resources/resource_provider.h" | 17 #include "cc/resources/resource_provider.h" |
| 17 #include "cc/resources/scoped_resource.h" | 18 #include "cc/resources/scoped_resource.h" |
| 18 #include "cc/test/fake_output_surface.h" | 19 #include "cc/test/fake_output_surface.h" |
| 19 #include "cc/test/fake_output_surface_client.h" | 20 #include "cc/test/fake_output_surface_client.h" |
| 20 #include "cc/test/test_shared_bitmap_manager.h" | 21 #include "cc/test/test_shared_bitmap_manager.h" |
| 21 #include "cc/test/test_web_graphics_context_3d.h" | 22 #include "cc/test/test_web_graphics_context_3d.h" |
| 22 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
| 23 | 24 |
| 24 namespace cc { | 25 namespace cc { |
| 25 namespace { | 26 namespace { |
| 26 | 27 |
| 27 enum RasterThread { | 28 enum RasterThread { |
| 28 RASTER_THREAD_NONE, | 29 RASTER_THREAD_NONE, |
| 29 RASTER_THREAD_ORIGIN, | 30 RASTER_THREAD_ORIGIN, |
| 30 RASTER_THREAD_WORKER | 31 RASTER_THREAD_WORKER |
| 31 }; | 32 }; |
| 32 | 33 |
| 33 enum RasterWorkerPoolType { | 34 enum RasterWorkerPoolType { |
| 34 RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, | 35 RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, |
| 35 RASTER_WORKER_POOL_TYPE_IMAGE, | 36 RASTER_WORKER_POOL_TYPE_IMAGE, |
| 36 RASTER_WORKER_POOL_TYPE_DIRECT | 37 RASTER_WORKER_POOL_TYPE_DIRECT |
| 37 }; | 38 }; |
| 38 | 39 |
| 39 class TestRasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { | 40 class TestRasterTaskImpl : public internal::RasterTask { |
| 40 public: | 41 public: |
| 41 typedef base::Callback<void(const PicturePileImpl::Analysis& analysis, | 42 typedef base::Callback<void(const PicturePileImpl::Analysis& analysis, |
| 42 bool was_canceled, | 43 bool was_canceled, |
| 43 RasterThread raster_thread)> Reply; | 44 RasterThread raster_thread)> Reply; |
| 44 | 45 |
| 45 TestRasterWorkerPoolTaskImpl(const Resource* resource, | 46 TestRasterTaskImpl(const Resource* resource, |
| 46 const Reply& reply, | 47 const Reply& reply, |
| 47 internal::WorkerPoolTask::Vector* dependencies) | 48 internal::ImageDecodeTask::Vector* dependencies) |
| 48 : internal::RasterWorkerPoolTask(resource, dependencies), | 49 : internal::RasterTask(resource, dependencies), |
| 49 reply_(reply), | 50 reply_(reply), |
| 50 raster_thread_(RASTER_THREAD_NONE) {} | 51 raster_thread_(RASTER_THREAD_NONE) {} |
| 51 | 52 |
| 52 // Overridden from internal::Task: | 53 // Overridden from internal::Task: |
| 53 virtual void RunOnWorkerThread() OVERRIDE { | 54 virtual void RunOnWorkerThread() OVERRIDE { |
| 54 raster_thread_ = RASTER_THREAD_WORKER; | 55 raster_thread_ = RASTER_THREAD_WORKER; |
| 55 } | 56 } |
| 56 | 57 |
| 57 // Overridden from internal::WorkerPoolTask: | 58 // Overridden from internal::RasterizerTask: |
| 58 virtual void ScheduleOnOriginThread(internal::WorkerPoolTaskClient* client) | 59 virtual void ScheduleOnOriginThread(internal::RasterizerTaskClient* client) |
| 59 OVERRIDE { | 60 OVERRIDE { |
| 60 client->AcquireCanvasForRaster(this, resource()); | 61 client->AcquireCanvasForRaster(this); |
| 61 } | 62 } |
| 62 virtual void RunOnOriginThread() OVERRIDE { | 63 virtual void RunOnOriginThread() OVERRIDE { |
| 63 raster_thread_ = RASTER_THREAD_ORIGIN; | 64 raster_thread_ = RASTER_THREAD_ORIGIN; |
| 64 } | 65 } |
| 65 virtual void CompleteOnOriginThread(internal::WorkerPoolTaskClient* client) | 66 virtual void CompleteOnOriginThread(internal::RasterizerTaskClient* client) |
| 66 OVERRIDE { | 67 OVERRIDE { |
| 67 client->ReleaseCanvasForRaster(this, resource()); | 68 client->ReleaseCanvasForRaster(this); |
| 68 } | 69 } |
| 69 virtual void RunReplyOnOriginThread() OVERRIDE { | 70 virtual void RunReplyOnOriginThread() OVERRIDE { |
| 70 reply_.Run( | 71 reply_.Run( |
| 71 PicturePileImpl::Analysis(), !HasFinishedRunning(), raster_thread_); | 72 PicturePileImpl::Analysis(), !HasFinishedRunning(), raster_thread_); |
| 72 } | 73 } |
| 73 | 74 |
| 74 protected: | 75 protected: |
| 75 virtual ~TestRasterWorkerPoolTaskImpl() {} | 76 virtual ~TestRasterTaskImpl() {} |
| 76 | 77 |
| 77 private: | 78 private: |
| 78 const Reply reply_; | 79 const Reply reply_; |
| 79 RasterThread raster_thread_; | 80 RasterThread raster_thread_; |
| 80 | 81 |
| 81 DISALLOW_COPY_AND_ASSIGN(TestRasterWorkerPoolTaskImpl); | 82 DISALLOW_COPY_AND_ASSIGN(TestRasterTaskImpl); |
| 82 }; | 83 }; |
| 83 | 84 |
| 84 class BlockingTestRasterWorkerPoolTaskImpl | 85 class BlockingTestRasterTaskImpl : public TestRasterTaskImpl { |
| 85 : public TestRasterWorkerPoolTaskImpl { | |
| 86 public: | 86 public: |
| 87 BlockingTestRasterWorkerPoolTaskImpl( | 87 BlockingTestRasterTaskImpl(const Resource* resource, |
| 88 const Resource* resource, | 88 const Reply& reply, |
| 89 const Reply& reply, | 89 base::Lock* lock, |
| 90 base::Lock* lock, | 90 internal::ImageDecodeTask::Vector* dependencies) |
| 91 internal::WorkerPoolTask::Vector* dependencies) | 91 : TestRasterTaskImpl(resource, reply, dependencies), lock_(lock) {} |
| 92 : TestRasterWorkerPoolTaskImpl(resource, reply, dependencies), | |
| 93 lock_(lock) {} | |
| 94 | 92 |
| 95 // Overridden from internal::Task: | 93 // Overridden from internal::Task: |
| 96 virtual void RunOnWorkerThread() OVERRIDE { | 94 virtual void RunOnWorkerThread() OVERRIDE { |
| 97 base::AutoLock lock(*lock_); | 95 base::AutoLock lock(*lock_); |
| 98 TestRasterWorkerPoolTaskImpl::RunOnWorkerThread(); | 96 TestRasterTaskImpl::RunOnWorkerThread(); |
| 99 } | 97 } |
| 100 | 98 |
| 101 // Overridden from internal::WorkerPoolTask: | 99 // Overridden from internal::RasterizerTask: |
| 102 virtual void RunReplyOnOriginThread() OVERRIDE {} | 100 virtual void RunReplyOnOriginThread() OVERRIDE {} |
| 103 | 101 |
| 104 protected: | 102 protected: |
| 105 virtual ~BlockingTestRasterWorkerPoolTaskImpl() {} | 103 virtual ~BlockingTestRasterTaskImpl() {} |
| 106 | 104 |
| 107 private: | 105 private: |
| 108 base::Lock* lock_; | 106 base::Lock* lock_; |
| 109 | 107 |
| 110 DISALLOW_COPY_AND_ASSIGN(BlockingTestRasterWorkerPoolTaskImpl); | 108 DISALLOW_COPY_AND_ASSIGN(BlockingTestRasterTaskImpl); |
| 111 }; | 109 }; |
| 112 | 110 |
| 113 class RasterWorkerPoolTest | 111 class RasterWorkerPoolTest |
| 114 : public testing::TestWithParam<RasterWorkerPoolType>, | 112 : public testing::TestWithParam<RasterWorkerPoolType>, |
| 115 public RasterWorkerPoolClient { | 113 public RasterizerClient { |
| 116 public: | 114 public: |
| 117 struct RasterTaskResult { | 115 struct RasterTaskResult { |
| 118 unsigned id; | 116 unsigned id; |
| 119 bool canceled; | 117 bool canceled; |
| 120 RasterThread raster_thread; | 118 RasterThread raster_thread; |
| 121 }; | 119 }; |
| 122 | 120 |
| 123 typedef std::vector<scoped_refptr<internal::RasterWorkerPoolTask> > | 121 typedef std::vector<scoped_refptr<internal::RasterTask> > RasterTaskVector; |
| 124 RasterTaskVector; | |
| 125 | 122 |
| 126 RasterWorkerPoolTest() | 123 RasterWorkerPoolTest() |
| 127 : context_provider_(TestContextProvider::Create()), | 124 : context_provider_(TestContextProvider::Create()), |
| 128 timeout_seconds_(5), | 125 timeout_seconds_(5), |
| 129 timed_out_(false) { | 126 timed_out_(false) { |
| 130 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass(); | 127 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass(); |
| 131 CHECK(output_surface_->BindToClient(&output_surface_client_)); | 128 CHECK(output_surface_->BindToClient(&output_surface_client_)); |
| 132 | 129 |
| 133 shared_bitmap_manager_.reset(new TestSharedBitmapManager()); | 130 shared_bitmap_manager_.reset(new TestSharedBitmapManager()); |
| 134 resource_provider_ = | 131 resource_provider_ = |
| 135 ResourceProvider::Create( | 132 ResourceProvider::Create( |
| 136 output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1) | 133 output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1) |
| 137 .Pass(); | 134 .Pass(); |
| 138 pixel_buffer_raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( | |
| 139 base::MessageLoopProxy::current().get(), | |
| 140 resource_provider_.get(), | |
| 141 std::numeric_limits<size_t>::max()); | |
| 142 image_raster_worker_pool_ = | |
| 143 ImageRasterWorkerPool::Create(base::MessageLoopProxy::current().get(), | |
| 144 resource_provider_.get(), | |
| 145 GL_TEXTURE_2D); | |
| 146 direct_raster_worker_pool_ = | |
| 147 DirectRasterWorkerPool::Create(base::MessageLoopProxy::current().get(), | |
| 148 resource_provider_.get(), | |
| 149 context_provider_.get()); | |
| 150 | 135 |
| 151 switch (GetParam()) { | 136 switch (GetParam()) { |
| 152 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER: | 137 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER: |
| 153 raster_worker_pool_ = pixel_buffer_raster_worker_pool_.get(); | 138 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( |
| 139 base::MessageLoopProxy::current().get(), |
| 140 RasterWorkerPool::GetTaskGraphRunner(), |
| 141 resource_provider_.get(), |
| 142 std::numeric_limits<size_t>::max()); |
| 154 break; | 143 break; |
| 155 case RASTER_WORKER_POOL_TYPE_IMAGE: | 144 case RASTER_WORKER_POOL_TYPE_IMAGE: |
| 156 raster_worker_pool_ = image_raster_worker_pool_.get(); | 145 raster_worker_pool_ = ImageRasterWorkerPool::Create( |
| 146 base::MessageLoopProxy::current().get(), |
| 147 RasterWorkerPool::GetTaskGraphRunner(), |
| 148 resource_provider_.get(), |
| 149 GL_TEXTURE_2D); |
| 157 break; | 150 break; |
| 158 case RASTER_WORKER_POOL_TYPE_DIRECT: | 151 case RASTER_WORKER_POOL_TYPE_DIRECT: |
| 159 raster_worker_pool_ = direct_raster_worker_pool_.get(); | 152 raster_worker_pool_ = DirectRasterWorkerPool::Create( |
| 153 base::MessageLoopProxy::current().get(), |
| 154 resource_provider_.get(), |
| 155 context_provider_.get()); |
| 160 break; | 156 break; |
| 161 } | 157 } |
| 162 | 158 |
| 163 DCHECK(raster_worker_pool_); | 159 DCHECK(raster_worker_pool_); |
| 164 raster_worker_pool_->SetClient(this); | 160 raster_worker_pool_->AsRasterizer()->SetClient(this); |
| 165 } | 161 } |
| 166 virtual ~RasterWorkerPoolTest() { resource_provider_.reset(); } | 162 virtual ~RasterWorkerPoolTest() { resource_provider_.reset(); } |
| 167 | 163 |
| 168 // Overridden from testing::Test: | 164 // Overridden from testing::Test: |
| 169 virtual void TearDown() OVERRIDE { | 165 virtual void TearDown() OVERRIDE { |
| 170 raster_worker_pool_->Shutdown(); | 166 raster_worker_pool_->AsRasterizer()->Shutdown(); |
| 171 raster_worker_pool_->CheckForCompletedTasks(); | 167 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks(); |
| 172 } | 168 } |
| 173 | 169 |
| 174 // Overriden from RasterWorkerPoolClient: | 170 // Overriden from RasterWorkerPoolClient: |
| 175 virtual bool ShouldForceTasksRequiredForActivationToComplete() | 171 virtual bool ShouldForceTasksRequiredForActivationToComplete() const |
| 176 const OVERRIDE { | 172 OVERRIDE { |
| 177 return false; | 173 return false; |
| 178 } | 174 } |
| 179 virtual void DidFinishRunningTasks() OVERRIDE { | 175 virtual void DidFinishRunningTasks() OVERRIDE { |
| 180 raster_worker_pool_->CheckForCompletedTasks(); | 176 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks(); |
| 181 base::MessageLoop::current()->Quit(); | 177 base::MessageLoop::current()->Quit(); |
| 182 } | 178 } |
| 183 virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE {} | 179 virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE {} |
| 184 | 180 |
| 185 void RunMessageLoopUntilAllTasksHaveCompleted() { | 181 void RunMessageLoopUntilAllTasksHaveCompleted() { |
| 186 if (timeout_seconds_) { | 182 if (timeout_seconds_) { |
| 187 timeout_.Reset( | 183 timeout_.Reset( |
| 188 base::Bind(&RasterWorkerPoolTest::OnTimeout, base::Unretained(this))); | 184 base::Bind(&RasterWorkerPoolTest::OnTimeout, base::Unretained(this))); |
| 189 base::MessageLoopProxy::current()->PostDelayedTask( | 185 base::MessageLoopProxy::current()->PostDelayedTask( |
| 190 FROM_HERE, | 186 FROM_HERE, |
| 191 timeout_.callback(), | 187 timeout_.callback(), |
| 192 base::TimeDelta::FromSeconds(timeout_seconds_)); | 188 base::TimeDelta::FromSeconds(timeout_seconds_)); |
| 193 } | 189 } |
| 194 | 190 |
| 195 base::MessageLoop::current()->Run(); | 191 base::MessageLoop::current()->Run(); |
| 196 | 192 |
| 197 timeout_.Cancel(); | 193 timeout_.Cancel(); |
| 198 | 194 |
| 199 ASSERT_FALSE(timed_out_) << "Test timed out"; | 195 ASSERT_FALSE(timed_out_) << "Test timed out"; |
| 200 } | 196 } |
| 201 | 197 |
| 202 void ScheduleTasks() { | 198 void ScheduleTasks() { |
| 203 RasterTaskQueue queue; | 199 RasterTaskQueue queue; |
| 204 | 200 |
| 205 for (RasterTaskVector::const_iterator it = tasks_.begin(); | 201 for (RasterTaskVector::const_iterator it = tasks_.begin(); |
| 206 it != tasks_.end(); | 202 it != tasks_.end(); |
| 207 ++it) | 203 ++it) |
| 208 queue.items.push_back(RasterTaskQueue::Item(*it, false)); | 204 queue.items.push_back(RasterTaskQueue::Item(*it, false)); |
| 209 | 205 |
| 210 raster_worker_pool_->ScheduleTasks(&queue); | 206 raster_worker_pool_->AsRasterizer()->ScheduleTasks(&queue); |
| 211 } | 207 } |
| 212 | 208 |
| 213 void AppendTask(unsigned id) { | 209 void AppendTask(unsigned id) { |
| 214 const gfx::Size size(1, 1); | 210 const gfx::Size size(1, 1); |
| 215 | 211 |
| 216 scoped_ptr<ScopedResource> resource( | 212 scoped_ptr<ScopedResource> resource( |
| 217 ScopedResource::Create(resource_provider_.get())); | 213 ScopedResource::Create(resource_provider_.get())); |
| 218 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); | 214 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); |
| 219 const Resource* const_resource = resource.get(); | 215 const Resource* const_resource = resource.get(); |
| 220 | 216 |
| 221 internal::WorkerPoolTask::Vector empty; | 217 internal::ImageDecodeTask::Vector empty; |
| 222 tasks_.push_back(new TestRasterWorkerPoolTaskImpl( | 218 tasks_.push_back(new TestRasterTaskImpl( |
| 223 const_resource, | 219 const_resource, |
| 224 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, | 220 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, |
| 225 base::Unretained(this), | 221 base::Unretained(this), |
| 226 base::Passed(&resource), | 222 base::Passed(&resource), |
| 227 id), | 223 id), |
| 228 &empty)); | 224 &empty)); |
| 229 } | 225 } |
| 230 | 226 |
| 231 void AppendBlockingTask(unsigned id, base::Lock* lock) { | 227 void AppendBlockingTask(unsigned id, base::Lock* lock) { |
| 232 const gfx::Size size(1, 1); | 228 const gfx::Size size(1, 1); |
| 233 | 229 |
| 234 scoped_ptr<ScopedResource> resource( | 230 scoped_ptr<ScopedResource> resource( |
| 235 ScopedResource::Create(resource_provider_.get())); | 231 ScopedResource::Create(resource_provider_.get())); |
| 236 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); | 232 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); |
| 237 const Resource* const_resource = resource.get(); | 233 const Resource* const_resource = resource.get(); |
| 238 | 234 |
| 239 internal::WorkerPoolTask::Vector empty; | 235 internal::ImageDecodeTask::Vector empty; |
| 240 tasks_.push_back(new BlockingTestRasterWorkerPoolTaskImpl( | 236 tasks_.push_back(new BlockingTestRasterTaskImpl( |
| 241 const_resource, | 237 const_resource, |
| 242 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, | 238 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, |
| 243 base::Unretained(this), | 239 base::Unretained(this), |
| 244 base::Passed(&resource), | 240 base::Passed(&resource), |
| 245 id), | 241 id), |
| 246 lock, | 242 lock, |
| 247 &empty)); | 243 &empty)); |
| 248 } | 244 } |
| 249 | 245 |
| 250 const std::vector<RasterTaskResult>& completed_tasks() const { | 246 const std::vector<RasterTaskResult>& completed_tasks() const { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 268 timed_out_ = true; | 264 timed_out_ = true; |
| 269 base::MessageLoop::current()->Quit(); | 265 base::MessageLoop::current()->Quit(); |
| 270 } | 266 } |
| 271 | 267 |
| 272 protected: | 268 protected: |
| 273 scoped_refptr<TestContextProvider> context_provider_; | 269 scoped_refptr<TestContextProvider> context_provider_; |
| 274 FakeOutputSurfaceClient output_surface_client_; | 270 FakeOutputSurfaceClient output_surface_client_; |
| 275 scoped_ptr<FakeOutputSurface> output_surface_; | 271 scoped_ptr<FakeOutputSurface> output_surface_; |
| 276 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; | 272 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; |
| 277 scoped_ptr<ResourceProvider> resource_provider_; | 273 scoped_ptr<ResourceProvider> resource_provider_; |
| 278 scoped_ptr<PixelBufferRasterWorkerPool> pixel_buffer_raster_worker_pool_; | 274 scoped_ptr<RasterWorkerPool> raster_worker_pool_; |
| 279 scoped_ptr<ImageRasterWorkerPool> image_raster_worker_pool_; | |
| 280 scoped_ptr<DirectRasterWorkerPool> direct_raster_worker_pool_; | |
| 281 RasterWorkerPool* raster_worker_pool_; | |
| 282 base::CancelableClosure timeout_; | 275 base::CancelableClosure timeout_; |
| 283 int timeout_seconds_; | 276 int timeout_seconds_; |
| 284 bool timed_out_; | 277 bool timed_out_; |
| 285 RasterTaskVector tasks_; | 278 RasterTaskVector tasks_; |
| 286 std::vector<RasterTaskResult> completed_tasks_; | 279 std::vector<RasterTaskResult> completed_tasks_; |
| 287 }; | 280 }; |
| 288 | 281 |
| 289 TEST_P(RasterWorkerPoolTest, Basic) { | 282 TEST_P(RasterWorkerPoolTest, Basic) { |
| 290 AppendTask(0u); | 283 AppendTask(0u); |
| 291 AppendTask(1u); | 284 AppendTask(1u); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 } | 332 } |
| 340 | 333 |
| 341 INSTANTIATE_TEST_CASE_P(RasterWorkerPoolTests, | 334 INSTANTIATE_TEST_CASE_P(RasterWorkerPoolTests, |
| 342 RasterWorkerPoolTest, | 335 RasterWorkerPoolTest, |
| 343 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, | 336 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, |
| 344 RASTER_WORKER_POOL_TYPE_IMAGE, | 337 RASTER_WORKER_POOL_TYPE_IMAGE, |
| 345 RASTER_WORKER_POOL_TYPE_DIRECT)); | 338 RASTER_WORKER_POOL_TYPE_DIRECT)); |
| 346 | 339 |
| 347 } // namespace | 340 } // namespace |
| 348 } // namespace cc | 341 } // namespace cc |
| OLD | NEW |