| 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" |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl); | 180 DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl); |
| 181 }; | 181 }; |
| 182 | 182 |
| 183 class RasterBufferProviderPerfTestBase { | 183 class RasterBufferProviderPerfTestBase { |
| 184 public: | 184 public: |
| 185 typedef std::vector<scoped_refptr<TileTask>> RasterTaskVector; | 185 typedef std::vector<scoped_refptr<TileTask>> RasterTaskVector; |
| 186 | 186 |
| 187 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW, ALL }; | 187 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW, ALL }; |
| 188 | 188 |
| 189 RasterBufferProviderPerfTestBase() | 189 RasterBufferProviderPerfTestBase() |
| 190 : context_provider_(make_scoped_refptr(new PerfContextProvider)), | 190 : compositor_context_provider_( |
| 191 make_scoped_refptr(new PerfContextProvider)), |
| 192 worker_context_provider_(make_scoped_refptr(new PerfContextProvider)), |
| 191 task_runner_(new base::TestSimpleTaskRunner), | 193 task_runner_(new base::TestSimpleTaskRunner), |
| 192 task_graph_runner_(new SynchronousTaskGraphRunner), | 194 task_graph_runner_(new SynchronousTaskGraphRunner), |
| 193 timer_(kWarmupRuns, | 195 timer_(kWarmupRuns, |
| 194 base::TimeDelta::FromMilliseconds(kTimeLimitMillis), | 196 base::TimeDelta::FromMilliseconds(kTimeLimitMillis), |
| 195 kTimeCheckInterval) {} | 197 kTimeCheckInterval) {} |
| 196 | 198 |
| 197 void CreateImageDecodeTasks(unsigned num_image_decode_tasks, | 199 void CreateImageDecodeTasks(unsigned num_image_decode_tasks, |
| 198 TileTask::Vector* image_decode_tasks) { | 200 TileTask::Vector* image_decode_tasks) { |
| 199 for (unsigned i = 0; i < num_image_decode_tasks; ++i) | 201 for (unsigned i = 0; i < num_image_decode_tasks; ++i) |
| 200 image_decode_tasks->push_back(new PerfImageDecodeTaskImpl); | 202 image_decode_tasks->push_back(new PerfImageDecodeTaskImpl); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 TaskGraph::Edge(decode_task.get(), raster_task.get())); | 243 TaskGraph::Edge(decode_task.get(), raster_task.get())); |
| 242 } | 244 } |
| 243 | 245 |
| 244 graph->nodes.push_back(TaskGraph::Node( | 246 graph->nodes.push_back(TaskGraph::Node( |
| 245 raster_task.get(), 0u /* group */, priority, | 247 raster_task.get(), 0u /* group */, priority, |
| 246 static_cast<uint32_t>(raster_task->dependencies().size()))); | 248 static_cast<uint32_t>(raster_task->dependencies().size()))); |
| 247 } | 249 } |
| 248 } | 250 } |
| 249 | 251 |
| 250 protected: | 252 protected: |
| 251 scoped_refptr<ContextProvider> context_provider_; | 253 scoped_refptr<ContextProvider> compositor_context_provider_; |
| 254 scoped_refptr<ContextProvider> worker_context_provider_; |
| 252 FakeOutputSurfaceClient output_surface_client_; | 255 FakeOutputSurfaceClient output_surface_client_; |
| 253 std::unique_ptr<FakeOutputSurface> output_surface_; | 256 std::unique_ptr<FakeOutputSurface> output_surface_; |
| 254 std::unique_ptr<ResourceProvider> resource_provider_; | 257 std::unique_ptr<ResourceProvider> resource_provider_; |
| 255 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | 258 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
| 256 std::unique_ptr<SynchronousTaskGraphRunner> task_graph_runner_; | 259 std::unique_ptr<SynchronousTaskGraphRunner> task_graph_runner_; |
| 257 LapTimer timer_; | 260 LapTimer timer_; |
| 258 }; | 261 }; |
| 259 | 262 |
| 260 class RasterBufferProviderPerfTest | 263 class RasterBufferProviderPerfTest |
| 261 : public RasterBufferProviderPerfTestBase, | 264 : public RasterBufferProviderPerfTestBase, |
| 262 public testing::TestWithParam<RasterBufferProviderType> { | 265 public testing::TestWithParam<RasterBufferProviderType> { |
| 263 public: | 266 public: |
| 264 // Overridden from testing::Test: | 267 // Overridden from testing::Test: |
| 265 void SetUp() override { | 268 void SetUp() override { |
| 266 std::unique_ptr<RasterBufferProvider> raster_buffer_provider; | 269 std::unique_ptr<RasterBufferProvider> raster_buffer_provider; |
| 267 switch (GetParam()) { | 270 switch (GetParam()) { |
| 268 case RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY: | 271 case RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY: |
| 269 Create3dOutputSurfaceAndResourceProvider(); | 272 Create3dOutputSurfaceAndResourceProvider(); |
| 270 raster_buffer_provider = ZeroCopyRasterBufferProvider::Create( | 273 raster_buffer_provider = ZeroCopyRasterBufferProvider::Create( |
| 271 resource_provider_.get(), PlatformColor::BestTextureFormat()); | 274 resource_provider_.get(), PlatformColor::BestTextureFormat()); |
| 272 break; | 275 break; |
| 273 case RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY: | 276 case RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY: |
| 274 Create3dOutputSurfaceAndResourceProvider(); | 277 Create3dOutputSurfaceAndResourceProvider(); |
| 275 raster_buffer_provider = OneCopyRasterBufferProvider::Create( | 278 raster_buffer_provider = base::MakeUnique<OneCopyRasterBufferProvider>( |
| 276 task_runner_.get(), context_provider_.get(), | 279 task_runner_.get(), compositor_context_provider_.get(), |
| 277 resource_provider_.get(), std::numeric_limits<int>::max(), false, | 280 worker_context_provider_.get(), resource_provider_.get(), |
| 281 std::numeric_limits<int>::max(), false, |
| 278 std::numeric_limits<int>::max(), | 282 std::numeric_limits<int>::max(), |
| 279 PlatformColor::BestTextureFormat()); | 283 PlatformColor::BestTextureFormat()); |
| 280 break; | 284 break; |
| 281 case RASTER_BUFFER_PROVIDER_TYPE_GPU: | 285 case RASTER_BUFFER_PROVIDER_TYPE_GPU: |
| 282 Create3dOutputSurfaceAndResourceProvider(); | 286 Create3dOutputSurfaceAndResourceProvider(); |
| 283 raster_buffer_provider = GpuRasterBufferProvider::Create( | 287 raster_buffer_provider = base::MakeUnique<GpuRasterBufferProvider>( |
| 284 context_provider_.get(), resource_provider_.get(), false, 0); | 288 compositor_context_provider_.get(), worker_context_provider_.get(), |
| 289 resource_provider_.get(), false, 0); |
| 285 break; | 290 break; |
| 286 case RASTER_BUFFER_PROVIDER_TYPE_BITMAP: | 291 case RASTER_BUFFER_PROVIDER_TYPE_BITMAP: |
| 287 CreateSoftwareOutputSurfaceAndResourceProvider(); | 292 CreateSoftwareOutputSurfaceAndResourceProvider(); |
| 288 raster_buffer_provider = | 293 raster_buffer_provider = |
| 289 BitmapRasterBufferProvider::Create(resource_provider_.get()); | 294 BitmapRasterBufferProvider::Create(resource_provider_.get()); |
| 290 break; | 295 break; |
| 291 } | 296 } |
| 292 | 297 |
| 293 DCHECK(raster_buffer_provider); | 298 DCHECK(raster_buffer_provider); |
| 294 | 299 |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 390 TaskGraph empty; | 395 TaskGraph empty; |
| 391 tile_task_manager_->ScheduleTasks(&empty); | 396 tile_task_manager_->ScheduleTasks(&empty); |
| 392 RunMessageLoopUntilAllTasksHaveCompleted(); | 397 RunMessageLoopUntilAllTasksHaveCompleted(); |
| 393 | 398 |
| 394 perf_test::PrintResult("schedule_and_execute_tasks", TestModifierString(), | 399 perf_test::PrintResult("schedule_and_execute_tasks", TestModifierString(), |
| 395 test_name, timer_.LapsPerSecond(), "runs/s", true); | 400 test_name, timer_.LapsPerSecond(), "runs/s", true); |
| 396 } | 401 } |
| 397 | 402 |
| 398 private: | 403 private: |
| 399 void Create3dOutputSurfaceAndResourceProvider() { | 404 void Create3dOutputSurfaceAndResourceProvider() { |
| 400 output_surface_ = FakeOutputSurface::Create3d(context_provider_); | 405 output_surface_ = FakeOutputSurface::Create3d(compositor_context_provider_, |
| 406 worker_context_provider_); |
| 401 CHECK(output_surface_->BindToClient(&output_surface_client_)); | 407 CHECK(output_surface_->BindToClient(&output_surface_client_)); |
| 402 resource_provider_ = FakeResourceProvider::Create( | 408 resource_provider_ = FakeResourceProvider::Create( |
| 403 output_surface_.get(), nullptr, &gpu_memory_buffer_manager_); | 409 output_surface_.get(), nullptr, &gpu_memory_buffer_manager_); |
| 404 } | 410 } |
| 405 | 411 |
| 406 void CreateSoftwareOutputSurfaceAndResourceProvider() { | 412 void CreateSoftwareOutputSurfaceAndResourceProvider() { |
| 407 output_surface_ = FakeOutputSurface::CreateSoftware( | 413 output_surface_ = FakeOutputSurface::CreateSoftware( |
| 408 base::WrapUnique(new SoftwareOutputDevice)); | 414 base::WrapUnique(new SoftwareOutputDevice)); |
| 409 CHECK(output_surface_->BindToClient(&output_surface_client_)); | 415 CHECK(output_surface_->BindToClient(&output_surface_client_)); |
| 410 resource_provider_ = FakeResourceProvider::Create( | 416 resource_provider_ = FakeResourceProvider::Create( |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 464 RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY, | 470 RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY, |
| 465 RASTER_BUFFER_PROVIDER_TYPE_GPU, | 471 RASTER_BUFFER_PROVIDER_TYPE_GPU, |
| 466 RASTER_BUFFER_PROVIDER_TYPE_BITMAP)); | 472 RASTER_BUFFER_PROVIDER_TYPE_BITMAP)); |
| 467 | 473 |
| 468 class RasterBufferProviderCommonPerfTest | 474 class RasterBufferProviderCommonPerfTest |
| 469 : public RasterBufferProviderPerfTestBase, | 475 : public RasterBufferProviderPerfTestBase, |
| 470 public testing::Test { | 476 public testing::Test { |
| 471 public: | 477 public: |
| 472 // Overridden from testing::Test: | 478 // Overridden from testing::Test: |
| 473 void SetUp() override { | 479 void SetUp() override { |
| 474 output_surface_ = FakeOutputSurface::Create3d(context_provider_); | 480 output_surface_ = FakeOutputSurface::Create3d(compositor_context_provider_, |
| 481 worker_context_provider_); |
| 475 CHECK(output_surface_->BindToClient(&output_surface_client_)); | 482 CHECK(output_surface_->BindToClient(&output_surface_client_)); |
| 476 resource_provider_ = | 483 resource_provider_ = |
| 477 FakeResourceProvider::Create(output_surface_.get(), nullptr); | 484 FakeResourceProvider::Create(output_surface_.get(), nullptr); |
| 478 } | 485 } |
| 479 | 486 |
| 480 void RunBuildTileTaskGraphTest(const std::string& test_name, | 487 void RunBuildTileTaskGraphTest(const std::string& test_name, |
| 481 unsigned num_raster_tasks, | 488 unsigned num_raster_tasks, |
| 482 unsigned num_image_decode_tasks) { | 489 unsigned num_image_decode_tasks) { |
| 483 TileTask::Vector image_decode_tasks; | 490 TileTask::Vector image_decode_tasks; |
| 484 RasterTaskVector raster_tasks; | 491 RasterTaskVector raster_tasks; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 504 RunBuildTileTaskGraphTest("1_0", 1, 0); | 511 RunBuildTileTaskGraphTest("1_0", 1, 0); |
| 505 RunBuildTileTaskGraphTest("32_0", 32, 0); | 512 RunBuildTileTaskGraphTest("32_0", 32, 0); |
| 506 RunBuildTileTaskGraphTest("1_1", 1, 1); | 513 RunBuildTileTaskGraphTest("1_1", 1, 1); |
| 507 RunBuildTileTaskGraphTest("32_1", 32, 1); | 514 RunBuildTileTaskGraphTest("32_1", 32, 1); |
| 508 RunBuildTileTaskGraphTest("1_4", 1, 4); | 515 RunBuildTileTaskGraphTest("1_4", 1, 4); |
| 509 RunBuildTileTaskGraphTest("32_4", 32, 4); | 516 RunBuildTileTaskGraphTest("32_4", 32, 4); |
| 510 } | 517 } |
| 511 | 518 |
| 512 } // namespace | 519 } // namespace |
| 513 } // namespace cc | 520 } // namespace cc |
| OLD | NEW |