| Index: cc/raster/raster_buffer_provider_perftest.cc
|
| diff --git a/cc/raster/tile_task_worker_pool_perftest.cc b/cc/raster/raster_buffer_provider_perftest.cc
|
| similarity index 73%
|
| rename from cc/raster/tile_task_worker_pool_perftest.cc
|
| rename to cc/raster/raster_buffer_provider_perftest.cc
|
| index 12dd63d2eab8deb024a1435465f02eb1fffce249..c031b4c43d95d2c70ff92db9bfadc2fa30ec4c46 100644
|
| --- a/cc/raster/tile_task_worker_pool_perftest.cc
|
| +++ b/cc/raster/raster_buffer_provider_perftest.cc
|
| @@ -11,13 +11,13 @@
|
| #include "base/time/time.h"
|
| #include "cc/debug/lap_timer.h"
|
| #include "cc/output/context_provider.h"
|
| -#include "cc/raster/bitmap_tile_task_worker_pool.h"
|
| +#include "cc/raster/bitmap_raster_buffer_provider.h"
|
| +#include "cc/raster/gpu_raster_buffer_provider.h"
|
| #include "cc/raster/gpu_rasterizer.h"
|
| -#include "cc/raster/gpu_tile_task_worker_pool.h"
|
| -#include "cc/raster/one_copy_tile_task_worker_pool.h"
|
| +#include "cc/raster/one_copy_raster_buffer_provider.h"
|
| +#include "cc/raster/raster_buffer_provider.h"
|
| #include "cc/raster/synchronous_task_graph_runner.h"
|
| -#include "cc/raster/tile_task_worker_pool.h"
|
| -#include "cc/raster/zero_copy_tile_task_worker_pool.h"
|
| +#include "cc/raster/zero_copy_raster_buffer_provider.h"
|
| #include "cc/resources/resource_pool.h"
|
| #include "cc/resources/resource_provider.h"
|
| #include "cc/resources/scoped_resource.h"
|
| @@ -28,6 +28,7 @@
|
| #include "cc/test/test_gpu_memory_buffer_manager.h"
|
| #include "cc/test/test_shared_bitmap_manager.h"
|
| #include "cc/test/test_web_graphics_context_3d.h"
|
| +#include "cc/tiles/tile_task_manager.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "testing/perf/perf_test.h"
|
| #include "third_party/khronos/GLES2/gl2.h"
|
| @@ -110,11 +111,11 @@ class PerfContextProvider : public ContextProvider {
|
| base::Lock context_lock_;
|
| };
|
|
|
| -enum TileTaskWorkerPoolType {
|
| - TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY,
|
| - TILE_TASK_WORKER_POOL_TYPE_ONE_COPY,
|
| - TILE_TASK_WORKER_POOL_TYPE_GPU,
|
| - TILE_TASK_WORKER_POOL_TYPE_BITMAP
|
| +enum RasterBufferProviderType {
|
| + RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY,
|
| + RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY,
|
| + RASTER_BUFFER_PROVIDER_TYPE_GPU,
|
| + RASTER_BUFFER_PROVIDER_TYPE_BITMAP
|
| };
|
|
|
| static const int kTimeLimitMillis = 2000;
|
| @@ -180,13 +181,13 @@ class PerfRasterTaskImpl : public TileTask {
|
| DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl);
|
| };
|
|
|
| -class TileTaskWorkerPoolPerfTestBase {
|
| +class RasterBufferProviderPerfTestBase {
|
| public:
|
| typedef std::vector<scoped_refptr<TileTask>> RasterTaskVector;
|
|
|
| enum NamedTaskSet { REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW, ALL };
|
|
|
| - TileTaskWorkerPoolPerfTestBase()
|
| + RasterBufferProviderPerfTestBase()
|
| : context_provider_(make_scoped_refptr(new PerfContextProvider)),
|
| task_runner_(new base::TestSimpleTaskRunner),
|
| task_graph_runner_(new SynchronousTaskGraphRunner),
|
| @@ -201,20 +202,19 @@ class TileTaskWorkerPoolPerfTestBase {
|
| }
|
|
|
| void CreateRasterTasks(unsigned num_raster_tasks,
|
| - unsigned num_image_decode_tasks,
|
| + const TileTask::Vector& image_decode_tasks,
|
| RasterTaskVector* raster_tasks) {
|
| const gfx::Size size(1, 1);
|
|
|
| for (unsigned i = 0; i < num_raster_tasks; ++i) {
|
| - TileTask::Vector image_decode_tasks;
|
| - CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
|
| std::unique_ptr<ScopedResource> resource(
|
| ScopedResource::Create(resource_provider_.get()));
|
| resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
|
| RGBA_8888);
|
|
|
| + TileTask::Vector dependencies = image_decode_tasks;
|
| raster_tasks->push_back(
|
| - new PerfRasterTaskImpl(std::move(resource), &image_decode_tasks));
|
| + new PerfRasterTaskImpl(std::move(resource), &dependencies));
|
| }
|
| }
|
|
|
| @@ -226,10 +226,20 @@ class TileTaskWorkerPoolPerfTestBase {
|
| priority++;
|
|
|
| for (auto& decode_task : raster_task->dependencies()) {
|
| - graph->nodes.push_back(
|
| - TaskGraph::Node(decode_task.get(), 0u /* group */, priority, 0u));
|
| + // Add decode task if it doesn't already exist in graph.
|
| + TaskGraph::Node::Vector::iterator decode_it =
|
| + std::find_if(graph->nodes.begin(), graph->nodes.end(),
|
| + [decode_task](const TaskGraph::Node& node) {
|
| + return node.task == decode_task;
|
| + });
|
| +
|
| + if (decode_it == graph->nodes.end()) {
|
| + graph->nodes.push_back(
|
| + TaskGraph::Node(decode_task.get(), 0u /* group */, priority, 0u));
|
| + }
|
| +
|
| graph->edges.push_back(
|
| - TaskGraph::Edge(raster_task.get(), decode_task.get()));
|
| + TaskGraph::Edge(decode_task.get(), raster_task.get()));
|
| }
|
|
|
| graph->nodes.push_back(TaskGraph::Node(
|
| @@ -248,47 +258,47 @@ class TileTaskWorkerPoolPerfTestBase {
|
| LapTimer timer_;
|
| };
|
|
|
| -class TileTaskWorkerPoolPerfTest
|
| - : public TileTaskWorkerPoolPerfTestBase,
|
| - public testing::TestWithParam<TileTaskWorkerPoolType> {
|
| +class RasterBufferProviderPerfTest
|
| + : public RasterBufferProviderPerfTestBase,
|
| + public testing::TestWithParam<RasterBufferProviderType> {
|
| public:
|
| // Overridden from testing::Test:
|
| void SetUp() override {
|
| + std::unique_ptr<RasterBufferProvider> raster_buffer_provider;
|
| switch (GetParam()) {
|
| - case TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY:
|
| + case RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY:
|
| Create3dOutputSurfaceAndResourceProvider();
|
| - tile_task_worker_pool_ = ZeroCopyTileTaskWorkerPool::Create(
|
| - task_runner_.get(), task_graph_runner_.get(),
|
| + raster_buffer_provider = ZeroCopyRasterBufferProvider::Create(
|
| resource_provider_.get(), PlatformColor::BestTextureFormat());
|
| break;
|
| - case TILE_TASK_WORKER_POOL_TYPE_ONE_COPY:
|
| + case RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY:
|
| Create3dOutputSurfaceAndResourceProvider();
|
| - tile_task_worker_pool_ = OneCopyTileTaskWorkerPool::Create(
|
| - task_runner_.get(), task_graph_runner_.get(),
|
| - context_provider_.get(), resource_provider_.get(),
|
| - std::numeric_limits<int>::max(), false,
|
| + raster_buffer_provider = OneCopyRasterBufferProvider::Create(
|
| + task_runner_.get(), context_provider_.get(),
|
| + resource_provider_.get(), std::numeric_limits<int>::max(), false,
|
| std::numeric_limits<int>::max(),
|
| PlatformColor::BestTextureFormat());
|
| break;
|
| - case TILE_TASK_WORKER_POOL_TYPE_GPU:
|
| + case RASTER_BUFFER_PROVIDER_TYPE_GPU:
|
| Create3dOutputSurfaceAndResourceProvider();
|
| - tile_task_worker_pool_ = GpuTileTaskWorkerPool::Create(
|
| - task_runner_.get(), task_graph_runner_.get(),
|
| + raster_buffer_provider = GpuRasterBufferProvider::Create(
|
| context_provider_.get(), resource_provider_.get(), false, 0);
|
| break;
|
| - case TILE_TASK_WORKER_POOL_TYPE_BITMAP:
|
| + case RASTER_BUFFER_PROVIDER_TYPE_BITMAP:
|
| CreateSoftwareOutputSurfaceAndResourceProvider();
|
| - tile_task_worker_pool_ = BitmapTileTaskWorkerPool::Create(
|
| - task_runner_.get(), task_graph_runner_.get(),
|
| - resource_provider_.get());
|
| + raster_buffer_provider =
|
| + BitmapRasterBufferProvider::Create(resource_provider_.get());
|
| break;
|
| }
|
|
|
| - DCHECK(tile_task_worker_pool_);
|
| + DCHECK(raster_buffer_provider);
|
| +
|
| + tile_task_manager_ = TileTaskManagerImpl::Create(
|
| + std::move(raster_buffer_provider), task_graph_runner_.get());
|
| }
|
| void TearDown() override {
|
| - tile_task_worker_pool_->Shutdown();
|
| - tile_task_worker_pool_->CheckForCompletedTasks();
|
| + tile_task_manager_->Shutdown();
|
| + tile_task_manager_->CheckForCompletedTasks();
|
| }
|
|
|
| void RunMessageLoopUntilAllTasksHaveCompleted() {
|
| @@ -299,8 +309,10 @@ class TileTaskWorkerPoolPerfTest
|
| void RunScheduleTasksTest(const std::string& test_name,
|
| unsigned num_raster_tasks,
|
| unsigned num_image_decode_tasks) {
|
| + TileTask::Vector image_decode_tasks;
|
| RasterTaskVector raster_tasks;
|
| - CreateRasterTasks(num_raster_tasks, num_image_decode_tasks, &raster_tasks);
|
| + CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
|
| + CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
|
|
|
| // Avoid unnecessary heap allocations by reusing the same graph.
|
| TaskGraph graph;
|
| @@ -309,13 +321,13 @@ class TileTaskWorkerPoolPerfTest
|
| do {
|
| graph.Reset();
|
| BuildTileTaskGraph(&graph, raster_tasks);
|
| - tile_task_worker_pool_->ScheduleTasks(&graph);
|
| - tile_task_worker_pool_->CheckForCompletedTasks();
|
| + tile_task_manager_->ScheduleTasks(&graph);
|
| + tile_task_manager_->CheckForCompletedTasks();
|
| timer_.NextLap();
|
| } while (!timer_.HasTimeLimitExpired());
|
|
|
| TaskGraph empty;
|
| - tile_task_worker_pool_->ScheduleTasks(&empty);
|
| + tile_task_manager_->ScheduleTasks(&empty);
|
| RunMessageLoopUntilAllTasksHaveCompleted();
|
|
|
| perf_test::PrintResult("schedule_tasks", TestModifierString(), test_name,
|
| @@ -326,9 +338,11 @@ class TileTaskWorkerPoolPerfTest
|
| unsigned num_raster_tasks,
|
| unsigned num_image_decode_tasks) {
|
| const size_t kNumVersions = 2;
|
| + TileTask::Vector image_decode_tasks[kNumVersions];
|
| RasterTaskVector raster_tasks[kNumVersions];
|
| for (size_t i = 0; i < kNumVersions; ++i) {
|
| - CreateRasterTasks(num_raster_tasks, num_image_decode_tasks,
|
| + CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks[i]);
|
| + CreateRasterTasks(num_raster_tasks, image_decode_tasks[i],
|
| &raster_tasks[i]);
|
| }
|
|
|
| @@ -340,14 +354,14 @@ class TileTaskWorkerPoolPerfTest
|
| do {
|
| graph.Reset();
|
| BuildTileTaskGraph(&graph, raster_tasks[count % kNumVersions]);
|
| - tile_task_worker_pool_->ScheduleTasks(&graph);
|
| - tile_task_worker_pool_->CheckForCompletedTasks();
|
| + tile_task_manager_->ScheduleTasks(&graph);
|
| + tile_task_manager_->CheckForCompletedTasks();
|
| ++count;
|
| timer_.NextLap();
|
| } while (!timer_.HasTimeLimitExpired());
|
|
|
| TaskGraph empty;
|
| - tile_task_worker_pool_->ScheduleTasks(&empty);
|
| + tile_task_manager_->ScheduleTasks(&empty);
|
| RunMessageLoopUntilAllTasksHaveCompleted();
|
|
|
| perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(),
|
| @@ -357,8 +371,10 @@ class TileTaskWorkerPoolPerfTest
|
| void RunScheduleAndExecuteTasksTest(const std::string& test_name,
|
| unsigned num_raster_tasks,
|
| unsigned num_image_decode_tasks) {
|
| + TileTask::Vector image_decode_tasks;
|
| RasterTaskVector raster_tasks;
|
| - CreateRasterTasks(num_raster_tasks, num_image_decode_tasks, &raster_tasks);
|
| + CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
|
| + CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
|
|
|
| // Avoid unnecessary heap allocations by reusing the same graph.
|
| TaskGraph graph;
|
| @@ -367,13 +383,13 @@ class TileTaskWorkerPoolPerfTest
|
| do {
|
| graph.Reset();
|
| BuildTileTaskGraph(&graph, raster_tasks);
|
| - tile_task_worker_pool_->ScheduleTasks(&graph);
|
| + tile_task_manager_->ScheduleTasks(&graph);
|
| RunMessageLoopUntilAllTasksHaveCompleted();
|
| timer_.NextLap();
|
| } while (!timer_.HasTimeLimitExpired());
|
|
|
| TaskGraph empty;
|
| - tile_task_worker_pool_->ScheduleTasks(&empty);
|
| + tile_task_manager_->ScheduleTasks(&empty);
|
| RunMessageLoopUntilAllTasksHaveCompleted();
|
|
|
| perf_test::PrintResult("schedule_and_execute_tasks", TestModifierString(),
|
| @@ -398,25 +414,25 @@ class TileTaskWorkerPoolPerfTest
|
|
|
| std::string TestModifierString() const {
|
| switch (GetParam()) {
|
| - case TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY:
|
| - return std::string("_zero_copy_tile_task_worker_pool");
|
| - case TILE_TASK_WORKER_POOL_TYPE_ONE_COPY:
|
| - return std::string("_one_copy_tile_task_worker_pool");
|
| - case TILE_TASK_WORKER_POOL_TYPE_GPU:
|
| - return std::string("_gpu_tile_task_worker_pool");
|
| - case TILE_TASK_WORKER_POOL_TYPE_BITMAP:
|
| - return std::string("_bitmap_tile_task_worker_pool");
|
| + case RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY:
|
| + return std::string("_zero_copy_raster_buffer_provider");
|
| + case RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY:
|
| + return std::string("_one_copy_raster_buffer_provider");
|
| + case RASTER_BUFFER_PROVIDER_TYPE_GPU:
|
| + return std::string("_gpu_raster_buffer_provider");
|
| + case RASTER_BUFFER_PROVIDER_TYPE_BITMAP:
|
| + return std::string("_bitmap_raster_buffer_provider");
|
| }
|
| NOTREACHED();
|
| return std::string();
|
| }
|
|
|
| - std::unique_ptr<TileTaskWorkerPool> tile_task_worker_pool_;
|
| + std::unique_ptr<TileTaskManager> tile_task_manager_;
|
| TestGpuMemoryBufferManager gpu_memory_buffer_manager_;
|
| TestSharedBitmapManager shared_bitmap_manager_;
|
| };
|
|
|
| -TEST_P(TileTaskWorkerPoolPerfTest, ScheduleTasks) {
|
| +TEST_P(RasterBufferProviderPerfTest, ScheduleTasks) {
|
| RunScheduleTasksTest("1_0", 1, 0);
|
| RunScheduleTasksTest("32_0", 32, 0);
|
| RunScheduleTasksTest("1_1", 1, 1);
|
| @@ -425,7 +441,7 @@ TEST_P(TileTaskWorkerPoolPerfTest, ScheduleTasks) {
|
| RunScheduleTasksTest("32_4", 32, 4);
|
| }
|
|
|
| -TEST_P(TileTaskWorkerPoolPerfTest, ScheduleAlternateTasks) {
|
| +TEST_P(RasterBufferProviderPerfTest, ScheduleAlternateTasks) {
|
| RunScheduleAlternateTasksTest("1_0", 1, 0);
|
| RunScheduleAlternateTasksTest("32_0", 32, 0);
|
| RunScheduleAlternateTasksTest("1_1", 1, 1);
|
| @@ -434,7 +450,7 @@ TEST_P(TileTaskWorkerPoolPerfTest, ScheduleAlternateTasks) {
|
| RunScheduleAlternateTasksTest("32_4", 32, 4);
|
| }
|
|
|
| -TEST_P(TileTaskWorkerPoolPerfTest, ScheduleAndExecuteTasks) {
|
| +TEST_P(RasterBufferProviderPerfTest, ScheduleAndExecuteTasks) {
|
| RunScheduleAndExecuteTasksTest("1_0", 1, 0);
|
| RunScheduleAndExecuteTasksTest("32_0", 32, 0);
|
| RunScheduleAndExecuteTasksTest("1_1", 1, 1);
|
| @@ -443,15 +459,16 @@ TEST_P(TileTaskWorkerPoolPerfTest, ScheduleAndExecuteTasks) {
|
| RunScheduleAndExecuteTasksTest("32_4", 32, 4);
|
| }
|
|
|
| -INSTANTIATE_TEST_CASE_P(TileTaskWorkerPoolPerfTests,
|
| - TileTaskWorkerPoolPerfTest,
|
| - ::testing::Values(TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY,
|
| - TILE_TASK_WORKER_POOL_TYPE_ONE_COPY,
|
| - TILE_TASK_WORKER_POOL_TYPE_GPU,
|
| - TILE_TASK_WORKER_POOL_TYPE_BITMAP));
|
| +INSTANTIATE_TEST_CASE_P(RasterBufferProviderPerfTests,
|
| + RasterBufferProviderPerfTest,
|
| + ::testing::Values(RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY,
|
| + RASTER_BUFFER_PROVIDER_TYPE_ONE_COPY,
|
| + RASTER_BUFFER_PROVIDER_TYPE_GPU,
|
| + RASTER_BUFFER_PROVIDER_TYPE_BITMAP));
|
|
|
| -class TileTaskWorkerPoolCommonPerfTest : public TileTaskWorkerPoolPerfTestBase,
|
| - public testing::Test {
|
| +class RasterBufferProviderCommonPerfTest
|
| + : public RasterBufferProviderPerfTestBase,
|
| + public testing::Test {
|
| public:
|
| // Overridden from testing::Test:
|
| void SetUp() override {
|
| @@ -464,8 +481,10 @@ class TileTaskWorkerPoolCommonPerfTest : public TileTaskWorkerPoolPerfTestBase,
|
| void RunBuildTileTaskGraphTest(const std::string& test_name,
|
| unsigned num_raster_tasks,
|
| unsigned num_image_decode_tasks) {
|
| + TileTask::Vector image_decode_tasks;
|
| RasterTaskVector raster_tasks;
|
| - CreateRasterTasks(num_raster_tasks, num_image_decode_tasks, &raster_tasks);
|
| + CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
|
| + CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
|
|
|
| // Avoid unnecessary heap allocations by reusing the same graph.
|
| TaskGraph graph;
|
| @@ -482,7 +501,7 @@ class TileTaskWorkerPoolCommonPerfTest : public TileTaskWorkerPoolPerfTestBase,
|
| }
|
| };
|
|
|
| -TEST_F(TileTaskWorkerPoolCommonPerfTest, BuildTileTaskGraph) {
|
| +TEST_F(RasterBufferProviderCommonPerfTest, BuildTileTaskGraph) {
|
| RunBuildTileTaskGraphTest("1_0", 1, 0);
|
| RunBuildTileTaskGraphTest("32_0", 32, 0);
|
| RunBuildTileTaskGraphTest("1_1", 1, 1);
|
|
|