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

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

Issue 1951193002: cc: Add mailbox support to ResourceProvider write locks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@worker_context_stream
Patch Set: rebase Created 4 years, 6 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
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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/test/test_simple_task_runner.h" 10 #include "base/test/test_simple_task_runner.h"
11 #include "base/time/time.h" 11 #include "base/time/time.h"
12 #include "cc/debug/lap_timer.h" 12 #include "cc/debug/lap_timer.h"
13 #include "cc/output/context_provider.h" 13 #include "cc/output/context_provider.h"
14 #include "cc/raster/bitmap_raster_buffer_provider.h" 14 #include "cc/raster/bitmap_raster_buffer_provider.h"
15 #include "cc/raster/gpu_raster_buffer_provider.h" 15 #include "cc/raster/gpu_raster_buffer_provider.h"
16 #include "cc/raster/gpu_rasterizer.h"
17 #include "cc/raster/one_copy_raster_buffer_provider.h" 16 #include "cc/raster/one_copy_raster_buffer_provider.h"
18 #include "cc/raster/raster_buffer_provider.h" 17 #include "cc/raster/raster_buffer_provider.h"
19 #include "cc/raster/synchronous_task_graph_runner.h" 18 #include "cc/raster/synchronous_task_graph_runner.h"
20 #include "cc/raster/zero_copy_raster_buffer_provider.h" 19 #include "cc/raster/zero_copy_raster_buffer_provider.h"
20 #include "cc/resources/platform_color.h"
21 #include "cc/resources/resource_pool.h" 21 #include "cc/resources/resource_pool.h"
22 #include "cc/resources/resource_provider.h" 22 #include "cc/resources/resource_provider.h"
23 #include "cc/resources/scoped_resource.h" 23 #include "cc/resources/scoped_resource.h"
24 #include "cc/test/fake_output_surface.h" 24 #include "cc/test/fake_output_surface.h"
25 #include "cc/test/fake_output_surface_client.h" 25 #include "cc/test/fake_output_surface_client.h"
26 #include "cc/test/fake_resource_provider.h" 26 #include "cc/test/fake_resource_provider.h"
27 #include "cc/test/test_context_support.h" 27 #include "cc/test/test_context_support.h"
28 #include "cc/test/test_gpu_memory_buffer_manager.h" 28 #include "cc/test/test_gpu_memory_buffer_manager.h"
29 #include "cc/test/test_shared_bitmap_manager.h" 29 #include "cc/test/test_shared_bitmap_manager.h"
30 #include "cc/test/test_web_graphics_context_3d.h" 30 #include "cc/test/test_web_graphics_context_3d.h"
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 LapTimer timer_; 304 LapTimer timer_;
305 }; 305 };
306 306
307 class RasterBufferProviderPerfTest 307 class RasterBufferProviderPerfTest
308 : public RasterBufferProviderPerfTestBase, 308 : public RasterBufferProviderPerfTestBase,
309 public PerfRasterBufferProviderHelper, 309 public PerfRasterBufferProviderHelper,
310 public testing::TestWithParam<RasterBufferProviderType> { 310 public testing::TestWithParam<RasterBufferProviderType> {
311 public: 311 public:
312 // Overridden from testing::Test: 312 // Overridden from testing::Test:
313 void SetUp() override { 313 void SetUp() override {
314 std::unique_ptr<RasterBufferProvider> raster_buffer_provider;
315 switch (GetParam()) { 314 switch (GetParam()) {
316 case RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY: 315 case RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY:
317 Create3dOutputSurfaceAndResourceProvider(); 316 Create3dOutputSurfaceAndResourceProvider();
318 raster_buffer_provider = ZeroCopyRasterBufferProvider::Create( 317 raster_buffer_provider_ = ZeroCopyRasterBufferProvider::Create(
319 resource_provider_.get(), PlatformColor::BestTextureFormat()); 318 resource_provider_.get(), PlatformColor::BestTextureFormat());
320 break; 319 break;
321 case RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY: 320 case RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY:
322 Create3dOutputSurfaceAndResourceProvider(); 321 Create3dOutputSurfaceAndResourceProvider();
323 raster_buffer_provider = base::MakeUnique<OneCopyRasterBufferProvider>( 322 raster_buffer_provider_ = base::MakeUnique<OneCopyRasterBufferProvider>(
324 task_runner_.get(), compositor_context_provider_.get(), 323 task_runner_.get(), compositor_context_provider_.get(),
325 worker_context_provider_.get(), resource_provider_.get(), 324 worker_context_provider_.get(), resource_provider_.get(),
326 std::numeric_limits<int>::max(), false, 325 std::numeric_limits<int>::max(), false,
327 std::numeric_limits<int>::max(), 326 std::numeric_limits<int>::max(), PlatformColor::BestTextureFormat(),
328 PlatformColor::BestTextureFormat()); 327 false);
329 break; 328 break;
330 case RASTER_BUFFER_PROVIDER_TYPE_GPU: 329 case RASTER_BUFFER_PROVIDER_TYPE_GPU:
331 Create3dOutputSurfaceAndResourceProvider(); 330 Create3dOutputSurfaceAndResourceProvider();
332 raster_buffer_provider = base::MakeUnique<GpuRasterBufferProvider>( 331 raster_buffer_provider_ = base::MakeUnique<GpuRasterBufferProvider>(
333 compositor_context_provider_.get(), worker_context_provider_.get(), 332 compositor_context_provider_.get(), worker_context_provider_.get(),
334 resource_provider_.get(), false, 0); 333 resource_provider_.get(), false, 0, false);
335 break; 334 break;
336 case RASTER_BUFFER_PROVIDER_TYPE_BITMAP: 335 case RASTER_BUFFER_PROVIDER_TYPE_BITMAP:
337 CreateSoftwareOutputSurfaceAndResourceProvider(); 336 CreateSoftwareOutputSurfaceAndResourceProvider();
338 raster_buffer_provider = 337 raster_buffer_provider_ =
339 BitmapRasterBufferProvider::Create(resource_provider_.get()); 338 BitmapRasterBufferProvider::Create(resource_provider_.get());
340 break; 339 break;
341 } 340 }
342 341
343 DCHECK(raster_buffer_provider); 342 DCHECK(raster_buffer_provider_);
344 343
345 tile_task_manager_ = TileTaskManagerImpl::Create( 344 tile_task_manager_ = TileTaskManagerImpl::Create(task_graph_runner_.get());
346 std::move(raster_buffer_provider), task_graph_runner_.get());
347 } 345 }
348 void TearDown() override { 346 void TearDown() override {
349 tile_task_manager_->Shutdown(); 347 tile_task_manager_->Shutdown();
350 tile_task_manager_->CheckForCompletedTasks(); 348 tile_task_manager_->CheckForCompletedTasks();
349
350 raster_buffer_provider_->Shutdown();
351 } 351 }
352 352
353 // Overridden from PerfRasterBufferProviderHelper: 353 // Overridden from PerfRasterBufferProviderHelper:
354 std::unique_ptr<RasterBuffer> AcquireBufferForRaster( 354 std::unique_ptr<RasterBuffer> AcquireBufferForRaster(
355 const Resource* resource, 355 const Resource* resource,
356 uint64_t resource_content_id, 356 uint64_t resource_content_id,
357 uint64_t previous_content_id) override { 357 uint64_t previous_content_id) override {
358 return tile_task_manager_->GetRasterBufferProvider() 358 return raster_buffer_provider_->AcquireBufferForRaster(
359 ->AcquireBufferForRaster(resource, resource_content_id, 359 resource, resource_content_id, previous_content_id);
360 previous_content_id);
361 } 360 }
362 void ReleaseBufferForRaster(std::unique_ptr<RasterBuffer> buffer) override { 361 void ReleaseBufferForRaster(std::unique_ptr<RasterBuffer> buffer) override {
363 tile_task_manager_->GetRasterBufferProvider()->ReleaseBufferForRaster( 362 raster_buffer_provider_->ReleaseBufferForRaster(std::move(buffer));
364 std::move(buffer));
365 } 363 }
366 364
367 void RunMessageLoopUntilAllTasksHaveCompleted() { 365 void RunMessageLoopUntilAllTasksHaveCompleted() {
368 task_graph_runner_->RunUntilIdle(); 366 task_graph_runner_->RunUntilIdle();
369 task_runner_->RunUntilIdle(); 367 task_runner_->RunUntilIdle();
370 } 368 }
371 369
372 void RunScheduleTasksTest(const std::string& test_name, 370 void RunScheduleTasksTest(const std::string& test_name,
373 unsigned num_raster_tasks, 371 unsigned num_raster_tasks,
374 unsigned num_image_decode_tasks) { 372 unsigned num_image_decode_tasks) {
375 TileTask::Vector image_decode_tasks; 373 TileTask::Vector image_decode_tasks;
376 RasterTaskVector raster_tasks; 374 RasterTaskVector raster_tasks;
377 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 375 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
378 CreateRasterTasks(this, num_raster_tasks, image_decode_tasks, 376 CreateRasterTasks(this, num_raster_tasks, image_decode_tasks,
379 &raster_tasks); 377 &raster_tasks);
380 378
381 // Avoid unnecessary heap allocations by reusing the same graph. 379 // Avoid unnecessary heap allocations by reusing the same graph.
382 TaskGraph graph; 380 TaskGraph graph;
383 381
384 timer_.Reset(); 382 timer_.Reset();
385 do { 383 do {
386 graph.Reset(); 384 graph.Reset();
387 ResetRasterTasks(raster_tasks); 385 ResetRasterTasks(raster_tasks);
388 BuildTileTaskGraph(&graph, raster_tasks); 386 BuildTileTaskGraph(&graph, raster_tasks);
387 raster_buffer_provider_->OrderingBarrier();
389 tile_task_manager_->ScheduleTasks(&graph); 388 tile_task_manager_->ScheduleTasks(&graph);
390 tile_task_manager_->CheckForCompletedTasks(); 389 tile_task_manager_->CheckForCompletedTasks();
391 timer_.NextLap(); 390 timer_.NextLap();
392 } while (!timer_.HasTimeLimitExpired()); 391 } while (!timer_.HasTimeLimitExpired());
393 392
394 TaskGraph empty; 393 TaskGraph empty;
394 raster_buffer_provider_->OrderingBarrier();
395 tile_task_manager_->ScheduleTasks(&empty); 395 tile_task_manager_->ScheduleTasks(&empty);
396 RunMessageLoopUntilAllTasksHaveCompleted(); 396 RunMessageLoopUntilAllTasksHaveCompleted();
397 tile_task_manager_->CheckForCompletedTasks(); 397 tile_task_manager_->CheckForCompletedTasks();
398 398
399 perf_test::PrintResult("schedule_tasks", TestModifierString(), test_name, 399 perf_test::PrintResult("schedule_tasks", TestModifierString(), test_name,
400 timer_.LapsPerSecond(), "runs/s", true); 400 timer_.LapsPerSecond(), "runs/s", true);
401 } 401 }
402 402
403 void RunScheduleAlternateTasksTest(const std::string& test_name, 403 void RunScheduleAlternateTasksTest(const std::string& test_name,
404 unsigned num_raster_tasks, 404 unsigned num_raster_tasks,
(...skipping 10 matching lines...) Expand all
415 // Avoid unnecessary heap allocations by reusing the same graph. 415 // Avoid unnecessary heap allocations by reusing the same graph.
416 TaskGraph graph; 416 TaskGraph graph;
417 417
418 size_t count = 0; 418 size_t count = 0;
419 timer_.Reset(); 419 timer_.Reset();
420 do { 420 do {
421 graph.Reset(); 421 graph.Reset();
422 // Reset the tasks as for scheduling new state tasks are needed. 422 // Reset the tasks as for scheduling new state tasks are needed.
423 ResetRasterTasks(raster_tasks[count % kNumVersions]); 423 ResetRasterTasks(raster_tasks[count % kNumVersions]);
424 BuildTileTaskGraph(&graph, raster_tasks[count % kNumVersions]); 424 BuildTileTaskGraph(&graph, raster_tasks[count % kNumVersions]);
425 raster_buffer_provider_->OrderingBarrier();
425 tile_task_manager_->ScheduleTasks(&graph); 426 tile_task_manager_->ScheduleTasks(&graph);
426 tile_task_manager_->CheckForCompletedTasks(); 427 tile_task_manager_->CheckForCompletedTasks();
427 ++count; 428 ++count;
428 timer_.NextLap(); 429 timer_.NextLap();
429 } while (!timer_.HasTimeLimitExpired()); 430 } while (!timer_.HasTimeLimitExpired());
430 431
431 TaskGraph empty; 432 TaskGraph empty;
433 raster_buffer_provider_->OrderingBarrier();
432 tile_task_manager_->ScheduleTasks(&empty); 434 tile_task_manager_->ScheduleTasks(&empty);
433 RunMessageLoopUntilAllTasksHaveCompleted(); 435 RunMessageLoopUntilAllTasksHaveCompleted();
434 tile_task_manager_->CheckForCompletedTasks(); 436 tile_task_manager_->CheckForCompletedTasks();
435 437
436 perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(), 438 perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(),
437 test_name, timer_.LapsPerSecond(), "runs/s", true); 439 test_name, timer_.LapsPerSecond(), "runs/s", true);
438 } 440 }
439 441
440 void RunScheduleAndExecuteTasksTest(const std::string& test_name, 442 void RunScheduleAndExecuteTasksTest(const std::string& test_name,
441 unsigned num_raster_tasks, 443 unsigned num_raster_tasks,
442 unsigned num_image_decode_tasks) { 444 unsigned num_image_decode_tasks) {
443 TileTask::Vector image_decode_tasks; 445 TileTask::Vector image_decode_tasks;
444 RasterTaskVector raster_tasks; 446 RasterTaskVector raster_tasks;
445 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 447 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
446 CreateRasterTasks(this, num_raster_tasks, image_decode_tasks, 448 CreateRasterTasks(this, num_raster_tasks, image_decode_tasks,
447 &raster_tasks); 449 &raster_tasks);
448 450
449 // Avoid unnecessary heap allocations by reusing the same graph. 451 // Avoid unnecessary heap allocations by reusing the same graph.
450 TaskGraph graph; 452 TaskGraph graph;
451 453
452 timer_.Reset(); 454 timer_.Reset();
453 do { 455 do {
454 graph.Reset(); 456 graph.Reset();
455 BuildTileTaskGraph(&graph, raster_tasks); 457 BuildTileTaskGraph(&graph, raster_tasks);
458 raster_buffer_provider_->OrderingBarrier();
456 tile_task_manager_->ScheduleTasks(&graph); 459 tile_task_manager_->ScheduleTasks(&graph);
457 RunMessageLoopUntilAllTasksHaveCompleted(); 460 RunMessageLoopUntilAllTasksHaveCompleted();
458 timer_.NextLap(); 461 timer_.NextLap();
459 } while (!timer_.HasTimeLimitExpired()); 462 } while (!timer_.HasTimeLimitExpired());
460 463
461 TaskGraph empty; 464 TaskGraph empty;
465 raster_buffer_provider_->OrderingBarrier();
462 tile_task_manager_->ScheduleTasks(&empty); 466 tile_task_manager_->ScheduleTasks(&empty);
463 RunMessageLoopUntilAllTasksHaveCompleted(); 467 RunMessageLoopUntilAllTasksHaveCompleted();
464 468
465 perf_test::PrintResult("schedule_and_execute_tasks", TestModifierString(), 469 perf_test::PrintResult("schedule_and_execute_tasks", TestModifierString(),
466 test_name, timer_.LapsPerSecond(), "runs/s", true); 470 test_name, timer_.LapsPerSecond(), "runs/s", true);
467 } 471 }
468 472
469 private: 473 private:
470 void Create3dOutputSurfaceAndResourceProvider() { 474 void Create3dOutputSurfaceAndResourceProvider() {
471 output_surface_ = FakeOutputSurface::Create3d(compositor_context_provider_, 475 output_surface_ = FakeOutputSurface::Create3d(compositor_context_provider_,
(...skipping 20 matching lines...) Expand all
492 case RASTER_BUFFER_PROVIDER_TYPE_GPU: 496 case RASTER_BUFFER_PROVIDER_TYPE_GPU:
493 return std::string("_gpu_raster_buffer_provider"); 497 return std::string("_gpu_raster_buffer_provider");
494 case RASTER_BUFFER_PROVIDER_TYPE_BITMAP: 498 case RASTER_BUFFER_PROVIDER_TYPE_BITMAP:
495 return std::string("_bitmap_raster_buffer_provider"); 499 return std::string("_bitmap_raster_buffer_provider");
496 } 500 }
497 NOTREACHED(); 501 NOTREACHED();
498 return std::string(); 502 return std::string();
499 } 503 }
500 504
501 std::unique_ptr<TileTaskManager> tile_task_manager_; 505 std::unique_ptr<TileTaskManager> tile_task_manager_;
506 std::unique_ptr<RasterBufferProvider> raster_buffer_provider_;
502 TestGpuMemoryBufferManager gpu_memory_buffer_manager_; 507 TestGpuMemoryBufferManager gpu_memory_buffer_manager_;
503 TestSharedBitmapManager shared_bitmap_manager_; 508 TestSharedBitmapManager shared_bitmap_manager_;
504 }; 509 };
505 510
506 TEST_P(RasterBufferProviderPerfTest, ScheduleTasks) { 511 TEST_P(RasterBufferProviderPerfTest, ScheduleTasks) {
507 RunScheduleTasksTest("1_0", 1, 0); 512 RunScheduleTasksTest("1_0", 1, 0);
508 RunScheduleTasksTest("32_0", 32, 0); 513 RunScheduleTasksTest("32_0", 32, 0);
509 RunScheduleTasksTest("1_1", 1, 1); 514 RunScheduleTasksTest("1_1", 1, 1);
510 RunScheduleTasksTest("32_1", 32, 1); 515 RunScheduleTasksTest("32_1", 32, 1);
511 RunScheduleTasksTest("1_4", 1, 4); 516 RunScheduleTasksTest("1_4", 1, 4);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
580 RunBuildTileTaskGraphTest("1_0", 1, 0); 585 RunBuildTileTaskGraphTest("1_0", 1, 0);
581 RunBuildTileTaskGraphTest("32_0", 32, 0); 586 RunBuildTileTaskGraphTest("32_0", 32, 0);
582 RunBuildTileTaskGraphTest("1_1", 1, 1); 587 RunBuildTileTaskGraphTest("1_1", 1, 1);
583 RunBuildTileTaskGraphTest("32_1", 32, 1); 588 RunBuildTileTaskGraphTest("32_1", 32, 1);
584 RunBuildTileTaskGraphTest("1_4", 1, 4); 589 RunBuildTileTaskGraphTest("1_4", 1, 4);
585 RunBuildTileTaskGraphTest("32_4", 32, 4); 590 RunBuildTileTaskGraphTest("32_4", 32, 4);
586 } 591 }
587 592
588 } // namespace 593 } // namespace
589 } // namespace cc 594 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698