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 <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_cache_controller.h" | 13 #include "cc/output/context_cache_controller.h" |
14 #include "cc/output/context_provider.h" | 14 #include "cc/output/context_provider.h" |
15 #include "cc/raster/bitmap_raster_buffer_provider.h" | 15 #include "cc/raster/bitmap_raster_buffer_provider.h" |
16 #include "cc/raster/gpu_raster_buffer_provider.h" | 16 #include "cc/raster/gpu_raster_buffer_provider.h" |
17 #include "cc/raster/one_copy_raster_buffer_provider.h" | 17 #include "cc/raster/one_copy_raster_buffer_provider.h" |
18 #include "cc/raster/raster_buffer_provider.h" | 18 #include "cc/raster/raster_buffer_provider.h" |
19 #include "cc/raster/synchronous_task_graph_runner.h" | 19 #include "cc/raster/synchronous_task_graph_runner.h" |
20 #include "cc/raster/zero_copy_raster_buffer_provider.h" | 20 #include "cc/raster/zero_copy_raster_buffer_provider.h" |
21 #include "cc/resources/platform_color.h" | 21 #include "cc/resources/platform_color.h" |
22 #include "cc/resources/resource_pool.h" | 22 #include "cc/resources/resource_pool.h" |
23 #include "cc/resources/resource_provider.h" | 23 #include "cc/resources/resource_provider.h" |
24 #include "cc/resources/scoped_resource.h" | 24 #include "cc/resources/scoped_resource.h" |
25 #include "cc/test/fake_output_surface.h" | |
26 #include "cc/test/fake_output_surface_client.h" | |
27 #include "cc/test/fake_resource_provider.h" | 25 #include "cc/test/fake_resource_provider.h" |
| 26 #include "cc/test/test_context_provider.h" |
28 #include "cc/test/test_context_support.h" | 27 #include "cc/test/test_context_support.h" |
29 #include "cc/test/test_gpu_memory_buffer_manager.h" | 28 #include "cc/test/test_gpu_memory_buffer_manager.h" |
30 #include "cc/test/test_shared_bitmap_manager.h" | 29 #include "cc/test/test_shared_bitmap_manager.h" |
31 #include "cc/test/test_web_graphics_context_3d.h" | 30 #include "cc/test/test_web_graphics_context_3d.h" |
32 #include "cc/tiles/tile_task_manager.h" | 31 #include "cc/tiles/tile_task_manager.h" |
33 #include "gpu/command_buffer/common/sync_token.h" | 32 #include "gpu/command_buffer/common/sync_token.h" |
34 #include "testing/gtest/include/gtest/gtest.h" | 33 #include "testing/gtest/include/gtest/gtest.h" |
35 #include "testing/perf/perf_test.h" | 34 #include "testing/perf/perf_test.h" |
36 #include "third_party/khronos/GLES2/gl2.h" | 35 #include "third_party/khronos/GLES2/gl2.h" |
37 #include "third_party/skia/include/gpu/GrContext.h" | 36 #include "third_party/skia/include/gpu/GrContext.h" |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 | 302 |
304 graph->nodes.push_back(TaskGraph::Node( | 303 graph->nodes.push_back(TaskGraph::Node( |
305 raster_task.get(), 0u /* group */, priority, | 304 raster_task.get(), 0u /* group */, priority, |
306 static_cast<uint32_t>(raster_task->dependencies().size()))); | 305 static_cast<uint32_t>(raster_task->dependencies().size()))); |
307 } | 306 } |
308 } | 307 } |
309 | 308 |
310 protected: | 309 protected: |
311 scoped_refptr<ContextProvider> compositor_context_provider_; | 310 scoped_refptr<ContextProvider> compositor_context_provider_; |
312 scoped_refptr<ContextProvider> worker_context_provider_; | 311 scoped_refptr<ContextProvider> worker_context_provider_; |
313 FakeOutputSurfaceClient output_surface_client_; | |
314 std::unique_ptr<FakeOutputSurface> output_surface_; | |
315 std::unique_ptr<ResourceProvider> resource_provider_; | 312 std::unique_ptr<ResourceProvider> resource_provider_; |
316 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | 313 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
317 std::unique_ptr<SynchronousTaskGraphRunner> task_graph_runner_; | 314 std::unique_ptr<SynchronousTaskGraphRunner> task_graph_runner_; |
318 LapTimer timer_; | 315 LapTimer timer_; |
319 }; | 316 }; |
320 | 317 |
321 class RasterBufferProviderPerfTest | 318 class RasterBufferProviderPerfTest |
322 : public RasterBufferProviderPerfTestBase, | 319 : public RasterBufferProviderPerfTestBase, |
323 public PerfRasterBufferProviderHelper, | 320 public PerfRasterBufferProviderHelper, |
324 public testing::TestWithParam<RasterBufferProviderType> { | 321 public testing::TestWithParam<RasterBufferProviderType> { |
325 public: | 322 public: |
326 // Overridden from testing::Test: | 323 // Overridden from testing::Test: |
327 void SetUp() override { | 324 void SetUp() override { |
328 switch (GetParam()) { | 325 switch (GetParam()) { |
329 case RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY: | 326 case RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY: |
330 Create3dOutputSurfaceAndResourceProvider(); | 327 Create3dResourceProvider(); |
331 raster_buffer_provider_ = ZeroCopyRasterBufferProvider::Create( | 328 raster_buffer_provider_ = ZeroCopyRasterBufferProvider::Create( |
332 resource_provider_.get(), PlatformColor::BestTextureFormat()); | 329 resource_provider_.get(), PlatformColor::BestTextureFormat()); |
333 break; | 330 break; |
334 case RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY: | 331 case RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY: |
335 Create3dOutputSurfaceAndResourceProvider(); | 332 Create3dResourceProvider(); |
336 raster_buffer_provider_ = base::MakeUnique<OneCopyRasterBufferProvider>( | 333 raster_buffer_provider_ = base::MakeUnique<OneCopyRasterBufferProvider>( |
337 task_runner_.get(), compositor_context_provider_.get(), | 334 task_runner_.get(), compositor_context_provider_.get(), |
338 worker_context_provider_.get(), resource_provider_.get(), | 335 worker_context_provider_.get(), resource_provider_.get(), |
339 std::numeric_limits<int>::max(), false, | 336 std::numeric_limits<int>::max(), false, |
340 std::numeric_limits<int>::max(), PlatformColor::BestTextureFormat(), | 337 std::numeric_limits<int>::max(), PlatformColor::BestTextureFormat(), |
341 false); | 338 false); |
342 break; | 339 break; |
343 case RASTER_BUFFER_PROVIDER_TYPE_GPU: | 340 case RASTER_BUFFER_PROVIDER_TYPE_GPU: |
344 Create3dOutputSurfaceAndResourceProvider(); | 341 Create3dResourceProvider(); |
345 raster_buffer_provider_ = base::MakeUnique<GpuRasterBufferProvider>( | 342 raster_buffer_provider_ = base::MakeUnique<GpuRasterBufferProvider>( |
346 compositor_context_provider_.get(), worker_context_provider_.get(), | 343 compositor_context_provider_.get(), worker_context_provider_.get(), |
347 resource_provider_.get(), false, 0, false); | 344 resource_provider_.get(), false, 0, false); |
348 break; | 345 break; |
349 case RASTER_BUFFER_PROVIDER_TYPE_BITMAP: | 346 case RASTER_BUFFER_PROVIDER_TYPE_BITMAP: |
350 CreateSoftwareOutputSurfaceAndResourceProvider(); | 347 CreateSoftwareResourceProvider(); |
351 raster_buffer_provider_ = | 348 raster_buffer_provider_ = |
352 BitmapRasterBufferProvider::Create(resource_provider_.get()); | 349 BitmapRasterBufferProvider::Create(resource_provider_.get()); |
353 break; | 350 break; |
354 } | 351 } |
355 | 352 |
356 DCHECK(raster_buffer_provider_); | 353 DCHECK(raster_buffer_provider_); |
357 | 354 |
358 tile_task_manager_ = TileTaskManagerImpl::Create(task_graph_runner_.get()); | 355 tile_task_manager_ = TileTaskManagerImpl::Create(task_graph_runner_.get()); |
359 } | 356 } |
360 void TearDown() override { | 357 void TearDown() override { |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
478 TaskGraph empty; | 475 TaskGraph empty; |
479 raster_buffer_provider_->OrderingBarrier(); | 476 raster_buffer_provider_->OrderingBarrier(); |
480 tile_task_manager_->ScheduleTasks(&empty); | 477 tile_task_manager_->ScheduleTasks(&empty); |
481 RunMessageLoopUntilAllTasksHaveCompleted(); | 478 RunMessageLoopUntilAllTasksHaveCompleted(); |
482 | 479 |
483 perf_test::PrintResult("schedule_and_execute_tasks", TestModifierString(), | 480 perf_test::PrintResult("schedule_and_execute_tasks", TestModifierString(), |
484 test_name, timer_.LapsPerSecond(), "runs/s", true); | 481 test_name, timer_.LapsPerSecond(), "runs/s", true); |
485 } | 482 } |
486 | 483 |
487 private: | 484 private: |
488 void Create3dOutputSurfaceAndResourceProvider() { | 485 void Create3dResourceProvider() { |
489 output_surface_ = FakeOutputSurface::Create3d(compositor_context_provider_, | 486 resource_provider_ = |
490 worker_context_provider_); | 487 FakeResourceProvider::Create(compositor_context_provider_.get(), |
491 CHECK(output_surface_->BindToClient(&output_surface_client_)); | 488 nullptr, &gpu_memory_buffer_manager_); |
492 resource_provider_ = FakeResourceProvider::Create( | |
493 output_surface_.get(), nullptr, &gpu_memory_buffer_manager_); | |
494 } | 489 } |
495 | 490 |
496 void CreateSoftwareOutputSurfaceAndResourceProvider() { | 491 void CreateSoftwareResourceProvider() { |
497 output_surface_ = FakeOutputSurface::CreateSoftware( | 492 resource_provider_ = |
498 base::WrapUnique(new SoftwareOutputDevice)); | 493 FakeResourceProvider::Create(nullptr, &shared_bitmap_manager_, nullptr); |
499 CHECK(output_surface_->BindToClient(&output_surface_client_)); | |
500 resource_provider_ = FakeResourceProvider::Create( | |
501 output_surface_.get(), &shared_bitmap_manager_, nullptr); | |
502 } | 494 } |
503 | 495 |
504 std::string TestModifierString() const { | 496 std::string TestModifierString() const { |
505 switch (GetParam()) { | 497 switch (GetParam()) { |
506 case RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY: | 498 case RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY: |
507 return std::string("_zero_copy_raster_buffer_provider"); | 499 return std::string("_zero_copy_raster_buffer_provider"); |
508 case RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY: | 500 case RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY: |
509 return std::string("_one_copy_raster_buffer_provider"); | 501 return std::string("_one_copy_raster_buffer_provider"); |
510 case RASTER_BUFFER_PROVIDER_TYPE_GPU: | 502 case RASTER_BUFFER_PROVIDER_TYPE_GPU: |
511 return std::string("_gpu_raster_buffer_provider"); | 503 return std::string("_gpu_raster_buffer_provider"); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
555 RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY, | 547 RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY, |
556 RASTER_BUFFER_PROVIDER_TYPE_GPU, | 548 RASTER_BUFFER_PROVIDER_TYPE_GPU, |
557 RASTER_BUFFER_PROVIDER_TYPE_BITMAP)); | 549 RASTER_BUFFER_PROVIDER_TYPE_BITMAP)); |
558 | 550 |
559 class RasterBufferProviderCommonPerfTest | 551 class RasterBufferProviderCommonPerfTest |
560 : public RasterBufferProviderPerfTestBase, | 552 : public RasterBufferProviderPerfTestBase, |
561 public testing::Test { | 553 public testing::Test { |
562 public: | 554 public: |
563 // Overridden from testing::Test: | 555 // Overridden from testing::Test: |
564 void SetUp() override { | 556 void SetUp() override { |
565 output_surface_ = FakeOutputSurface::Create3d(compositor_context_provider_, | 557 resource_provider_ = FakeResourceProvider::Create( |
566 worker_context_provider_); | 558 compositor_context_provider_.get(), nullptr); |
567 CHECK(output_surface_->BindToClient(&output_surface_client_)); | |
568 resource_provider_ = | |
569 FakeResourceProvider::Create(output_surface_.get(), nullptr); | |
570 } | 559 } |
571 | 560 |
572 void RunBuildTileTaskGraphTest(const std::string& test_name, | 561 void RunBuildTileTaskGraphTest(const std::string& test_name, |
573 unsigned num_raster_tasks, | 562 unsigned num_raster_tasks, |
574 unsigned num_image_decode_tasks) { | 563 unsigned num_image_decode_tasks) { |
575 TileTask::Vector image_decode_tasks; | 564 TileTask::Vector image_decode_tasks; |
576 RasterTaskVector raster_tasks; | 565 RasterTaskVector raster_tasks; |
577 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); | 566 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); |
578 CreateRasterTasks(nullptr, num_raster_tasks, image_decode_tasks, | 567 CreateRasterTasks(nullptr, num_raster_tasks, image_decode_tasks, |
579 &raster_tasks); | 568 &raster_tasks); |
(...skipping 19 matching lines...) Expand all Loading... |
599 RunBuildTileTaskGraphTest("1_0", 1, 0); | 588 RunBuildTileTaskGraphTest("1_0", 1, 0); |
600 RunBuildTileTaskGraphTest("32_0", 32, 0); | 589 RunBuildTileTaskGraphTest("32_0", 32, 0); |
601 RunBuildTileTaskGraphTest("1_1", 1, 1); | 590 RunBuildTileTaskGraphTest("1_1", 1, 1); |
602 RunBuildTileTaskGraphTest("32_1", 32, 1); | 591 RunBuildTileTaskGraphTest("32_1", 32, 1); |
603 RunBuildTileTaskGraphTest("1_4", 1, 4); | 592 RunBuildTileTaskGraphTest("1_4", 1, 4); |
604 RunBuildTileTaskGraphTest("32_4", 32, 4); | 593 RunBuildTileTaskGraphTest("32_4", 32, 4); |
605 } | 594 } |
606 | 595 |
607 } // namespace | 596 } // namespace |
608 } // namespace cc | 597 } // namespace cc |
OLD | NEW |