Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(771)

Side by Side Diff: cc/resources/raster_worker_pool_perftest.cc

Issue 168083002: cc: Remove RasterWorkerPool::Task. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove RasterTaskQueueIterator Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "base/time/time.h" 7 #include "base/time/time.h"
8 #include "cc/resources/direct_raster_worker_pool.h" 8 #include "cc/resources/direct_raster_worker_pool.h"
9 #include "cc/resources/image_raster_worker_pool.h" 9 #include "cc/resources/image_raster_worker_pool.h"
10 #include "cc/resources/pixel_buffer_raster_worker_pool.h" 10 #include "cc/resources/pixel_buffer_raster_worker_pool.h"
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 public: 122 public:
123 PerfDirectRasterWorkerPoolImpl(ResourceProvider* resource_provider, 123 PerfDirectRasterWorkerPoolImpl(ResourceProvider* resource_provider,
124 ContextProvider* context_provider) 124 ContextProvider* context_provider)
125 : DirectRasterWorkerPool(resource_provider, context_provider) {} 125 : DirectRasterWorkerPool(resource_provider, context_provider) {}
126 }; 126 };
127 127
128 class RasterWorkerPoolPerfTest 128 class RasterWorkerPoolPerfTest
129 : public testing::TestWithParam<RasterWorkerPoolType>, 129 : public testing::TestWithParam<RasterWorkerPoolType>,
130 public RasterWorkerPoolClient { 130 public RasterWorkerPoolClient {
131 public: 131 public:
132 class Task : public RasterWorkerPool::Task { 132 typedef std::vector<scoped_refptr<internal::RasterWorkerPoolTask> >
133 public: 133 RasterTaskVector;
134 typedef std::vector<Task> Vector;
135
136 static Task Create() { return Task(new PerfWorkerPoolTaskImpl); }
137
138 void AppendTo(internal::WorkerPoolTask::Vector* dependencies) const {
139 dependencies->push_back(internal_);
140 }
141
142 private:
143 explicit Task(internal::WorkerPoolTask* task)
144 : RasterWorkerPool::Task(task) {}
145 };
146
147 class RasterTask : public RasterWorkerPool::RasterTask {
148 public:
149 typedef std::vector<RasterTask> Vector;
150
151 static RasterTask Create(scoped_ptr<ScopedResource> resource,
152 const Task::Vector& image_decode_tasks) {
153 internal::WorkerPoolTask::Vector dependencies;
154 for (Task::Vector::const_iterator it = image_decode_tasks.begin();
155 it != image_decode_tasks.end();
156 ++it)
157 it->AppendTo(&dependencies);
158
159 return RasterTask(
160 new PerfRasterWorkerPoolTaskImpl(resource.Pass(), &dependencies));
161 }
162
163 private:
164 explicit RasterTask(internal::RasterWorkerPoolTask* task)
165 : RasterWorkerPool::RasterTask(task) {}
166 };
167 134
168 RasterWorkerPoolPerfTest() 135 RasterWorkerPoolPerfTest()
169 : context_provider_(TestContextProvider::Create()), 136 : context_provider_(TestContextProvider::Create()),
170 task_graph_runner_(new PerfTaskGraphRunnerImpl), 137 task_graph_runner_(new PerfTaskGraphRunnerImpl),
171 timer_(kWarmupRuns, 138 timer_(kWarmupRuns,
172 base::TimeDelta::FromMilliseconds(kTimeLimitMillis), 139 base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
173 kTimeCheckInterval) { 140 kTimeCheckInterval) {
174 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass(); 141 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass();
175 CHECK(output_surface_->BindToClient(&output_surface_client_)); 142 CHECK(output_surface_->BindToClient(&output_surface_client_));
176 143
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 base::MessageLoop::current()->Quit(); 180 base::MessageLoop::current()->Quit();
214 } 181 }
215 virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE {} 182 virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE {}
216 183
217 void RunMessageLoopUntilAllTasksHaveCompleted() { 184 void RunMessageLoopUntilAllTasksHaveCompleted() {
218 while (task_graph_runner_->RunTaskForTesting()) 185 while (task_graph_runner_->RunTaskForTesting())
219 continue; 186 continue;
220 base::MessageLoop::current()->Run(); 187 base::MessageLoop::current()->Run();
221 } 188 }
222 189
223 void CreateImageDecodeTasks(unsigned num_image_decode_tasks, 190 void CreateImageDecodeTasks(
224 Task::Vector* image_decode_tasks) { 191 unsigned num_image_decode_tasks,
192 internal::WorkerPoolTask::Vector* image_decode_tasks) {
225 for (unsigned i = 0; i < num_image_decode_tasks; ++i) 193 for (unsigned i = 0; i < num_image_decode_tasks; ++i)
226 image_decode_tasks->push_back(Task::Create()); 194 image_decode_tasks->push_back(new PerfWorkerPoolTaskImpl);
227 } 195 }
228 196
229 void CreateRasterTasks(unsigned num_raster_tasks, 197 void CreateRasterTasks(
230 const Task::Vector& image_decode_tasks, 198 unsigned num_raster_tasks,
231 RasterTask::Vector* raster_tasks) { 199 const internal::WorkerPoolTask::Vector& image_decode_tasks,
200 RasterTaskVector* raster_tasks) {
232 const gfx::Size size(1, 1); 201 const gfx::Size size(1, 1);
233 202
234 for (unsigned i = 0; i < num_raster_tasks; ++i) { 203 for (unsigned i = 0; i < num_raster_tasks; ++i) {
235 scoped_ptr<ScopedResource> resource( 204 scoped_ptr<ScopedResource> resource(
236 ScopedResource::Create(resource_provider_.get())); 205 ScopedResource::Create(resource_provider_.get()));
237 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); 206 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888);
238 207
208 internal::WorkerPoolTask::Vector dependencies = image_decode_tasks;
239 raster_tasks->push_back( 209 raster_tasks->push_back(
240 RasterTask::Create(resource.Pass(), image_decode_tasks)); 210 new PerfRasterWorkerPoolTaskImpl(resource.Pass(), &dependencies));
241 } 211 }
242 } 212 }
243 213
244 void BuildTaskQueue(RasterWorkerPool::RasterTask::Queue* tasks, 214 void BuildTaskQueue(RasterTaskQueue* queue,
245 const RasterTask::Vector& raster_tasks) { 215 const RasterTaskVector& raster_tasks) {
246 for (RasterTask::Vector::const_iterator it = raster_tasks.begin(); 216 for (RasterTaskVector::const_iterator it = raster_tasks.begin();
247 it != raster_tasks.end(); 217 it != raster_tasks.end();
248 ++it) 218 ++it)
249 tasks->Append(*it, false); 219 queue->items.push_back(RasterTaskQueue::Item(it->get(), false));
250 } 220 }
251 221
252 void RunScheduleTasksTest(const std::string& test_name, 222 void RunScheduleTasksTest(const std::string& test_name,
253 unsigned num_raster_tasks, 223 unsigned num_raster_tasks,
254 unsigned num_image_decode_tasks) { 224 unsigned num_image_decode_tasks) {
255 Task::Vector image_decode_tasks; 225 internal::WorkerPoolTask::Vector image_decode_tasks;
256 RasterTask::Vector raster_tasks; 226 RasterTaskVector raster_tasks;
257 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 227 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
258 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 228 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
259 229
260 // Avoid unnecessary heap allocations by reusing the same queue. 230 // Avoid unnecessary heap allocations by reusing the same queue.
261 RasterWorkerPool::RasterTask::Queue queue; 231 RasterTaskQueue queue;
262 232
263 timer_.Reset(); 233 timer_.Reset();
264 do { 234 do {
265 queue.Reset(); 235 queue.Reset();
266 BuildTaskQueue(&queue, raster_tasks); 236 BuildTaskQueue(&queue, raster_tasks);
267 raster_worker_pool_->ScheduleTasks(&queue); 237 raster_worker_pool_->ScheduleTasks(&queue);
268 raster_worker_pool_->CheckForCompletedTasks(); 238 raster_worker_pool_->CheckForCompletedTasks();
269 timer_.NextLap(); 239 timer_.NextLap();
270 } while (!timer_.HasTimeLimitExpired()); 240 } while (!timer_.HasTimeLimitExpired());
271 241
272 RasterWorkerPool::RasterTask::Queue empty; 242 RasterTaskQueue empty;
273 raster_worker_pool_->ScheduleTasks(&empty); 243 raster_worker_pool_->ScheduleTasks(&empty);
274 RunMessageLoopUntilAllTasksHaveCompleted(); 244 RunMessageLoopUntilAllTasksHaveCompleted();
275 245
276 perf_test::PrintResult("schedule_tasks", 246 perf_test::PrintResult("schedule_tasks",
277 "", 247 "",
278 test_name, 248 test_name,
279 timer_.LapsPerSecond(), 249 timer_.LapsPerSecond(),
280 "runs/s", 250 "runs/s",
281 true); 251 true);
282 } 252 }
283 253
284 void RunScheduleAlternateTasksTest(const std::string& test_name, 254 void RunScheduleAlternateTasksTest(const std::string& test_name,
285 unsigned num_raster_tasks, 255 unsigned num_raster_tasks,
286 unsigned num_image_decode_tasks) { 256 unsigned num_image_decode_tasks) {
287 const size_t kNumVersions = 2; 257 const size_t kNumVersions = 2;
288 Task::Vector image_decode_tasks[kNumVersions]; 258 internal::WorkerPoolTask::Vector image_decode_tasks[kNumVersions];
289 RasterTask::Vector raster_tasks[kNumVersions]; 259 RasterTaskVector raster_tasks[kNumVersions];
290 for (size_t i = 0; i < kNumVersions; ++i) { 260 for (size_t i = 0; i < kNumVersions; ++i) {
291 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks[i]); 261 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks[i]);
292 CreateRasterTasks( 262 CreateRasterTasks(
293 num_raster_tasks, image_decode_tasks[i], &raster_tasks[i]); 263 num_raster_tasks, image_decode_tasks[i], &raster_tasks[i]);
294 } 264 }
295 265
296 // Avoid unnecessary heap allocations by reusing the same queue. 266 // Avoid unnecessary heap allocations by reusing the same queue.
297 RasterWorkerPool::RasterTask::Queue queue; 267 RasterTaskQueue queue;
298 268
299 size_t count = 0; 269 size_t count = 0;
300 timer_.Reset(); 270 timer_.Reset();
301 do { 271 do {
302 queue.Reset(); 272 queue.Reset();
303 BuildTaskQueue(&queue, raster_tasks[count % kNumVersions]); 273 BuildTaskQueue(&queue, raster_tasks[count % kNumVersions]);
304 raster_worker_pool_->ScheduleTasks(&queue); 274 raster_worker_pool_->ScheduleTasks(&queue);
305 raster_worker_pool_->CheckForCompletedTasks(); 275 raster_worker_pool_->CheckForCompletedTasks();
306 ++count; 276 ++count;
307 timer_.NextLap(); 277 timer_.NextLap();
308 } while (!timer_.HasTimeLimitExpired()); 278 } while (!timer_.HasTimeLimitExpired());
309 279
310 RasterWorkerPool::RasterTask::Queue empty; 280 RasterTaskQueue empty;
311 raster_worker_pool_->ScheduleTasks(&empty); 281 raster_worker_pool_->ScheduleTasks(&empty);
312 RunMessageLoopUntilAllTasksHaveCompleted(); 282 RunMessageLoopUntilAllTasksHaveCompleted();
313 283
314 perf_test::PrintResult("schedule_alternate_tasks", 284 perf_test::PrintResult("schedule_alternate_tasks",
315 "", 285 "",
316 test_name, 286 test_name,
317 timer_.LapsPerSecond(), 287 timer_.LapsPerSecond(),
318 "runs/s", 288 "runs/s",
319 true); 289 true);
320 } 290 }
321 291
322 void RunScheduleAndExecuteTasksTest(const std::string& test_name, 292 void RunScheduleAndExecuteTasksTest(const std::string& test_name,
323 unsigned num_raster_tasks, 293 unsigned num_raster_tasks,
324 unsigned num_image_decode_tasks) { 294 unsigned num_image_decode_tasks) {
325 Task::Vector image_decode_tasks; 295 internal::WorkerPoolTask::Vector image_decode_tasks;
326 RasterTask::Vector raster_tasks; 296 RasterTaskVector raster_tasks;
327 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 297 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
328 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 298 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
329 299
330 // Avoid unnecessary heap allocations by reusing the same queue. 300 // Avoid unnecessary heap allocations by reusing the same queue.
331 RasterWorkerPool::RasterTask::Queue queue; 301 RasterTaskQueue queue;
332 302
333 timer_.Reset(); 303 timer_.Reset();
334 do { 304 do {
335 queue.Reset(); 305 queue.Reset();
336 BuildTaskQueue(&queue, raster_tasks); 306 BuildTaskQueue(&queue, raster_tasks);
337 raster_worker_pool_->ScheduleTasks(&queue); 307 raster_worker_pool_->ScheduleTasks(&queue);
338 RunMessageLoopUntilAllTasksHaveCompleted(); 308 RunMessageLoopUntilAllTasksHaveCompleted();
339 timer_.NextLap(); 309 timer_.NextLap();
340 } while (!timer_.HasTimeLimitExpired()); 310 } while (!timer_.HasTimeLimitExpired());
341 311
342 RasterWorkerPool::RasterTask::Queue empty; 312 RasterTaskQueue empty;
343 raster_worker_pool_->ScheduleTasks(&empty); 313 raster_worker_pool_->ScheduleTasks(&empty);
344 RunMessageLoopUntilAllTasksHaveCompleted(); 314 RunMessageLoopUntilAllTasksHaveCompleted();
345 315
346 perf_test::PrintResult("schedule_and_execute_tasks", 316 perf_test::PrintResult("schedule_and_execute_tasks",
347 "", 317 "",
348 test_name, 318 test_name,
349 timer_.LapsPerSecond(), 319 timer_.LapsPerSecond(),
350 "runs/s", 320 "runs/s",
351 true); 321 true);
352 } 322 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 } 359 }
390 360
391 INSTANTIATE_TEST_CASE_P(RasterWorkerPoolPerfTests, 361 INSTANTIATE_TEST_CASE_P(RasterWorkerPoolPerfTests,
392 RasterWorkerPoolPerfTest, 362 RasterWorkerPoolPerfTest,
393 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, 363 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER,
394 RASTER_WORKER_POOL_TYPE_IMAGE, 364 RASTER_WORKER_POOL_TYPE_IMAGE,
395 RASTER_WORKER_POOL_TYPE_DIRECT)); 365 RASTER_WORKER_POOL_TYPE_DIRECT));
396 366
397 } // namespace 367 } // namespace
398 } // namespace cc 368 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/raster_worker_pool_delegate.cc ('k') | cc/resources/raster_worker_pool_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698