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 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 private: | 106 private: |
107 base::Lock* lock_; | 107 base::Lock* lock_; |
108 | 108 |
109 DISALLOW_COPY_AND_ASSIGN(BlockingTestRasterWorkerPoolTaskImpl); | 109 DISALLOW_COPY_AND_ASSIGN(BlockingTestRasterWorkerPoolTaskImpl); |
110 }; | 110 }; |
111 | 111 |
112 class RasterWorkerPoolTest | 112 class RasterWorkerPoolTest |
113 : public testing::TestWithParam<RasterWorkerPoolType>, | 113 : public testing::TestWithParam<RasterWorkerPoolType>, |
114 public RasterWorkerPoolClient { | 114 public RasterWorkerPoolClient { |
115 public: | 115 public: |
116 class RasterTask : public RasterWorkerPool::RasterTask { | |
117 public: | |
118 typedef std::vector<RasterTask> Vector; | |
119 | |
120 static RasterTask Create(const Resource* resource, | |
121 const TestRasterWorkerPoolTaskImpl::Reply& reply) { | |
122 internal::WorkerPoolTask::Vector dependencies; | |
123 return RasterTask( | |
124 new TestRasterWorkerPoolTaskImpl(resource, reply, &dependencies)); | |
125 } | |
126 | |
127 static RasterTask CreateBlocking( | |
128 const Resource* resource, | |
129 const TestRasterWorkerPoolTaskImpl::Reply& reply, | |
130 base::Lock* lock) { | |
131 internal::WorkerPoolTask::Vector dependencies; | |
132 return RasterTask(new BlockingTestRasterWorkerPoolTaskImpl( | |
133 resource, reply, lock, &dependencies)); | |
134 } | |
135 | |
136 private: | |
137 friend class RasterWorkerPoolTest; | |
138 | |
139 explicit RasterTask(internal::RasterWorkerPoolTask* task) | |
140 : RasterWorkerPool::RasterTask(task) {} | |
141 }; | |
142 | |
143 struct RasterTaskResult { | 116 struct RasterTaskResult { |
144 unsigned id; | 117 unsigned id; |
145 bool canceled; | 118 bool canceled; |
146 RasterThread raster_thread; | 119 RasterThread raster_thread; |
147 }; | 120 }; |
148 | 121 |
| 122 typedef std::vector<scoped_refptr<internal::RasterWorkerPoolTask> > |
| 123 RasterTaskVector; |
| 124 |
149 RasterWorkerPoolTest() | 125 RasterWorkerPoolTest() |
150 : context_provider_(TestContextProvider::Create()), | 126 : context_provider_(TestContextProvider::Create()), |
151 timeout_seconds_(5), | 127 timeout_seconds_(5), |
152 timed_out_(false) { | 128 timed_out_(false) { |
153 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass(); | 129 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass(); |
154 CHECK(output_surface_->BindToClient(&output_surface_client_)); | 130 CHECK(output_surface_->BindToClient(&output_surface_client_)); |
155 | 131 |
156 resource_provider_ = ResourceProvider::Create( | 132 resource_provider_ = ResourceProvider::Create( |
157 output_surface_.get(), NULL, 0, false, 1).Pass(); | 133 output_surface_.get(), NULL, 0, false, 1).Pass(); |
158 | 134 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 } | 181 } |
206 | 182 |
207 base::MessageLoop::current()->Run(); | 183 base::MessageLoop::current()->Run(); |
208 | 184 |
209 timeout_.Cancel(); | 185 timeout_.Cancel(); |
210 | 186 |
211 ASSERT_FALSE(timed_out_) << "Test timed out"; | 187 ASSERT_FALSE(timed_out_) << "Test timed out"; |
212 } | 188 } |
213 | 189 |
214 void ScheduleTasks() { | 190 void ScheduleTasks() { |
215 RasterWorkerPool::RasterTask::Queue queue; | 191 RasterTaskQueue queue; |
216 | 192 |
217 for (RasterTask::Vector::iterator it = tasks_.begin(); it != tasks_.end(); | 193 for (RasterTaskVector::const_iterator it = tasks_.begin(); |
| 194 it != tasks_.end(); |
218 ++it) | 195 ++it) |
219 queue.Append(*it, false); | 196 queue.items.push_back(RasterTaskQueue::Item(*it, false)); |
220 | 197 |
221 raster_worker_pool_->ScheduleTasks(&queue); | 198 raster_worker_pool_->ScheduleTasks(&queue); |
222 } | 199 } |
223 | 200 |
224 void AppendTask(unsigned id) { | 201 void AppendTask(unsigned id) { |
225 const gfx::Size size(1, 1); | 202 const gfx::Size size(1, 1); |
226 | 203 |
227 scoped_ptr<ScopedResource> resource( | 204 scoped_ptr<ScopedResource> resource( |
228 ScopedResource::Create(resource_provider_.get())); | 205 ScopedResource::Create(resource_provider_.get())); |
229 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); | 206 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); |
230 const Resource* const_resource = resource.get(); | 207 const Resource* const_resource = resource.get(); |
231 | 208 |
232 tasks_.push_back( | 209 internal::WorkerPoolTask::Vector empty; |
233 RasterTask::Create(const_resource, | 210 tasks_.push_back(new TestRasterWorkerPoolTaskImpl( |
234 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, | 211 const_resource, |
235 base::Unretained(this), | 212 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, |
236 base::Passed(&resource), | 213 base::Unretained(this), |
237 id))); | 214 base::Passed(&resource), |
| 215 id), |
| 216 &empty)); |
238 } | 217 } |
239 | 218 |
240 void AppendBlockingTask(unsigned id, base::Lock* lock) { | 219 void AppendBlockingTask(unsigned id, base::Lock* lock) { |
241 const gfx::Size size(1, 1); | 220 const gfx::Size size(1, 1); |
242 | 221 |
243 scoped_ptr<ScopedResource> resource( | 222 scoped_ptr<ScopedResource> resource( |
244 ScopedResource::Create(resource_provider_.get())); | 223 ScopedResource::Create(resource_provider_.get())); |
245 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); | 224 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); |
246 const Resource* const_resource = resource.get(); | 225 const Resource* const_resource = resource.get(); |
247 | 226 |
248 tasks_.push_back(RasterTask::CreateBlocking( | 227 internal::WorkerPoolTask::Vector empty; |
| 228 tasks_.push_back(new BlockingTestRasterWorkerPoolTaskImpl( |
249 const_resource, | 229 const_resource, |
250 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, | 230 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, |
251 base::Unretained(this), | 231 base::Unretained(this), |
252 base::Passed(&resource), | 232 base::Passed(&resource), |
253 id), | 233 id), |
254 lock)); | 234 lock, |
| 235 &empty)); |
255 } | 236 } |
256 | 237 |
257 const std::vector<RasterTaskResult>& completed_tasks() const { | 238 const std::vector<RasterTaskResult>& completed_tasks() const { |
258 return completed_tasks_; | 239 return completed_tasks_; |
259 } | 240 } |
260 | 241 |
261 private: | 242 private: |
262 void OnTaskCompleted(scoped_ptr<ScopedResource> resource, | 243 void OnTaskCompleted(scoped_ptr<ScopedResource> resource, |
263 unsigned id, | 244 unsigned id, |
264 const PicturePileImpl::Analysis& analysis, | 245 const PicturePileImpl::Analysis& analysis, |
(...skipping 13 matching lines...) Expand all Loading... |
278 | 259 |
279 protected: | 260 protected: |
280 scoped_refptr<TestContextProvider> context_provider_; | 261 scoped_refptr<TestContextProvider> context_provider_; |
281 FakeOutputSurfaceClient output_surface_client_; | 262 FakeOutputSurfaceClient output_surface_client_; |
282 scoped_ptr<FakeOutputSurface> output_surface_; | 263 scoped_ptr<FakeOutputSurface> output_surface_; |
283 scoped_ptr<ResourceProvider> resource_provider_; | 264 scoped_ptr<ResourceProvider> resource_provider_; |
284 scoped_ptr<RasterWorkerPool> raster_worker_pool_; | 265 scoped_ptr<RasterWorkerPool> raster_worker_pool_; |
285 base::CancelableClosure timeout_; | 266 base::CancelableClosure timeout_; |
286 int timeout_seconds_; | 267 int timeout_seconds_; |
287 bool timed_out_; | 268 bool timed_out_; |
288 std::vector<RasterTask> tasks_; | 269 RasterTaskVector tasks_; |
289 std::vector<RasterTaskResult> completed_tasks_; | 270 std::vector<RasterTaskResult> completed_tasks_; |
290 }; | 271 }; |
291 | 272 |
292 TEST_P(RasterWorkerPoolTest, Basic) { | 273 TEST_P(RasterWorkerPoolTest, Basic) { |
293 AppendTask(0u); | 274 AppendTask(0u); |
294 AppendTask(1u); | 275 AppendTask(1u); |
295 ScheduleTasks(); | 276 ScheduleTasks(); |
296 | 277 |
297 RunMessageLoopUntilAllTasksHaveCompleted(); | 278 RunMessageLoopUntilAllTasksHaveCompleted(); |
298 | 279 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 } | 322 } |
342 | 323 |
343 INSTANTIATE_TEST_CASE_P(RasterWorkerPoolTests, | 324 INSTANTIATE_TEST_CASE_P(RasterWorkerPoolTests, |
344 RasterWorkerPoolTest, | 325 RasterWorkerPoolTest, |
345 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, | 326 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, |
346 RASTER_WORKER_POOL_TYPE_IMAGE, | 327 RASTER_WORKER_POOL_TYPE_IMAGE, |
347 RASTER_WORKER_POOL_TYPE_DIRECT)); | 328 RASTER_WORKER_POOL_TYPE_DIRECT)); |
348 | 329 |
349 } // namespace | 330 } // namespace |
350 } // namespace cc | 331 } // namespace cc |
OLD | NEW |