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

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

Issue 2046033002: Revert of cc: Add mailbox support to ResourceProvider write locks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@worker_context_stream
Patch Set: 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
« no previous file with comments | « cc/raster/raster_buffer_provider.h ('k') | cc/raster/raster_buffer_provider_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 <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"
16 #include "cc/raster/one_copy_raster_buffer_provider.h" 17 #include "cc/raster/one_copy_raster_buffer_provider.h"
17 #include "cc/raster/raster_buffer_provider.h" 18 #include "cc/raster/raster_buffer_provider.h"
18 #include "cc/raster/synchronous_task_graph_runner.h" 19 #include "cc/raster/synchronous_task_graph_runner.h"
19 #include "cc/raster/zero_copy_raster_buffer_provider.h" 20 #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;
314 switch (GetParam()) { 315 switch (GetParam()) {
315 case RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY: 316 case RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY:
316 Create3dOutputSurfaceAndResourceProvider(); 317 Create3dOutputSurfaceAndResourceProvider();
317 raster_buffer_provider_ = ZeroCopyRasterBufferProvider::Create( 318 raster_buffer_provider = ZeroCopyRasterBufferProvider::Create(
318 resource_provider_.get(), PlatformColor::BestTextureFormat()); 319 resource_provider_.get(), PlatformColor::BestTextureFormat());
319 break; 320 break;
320 case RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY: 321 case RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY:
321 Create3dOutputSurfaceAndResourceProvider(); 322 Create3dOutputSurfaceAndResourceProvider();
322 raster_buffer_provider_ = base::MakeUnique<OneCopyRasterBufferProvider>( 323 raster_buffer_provider = base::MakeUnique<OneCopyRasterBufferProvider>(
323 task_runner_.get(), compositor_context_provider_.get(), 324 task_runner_.get(), compositor_context_provider_.get(),
324 worker_context_provider_.get(), resource_provider_.get(), 325 worker_context_provider_.get(), resource_provider_.get(),
325 std::numeric_limits<int>::max(), false, 326 std::numeric_limits<int>::max(), false,
326 std::numeric_limits<int>::max(), PlatformColor::BestTextureFormat(), 327 std::numeric_limits<int>::max(),
327 false); 328 PlatformColor::BestTextureFormat());
328 break; 329 break;
329 case RASTER_BUFFER_PROVIDER_TYPE_GPU: 330 case RASTER_BUFFER_PROVIDER_TYPE_GPU:
330 Create3dOutputSurfaceAndResourceProvider(); 331 Create3dOutputSurfaceAndResourceProvider();
331 raster_buffer_provider_ = base::MakeUnique<GpuRasterBufferProvider>( 332 raster_buffer_provider = base::MakeUnique<GpuRasterBufferProvider>(
332 compositor_context_provider_.get(), worker_context_provider_.get(), 333 compositor_context_provider_.get(), worker_context_provider_.get(),
333 resource_provider_.get(), false, 0, false); 334 resource_provider_.get(), false, 0);
334 break; 335 break;
335 case RASTER_BUFFER_PROVIDER_TYPE_BITMAP: 336 case RASTER_BUFFER_PROVIDER_TYPE_BITMAP:
336 CreateSoftwareOutputSurfaceAndResourceProvider(); 337 CreateSoftwareOutputSurfaceAndResourceProvider();
337 raster_buffer_provider_ = 338 raster_buffer_provider =
338 BitmapRasterBufferProvider::Create(resource_provider_.get()); 339 BitmapRasterBufferProvider::Create(resource_provider_.get());
339 break; 340 break;
340 } 341 }
341 342
342 DCHECK(raster_buffer_provider_); 343 DCHECK(raster_buffer_provider);
343 344
344 tile_task_manager_ = TileTaskManagerImpl::Create(task_graph_runner_.get()); 345 tile_task_manager_ = TileTaskManagerImpl::Create(
346 std::move(raster_buffer_provider), task_graph_runner_.get());
345 } 347 }
346 void TearDown() override { 348 void TearDown() override {
347 tile_task_manager_->Shutdown(); 349 tile_task_manager_->Shutdown();
348 tile_task_manager_->CheckForCompletedTasks(); 350 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 raster_buffer_provider_->AcquireBufferForRaster( 358 return tile_task_manager_->GetRasterBufferProvider()
359 resource, resource_content_id, previous_content_id); 359 ->AcquireBufferForRaster(resource, resource_content_id,
360 previous_content_id);
360 } 361 }
361 void ReleaseBufferForRaster(std::unique_ptr<RasterBuffer> buffer) override { 362 void ReleaseBufferForRaster(std::unique_ptr<RasterBuffer> buffer) override {
362 raster_buffer_provider_->ReleaseBufferForRaster(std::move(buffer)); 363 tile_task_manager_->GetRasterBufferProvider()->ReleaseBufferForRaster(
364 std::move(buffer));
363 } 365 }
364 366
365 void RunMessageLoopUntilAllTasksHaveCompleted() { 367 void RunMessageLoopUntilAllTasksHaveCompleted() {
366 task_graph_runner_->RunUntilIdle(); 368 task_graph_runner_->RunUntilIdle();
367 task_runner_->RunUntilIdle(); 369 task_runner_->RunUntilIdle();
368 } 370 }
369 371
370 void RunScheduleTasksTest(const std::string& test_name, 372 void RunScheduleTasksTest(const std::string& test_name,
371 unsigned num_raster_tasks, 373 unsigned num_raster_tasks,
372 unsigned num_image_decode_tasks) { 374 unsigned num_image_decode_tasks) {
373 TileTask::Vector image_decode_tasks; 375 TileTask::Vector image_decode_tasks;
374 RasterTaskVector raster_tasks; 376 RasterTaskVector raster_tasks;
375 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 377 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
376 CreateRasterTasks(this, num_raster_tasks, image_decode_tasks, 378 CreateRasterTasks(this, num_raster_tasks, image_decode_tasks,
377 &raster_tasks); 379 &raster_tasks);
378 380
379 // Avoid unnecessary heap allocations by reusing the same graph. 381 // Avoid unnecessary heap allocations by reusing the same graph.
380 TaskGraph graph; 382 TaskGraph graph;
381 383
382 timer_.Reset(); 384 timer_.Reset();
383 do { 385 do {
384 graph.Reset(); 386 graph.Reset();
385 ResetRasterTasks(raster_tasks); 387 ResetRasterTasks(raster_tasks);
386 BuildTileTaskGraph(&graph, raster_tasks); 388 BuildTileTaskGraph(&graph, raster_tasks);
387 raster_buffer_provider_->OrderingBarrier();
388 tile_task_manager_->ScheduleTasks(&graph); 389 tile_task_manager_->ScheduleTasks(&graph);
389 tile_task_manager_->CheckForCompletedTasks(); 390 tile_task_manager_->CheckForCompletedTasks();
390 timer_.NextLap(); 391 timer_.NextLap();
391 } while (!timer_.HasTimeLimitExpired()); 392 } while (!timer_.HasTimeLimitExpired());
392 393
393 TaskGraph empty; 394 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();
426 tile_task_manager_->ScheduleTasks(&graph); 425 tile_task_manager_->ScheduleTasks(&graph);
427 tile_task_manager_->CheckForCompletedTasks(); 426 tile_task_manager_->CheckForCompletedTasks();
428 ++count; 427 ++count;
429 timer_.NextLap(); 428 timer_.NextLap();
430 } while (!timer_.HasTimeLimitExpired()); 429 } while (!timer_.HasTimeLimitExpired());
431 430
432 TaskGraph empty; 431 TaskGraph empty;
433 raster_buffer_provider_->OrderingBarrier();
434 tile_task_manager_->ScheduleTasks(&empty); 432 tile_task_manager_->ScheduleTasks(&empty);
435 RunMessageLoopUntilAllTasksHaveCompleted(); 433 RunMessageLoopUntilAllTasksHaveCompleted();
436 tile_task_manager_->CheckForCompletedTasks(); 434 tile_task_manager_->CheckForCompletedTasks();
437 435
438 perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(), 436 perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(),
439 test_name, timer_.LapsPerSecond(), "runs/s", true); 437 test_name, timer_.LapsPerSecond(), "runs/s", true);
440 } 438 }
441 439
442 void RunScheduleAndExecuteTasksTest(const std::string& test_name, 440 void RunScheduleAndExecuteTasksTest(const std::string& test_name,
443 unsigned num_raster_tasks, 441 unsigned num_raster_tasks,
444 unsigned num_image_decode_tasks) { 442 unsigned num_image_decode_tasks) {
445 TileTask::Vector image_decode_tasks; 443 TileTask::Vector image_decode_tasks;
446 RasterTaskVector raster_tasks; 444 RasterTaskVector raster_tasks;
447 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 445 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
448 CreateRasterTasks(this, num_raster_tasks, image_decode_tasks, 446 CreateRasterTasks(this, num_raster_tasks, image_decode_tasks,
449 &raster_tasks); 447 &raster_tasks);
450 448
451 // Avoid unnecessary heap allocations by reusing the same graph. 449 // Avoid unnecessary heap allocations by reusing the same graph.
452 TaskGraph graph; 450 TaskGraph graph;
453 451
454 timer_.Reset(); 452 timer_.Reset();
455 do { 453 do {
456 graph.Reset(); 454 graph.Reset();
457 BuildTileTaskGraph(&graph, raster_tasks); 455 BuildTileTaskGraph(&graph, raster_tasks);
458 raster_buffer_provider_->OrderingBarrier();
459 tile_task_manager_->ScheduleTasks(&graph); 456 tile_task_manager_->ScheduleTasks(&graph);
460 RunMessageLoopUntilAllTasksHaveCompleted(); 457 RunMessageLoopUntilAllTasksHaveCompleted();
461 timer_.NextLap(); 458 timer_.NextLap();
462 } while (!timer_.HasTimeLimitExpired()); 459 } while (!timer_.HasTimeLimitExpired());
463 460
464 TaskGraph empty; 461 TaskGraph empty;
465 raster_buffer_provider_->OrderingBarrier();
466 tile_task_manager_->ScheduleTasks(&empty); 462 tile_task_manager_->ScheduleTasks(&empty);
467 RunMessageLoopUntilAllTasksHaveCompleted(); 463 RunMessageLoopUntilAllTasksHaveCompleted();
468 464
469 perf_test::PrintResult("schedule_and_execute_tasks", TestModifierString(), 465 perf_test::PrintResult("schedule_and_execute_tasks", TestModifierString(),
470 test_name, timer_.LapsPerSecond(), "runs/s", true); 466 test_name, timer_.LapsPerSecond(), "runs/s", true);
471 } 467 }
472 468
473 private: 469 private:
474 void Create3dOutputSurfaceAndResourceProvider() { 470 void Create3dOutputSurfaceAndResourceProvider() {
475 output_surface_ = FakeOutputSurface::Create3d(compositor_context_provider_, 471 output_surface_ = FakeOutputSurface::Create3d(compositor_context_provider_,
(...skipping 20 matching lines...) Expand all
496 case RASTER_BUFFER_PROVIDER_TYPE_GPU: 492 case RASTER_BUFFER_PROVIDER_TYPE_GPU:
497 return std::string("_gpu_raster_buffer_provider"); 493 return std::string("_gpu_raster_buffer_provider");
498 case RASTER_BUFFER_PROVIDER_TYPE_BITMAP: 494 case RASTER_BUFFER_PROVIDER_TYPE_BITMAP:
499 return std::string("_bitmap_raster_buffer_provider"); 495 return std::string("_bitmap_raster_buffer_provider");
500 } 496 }
501 NOTREACHED(); 497 NOTREACHED();
502 return std::string(); 498 return std::string();
503 } 499 }
504 500
505 std::unique_ptr<TileTaskManager> tile_task_manager_; 501 std::unique_ptr<TileTaskManager> tile_task_manager_;
506 std::unique_ptr<RasterBufferProvider> raster_buffer_provider_;
507 TestGpuMemoryBufferManager gpu_memory_buffer_manager_; 502 TestGpuMemoryBufferManager gpu_memory_buffer_manager_;
508 TestSharedBitmapManager shared_bitmap_manager_; 503 TestSharedBitmapManager shared_bitmap_manager_;
509 }; 504 };
510 505
511 TEST_P(RasterBufferProviderPerfTest, ScheduleTasks) { 506 TEST_P(RasterBufferProviderPerfTest, ScheduleTasks) {
512 RunScheduleTasksTest("1_0", 1, 0); 507 RunScheduleTasksTest("1_0", 1, 0);
513 RunScheduleTasksTest("32_0", 32, 0); 508 RunScheduleTasksTest("32_0", 32, 0);
514 RunScheduleTasksTest("1_1", 1, 1); 509 RunScheduleTasksTest("1_1", 1, 1);
515 RunScheduleTasksTest("32_1", 32, 1); 510 RunScheduleTasksTest("32_1", 32, 1);
516 RunScheduleTasksTest("1_4", 1, 4); 511 RunScheduleTasksTest("1_4", 1, 4);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 RunBuildTileTaskGraphTest("1_0", 1, 0); 580 RunBuildTileTaskGraphTest("1_0", 1, 0);
586 RunBuildTileTaskGraphTest("32_0", 32, 0); 581 RunBuildTileTaskGraphTest("32_0", 32, 0);
587 RunBuildTileTaskGraphTest("1_1", 1, 1); 582 RunBuildTileTaskGraphTest("1_1", 1, 1);
588 RunBuildTileTaskGraphTest("32_1", 32, 1); 583 RunBuildTileTaskGraphTest("32_1", 32, 1);
589 RunBuildTileTaskGraphTest("1_4", 1, 4); 584 RunBuildTileTaskGraphTest("1_4", 1, 4);
590 RunBuildTileTaskGraphTest("32_4", 32, 4); 585 RunBuildTileTaskGraphTest("32_4", 32, 4);
591 } 586 }
592 587
593 } // namespace 588 } // namespace
594 } // namespace cc 589 } // namespace cc
OLDNEW
« no previous file with comments | « cc/raster/raster_buffer_provider.h ('k') | cc/raster/raster_buffer_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698