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

Side by Side Diff: cc/raster/tile_task_worker_pool_perftest.cc

Issue 1470113002: Move TaskGraph creation to TileManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pinchfix
Patch Set: feedback Created 5 years 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
« no previous file with comments | « cc/raster/tile_task_worker_pool.cc ('k') | cc/raster/tile_task_worker_pool_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/raster/tile_task_worker_pool.h" 5 #include "cc/raster/tile_task_worker_pool.h"
6 6
7 #include "base/test/test_simple_task_runner.h" 7 #include "base/test/test_simple_task_runner.h"
8 #include "base/time/time.h" 8 #include "base/time/time.h"
9 #include "cc/debug/lap_timer.h" 9 #include "cc/debug/lap_timer.h"
10 #include "cc/output/context_provider.h" 10 #include "cc/output/context_provider.h"
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 ScopedResource::Create(resource_provider_.get())); 207 ScopedResource::Create(resource_provider_.get()));
208 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, 208 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
209 RGBA_8888); 209 RGBA_8888);
210 210
211 ImageDecodeTask::Vector dependencies = image_decode_tasks; 211 ImageDecodeTask::Vector dependencies = image_decode_tasks;
212 raster_tasks->push_back( 212 raster_tasks->push_back(
213 new PerfRasterTaskImpl(std::move(resource), &dependencies)); 213 new PerfRasterTaskImpl(std::move(resource), &dependencies));
214 } 214 }
215 } 215 }
216 216
217 void BuildTileTaskQueue(TileTaskQueue* queue, 217 void BuildTileTaskGraph(TaskGraph* graph,
218 const RasterTaskVector& raster_tasks) { 218 const RasterTaskVector& raster_tasks) {
219 for (size_t i = 0u; i < raster_tasks.size(); ++i) { 219 size_t priority = 0;
220 bool required_for_activation = (i % 2) == 0; 220
221 TaskSetCollection task_set_collection; 221 for (auto& raster_task : raster_tasks) {
222 task_set_collection[ALL] = true; 222 priority++;
223 task_set_collection[REQUIRED_FOR_ACTIVATION] = required_for_activation; 223
224 queue->items.push_back( 224 for (auto& decode_task : raster_task->dependencies()) {
225 TileTaskQueue::Item(raster_tasks[i].get(), task_set_collection)); 225 graph->nodes.push_back(
226 TaskGraph::Node(decode_task.get(), priority, 0u));
227 graph->edges.push_back(
228 TaskGraph::Edge(raster_task.get(), decode_task.get()));
229 }
230
231 graph->nodes.push_back(TaskGraph::Node(
232 raster_task.get(), priority, raster_task->dependencies().size()));
226 } 233 }
227 } 234 }
228 235
229 protected: 236 protected:
230 scoped_refptr<ContextProvider> context_provider_; 237 scoped_refptr<ContextProvider> context_provider_;
231 FakeOutputSurfaceClient output_surface_client_; 238 FakeOutputSurfaceClient output_surface_client_;
232 scoped_ptr<FakeOutputSurface> output_surface_; 239 scoped_ptr<FakeOutputSurface> output_surface_;
233 scoped_ptr<ResourceProvider> resource_provider_; 240 scoped_ptr<ResourceProvider> resource_provider_;
234 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; 241 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
235 scoped_ptr<SynchronousTaskGraphRunner> task_graph_runner_; 242 scoped_ptr<SynchronousTaskGraphRunner> task_graph_runner_;
236 LapTimer timer_; 243 LapTimer timer_;
237 }; 244 };
238 245
239 class TileTaskWorkerPoolPerfTest 246 class TileTaskWorkerPoolPerfTest
240 : public TileTaskWorkerPoolPerfTestBase, 247 : public TileTaskWorkerPoolPerfTestBase,
241 public testing::TestWithParam<TileTaskWorkerPoolType>, 248 public testing::TestWithParam<TileTaskWorkerPoolType> {
242 public TileTaskRunnerClient {
243 public: 249 public:
244 // Overridden from testing::Test: 250 // Overridden from testing::Test:
245 void SetUp() override { 251 void SetUp() override {
246 switch (GetParam()) { 252 switch (GetParam()) {
247 case TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY: 253 case TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY:
248 Create3dOutputSurfaceAndResourceProvider(); 254 Create3dOutputSurfaceAndResourceProvider();
249 tile_task_worker_pool_ = ZeroCopyTileTaskWorkerPool::Create( 255 tile_task_worker_pool_ = ZeroCopyTileTaskWorkerPool::Create(
250 task_runner_.get(), task_graph_runner_.get(), 256 task_runner_.get(), task_graph_runner_.get(),
251 resource_provider_.get(), false); 257 resource_provider_.get(), false);
252 break; 258 break;
(...skipping 13 matching lines...) Expand all
266 break; 272 break;
267 case TILE_TASK_WORKER_POOL_TYPE_BITMAP: 273 case TILE_TASK_WORKER_POOL_TYPE_BITMAP:
268 CreateSoftwareOutputSurfaceAndResourceProvider(); 274 CreateSoftwareOutputSurfaceAndResourceProvider();
269 tile_task_worker_pool_ = BitmapTileTaskWorkerPool::Create( 275 tile_task_worker_pool_ = BitmapTileTaskWorkerPool::Create(
270 task_runner_.get(), task_graph_runner_.get(), 276 task_runner_.get(), task_graph_runner_.get(),
271 resource_provider_.get()); 277 resource_provider_.get());
272 break; 278 break;
273 } 279 }
274 280
275 DCHECK(tile_task_worker_pool_); 281 DCHECK(tile_task_worker_pool_);
276 tile_task_worker_pool_->AsTileTaskRunner()->SetClient(this);
277 } 282 }
278 void TearDown() override { 283 void TearDown() override {
279 tile_task_worker_pool_->AsTileTaskRunner()->Shutdown(); 284 tile_task_worker_pool_->AsTileTaskRunner()->Shutdown();
280 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); 285 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks();
281 } 286 }
282 287
283 // Overriden from TileTaskRunnerClient:
284 void DidFinishRunningTileTasks(TaskSet task_set) override {
285 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks();
286 }
287
288 void RunMessageLoopUntilAllTasksHaveCompleted() { 288 void RunMessageLoopUntilAllTasksHaveCompleted() {
289 task_graph_runner_->RunUntilIdle(); 289 task_graph_runner_->RunUntilIdle();
290 task_runner_->RunUntilIdle(); 290 task_runner_->RunUntilIdle();
291 } 291 }
292 292
293 void RunScheduleTasksTest(const std::string& test_name, 293 void RunScheduleTasksTest(const std::string& test_name,
294 unsigned num_raster_tasks, 294 unsigned num_raster_tasks,
295 unsigned num_image_decode_tasks) { 295 unsigned num_image_decode_tasks) {
296 ImageDecodeTask::Vector image_decode_tasks; 296 ImageDecodeTask::Vector image_decode_tasks;
297 RasterTaskVector raster_tasks; 297 RasterTaskVector raster_tasks;
298 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 298 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
299 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 299 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
300 300
301 // Avoid unnecessary heap allocations by reusing the same queue. 301 // Avoid unnecessary heap allocations by reusing the same graph.
302 TileTaskQueue queue; 302 TaskGraph graph;
303 303
304 timer_.Reset(); 304 timer_.Reset();
305 do { 305 do {
306 queue.Reset(); 306 graph.Reset();
307 BuildTileTaskQueue(&queue, raster_tasks); 307 BuildTileTaskGraph(&graph, raster_tasks);
308 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&queue); 308 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph);
309 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); 309 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks();
310 timer_.NextLap(); 310 timer_.NextLap();
311 } while (!timer_.HasTimeLimitExpired()); 311 } while (!timer_.HasTimeLimitExpired());
312 312
313 TileTaskQueue empty; 313 TaskGraph empty;
314 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty); 314 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty);
315 RunMessageLoopUntilAllTasksHaveCompleted(); 315 RunMessageLoopUntilAllTasksHaveCompleted();
316 316
317 perf_test::PrintResult("schedule_tasks", TestModifierString(), test_name, 317 perf_test::PrintResult("schedule_tasks", TestModifierString(), test_name,
318 timer_.LapsPerSecond(), "runs/s", true); 318 timer_.LapsPerSecond(), "runs/s", true);
319 } 319 }
320 320
321 void RunScheduleAlternateTasksTest(const std::string& test_name, 321 void RunScheduleAlternateTasksTest(const std::string& test_name,
322 unsigned num_raster_tasks, 322 unsigned num_raster_tasks,
323 unsigned num_image_decode_tasks) { 323 unsigned num_image_decode_tasks) {
324 const size_t kNumVersions = 2; 324 const size_t kNumVersions = 2;
325 ImageDecodeTask::Vector image_decode_tasks[kNumVersions]; 325 ImageDecodeTask::Vector image_decode_tasks[kNumVersions];
326 RasterTaskVector raster_tasks[kNumVersions]; 326 RasterTaskVector raster_tasks[kNumVersions];
327 for (size_t i = 0; i < kNumVersions; ++i) { 327 for (size_t i = 0; i < kNumVersions; ++i) {
328 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks[i]); 328 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks[i]);
329 CreateRasterTasks(num_raster_tasks, image_decode_tasks[i], 329 CreateRasterTasks(num_raster_tasks, image_decode_tasks[i],
330 &raster_tasks[i]); 330 &raster_tasks[i]);
331 } 331 }
332 332
333 // Avoid unnecessary heap allocations by reusing the same queue. 333 // Avoid unnecessary heap allocations by reusing the same graph.
334 TileTaskQueue queue; 334 TaskGraph graph;
335 335
336 size_t count = 0; 336 size_t count = 0;
337 timer_.Reset(); 337 timer_.Reset();
338 do { 338 do {
339 queue.Reset(); 339 graph.Reset();
340 BuildTileTaskQueue(&queue, raster_tasks[count % kNumVersions]); 340 BuildTileTaskGraph(&graph, raster_tasks[count % kNumVersions]);
341 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&queue); 341 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph);
342 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); 342 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks();
343 ++count; 343 ++count;
344 timer_.NextLap(); 344 timer_.NextLap();
345 } while (!timer_.HasTimeLimitExpired()); 345 } while (!timer_.HasTimeLimitExpired());
346 346
347 TileTaskQueue empty; 347 TaskGraph empty;
348 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty); 348 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty);
349 RunMessageLoopUntilAllTasksHaveCompleted(); 349 RunMessageLoopUntilAllTasksHaveCompleted();
350 350
351 perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(), 351 perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(),
352 test_name, timer_.LapsPerSecond(), "runs/s", true); 352 test_name, timer_.LapsPerSecond(), "runs/s", true);
353 } 353 }
354 354
355 void RunScheduleAndExecuteTasksTest(const std::string& test_name, 355 void RunScheduleAndExecuteTasksTest(const std::string& test_name,
356 unsigned num_raster_tasks, 356 unsigned num_raster_tasks,
357 unsigned num_image_decode_tasks) { 357 unsigned num_image_decode_tasks) {
358 ImageDecodeTask::Vector image_decode_tasks; 358 ImageDecodeTask::Vector image_decode_tasks;
359 RasterTaskVector raster_tasks; 359 RasterTaskVector raster_tasks;
360 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 360 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
361 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 361 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
362 362
363 // Avoid unnecessary heap allocations by reusing the same queue. 363 // Avoid unnecessary heap allocations by reusing the same graph.
364 TileTaskQueue queue; 364 TaskGraph graph;
365 365
366 timer_.Reset(); 366 timer_.Reset();
367 do { 367 do {
368 queue.Reset(); 368 graph.Reset();
369 BuildTileTaskQueue(&queue, raster_tasks); 369 BuildTileTaskGraph(&graph, raster_tasks);
370 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&queue); 370 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph);
371 RunMessageLoopUntilAllTasksHaveCompleted(); 371 RunMessageLoopUntilAllTasksHaveCompleted();
372 timer_.NextLap(); 372 timer_.NextLap();
373 } while (!timer_.HasTimeLimitExpired()); 373 } while (!timer_.HasTimeLimitExpired());
374 374
375 TileTaskQueue empty; 375 TaskGraph empty;
376 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty); 376 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty);
377 RunMessageLoopUntilAllTasksHaveCompleted(); 377 RunMessageLoopUntilAllTasksHaveCompleted();
378 378
379 perf_test::PrintResult("schedule_and_execute_tasks", TestModifierString(), 379 perf_test::PrintResult("schedule_and_execute_tasks", TestModifierString(),
380 test_name, timer_.LapsPerSecond(), "runs/s", true); 380 test_name, timer_.LapsPerSecond(), "runs/s", true);
381 } 381 }
382 382
383 private: 383 private:
384 void Create3dOutputSurfaceAndResourceProvider() { 384 void Create3dOutputSurfaceAndResourceProvider() {
385 output_surface_ = FakeOutputSurface::Create3d(context_provider_); 385 output_surface_ = FakeOutputSurface::Create3d(context_provider_);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 public testing::Test { 454 public testing::Test {
455 public: 455 public:
456 // Overridden from testing::Test: 456 // Overridden from testing::Test:
457 void SetUp() override { 457 void SetUp() override {
458 output_surface_ = FakeOutputSurface::Create3d(context_provider_); 458 output_surface_ = FakeOutputSurface::Create3d(context_provider_);
459 CHECK(output_surface_->BindToClient(&output_surface_client_)); 459 CHECK(output_surface_->BindToClient(&output_surface_client_));
460 resource_provider_ = 460 resource_provider_ =
461 FakeResourceProvider::Create(output_surface_.get(), nullptr); 461 FakeResourceProvider::Create(output_surface_.get(), nullptr);
462 } 462 }
463 463
464 void RunBuildTileTaskQueueTest(const std::string& test_name, 464 void RunBuildTileTaskGraphTest(const std::string& test_name,
465 unsigned num_raster_tasks, 465 unsigned num_raster_tasks,
466 unsigned num_image_decode_tasks) { 466 unsigned num_image_decode_tasks) {
467 ImageDecodeTask::Vector image_decode_tasks; 467 ImageDecodeTask::Vector image_decode_tasks;
468 RasterTaskVector raster_tasks; 468 RasterTaskVector raster_tasks;
469 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 469 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
470 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 470 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
471 471
472 // Avoid unnecessary heap allocations by reusing the same queue. 472 // Avoid unnecessary heap allocations by reusing the same graph.
473 TileTaskQueue queue; 473 TaskGraph graph;
474 474
475 timer_.Reset(); 475 timer_.Reset();
476 do { 476 do {
477 queue.Reset(); 477 graph.Reset();
478 BuildTileTaskQueue(&queue, raster_tasks); 478 BuildTileTaskGraph(&graph, raster_tasks);
479 timer_.NextLap(); 479 timer_.NextLap();
480 } while (!timer_.HasTimeLimitExpired()); 480 } while (!timer_.HasTimeLimitExpired());
481 481
482 perf_test::PrintResult("build_raster_task_queue", "", test_name, 482 perf_test::PrintResult("build_raster_task_graph", "", test_name,
483 timer_.LapsPerSecond(), "runs/s", true); 483 timer_.LapsPerSecond(), "runs/s", true);
484 } 484 }
485 }; 485 };
486 486
487 TEST_F(TileTaskWorkerPoolCommonPerfTest, BuildTileTaskQueue) { 487 TEST_F(TileTaskWorkerPoolCommonPerfTest, BuildTileTaskGraph) {
488 RunBuildTileTaskQueueTest("1_0", 1, 0); 488 RunBuildTileTaskGraphTest("1_0", 1, 0);
489 RunBuildTileTaskQueueTest("32_0", 32, 0); 489 RunBuildTileTaskGraphTest("32_0", 32, 0);
490 RunBuildTileTaskQueueTest("1_1", 1, 1); 490 RunBuildTileTaskGraphTest("1_1", 1, 1);
491 RunBuildTileTaskQueueTest("32_1", 32, 1); 491 RunBuildTileTaskGraphTest("32_1", 32, 1);
492 RunBuildTileTaskQueueTest("1_4", 1, 4); 492 RunBuildTileTaskGraphTest("1_4", 1, 4);
493 RunBuildTileTaskQueueTest("32_4", 32, 4); 493 RunBuildTileTaskGraphTest("32_4", 32, 4);
494 } 494 }
495 495
496 } // namespace 496 } // namespace
497 } // namespace cc 497 } // namespace cc
OLDNEW
« no previous file with comments | « cc/raster/tile_task_worker_pool.cc ('k') | cc/raster/tile_task_worker_pool_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698