| Index: cc/raster/tile_task_worker_pool_perftest.cc
|
| diff --git a/cc/raster/tile_task_worker_pool_perftest.cc b/cc/raster/tile_task_worker_pool_perftest.cc
|
| index 2bed36d3165685e32e9b9ef0138a0fe455d5cc0d..70902c845c8293521d05ca4cf7829a0b228f60a4 100644
|
| --- a/cc/raster/tile_task_worker_pool_perftest.cc
|
| +++ b/cc/raster/tile_task_worker_pool_perftest.cc
|
| @@ -214,15 +214,22 @@ class TileTaskWorkerPoolPerfTestBase {
|
| }
|
| }
|
|
|
| - void BuildTileTaskQueue(TileTaskQueue* queue,
|
| + void BuildTileTaskGraph(TaskGraph* graph,
|
| const RasterTaskVector& raster_tasks) {
|
| - for (size_t i = 0u; i < raster_tasks.size(); ++i) {
|
| - bool required_for_activation = (i % 2) == 0;
|
| - TaskSetCollection task_set_collection;
|
| - task_set_collection[ALL] = true;
|
| - task_set_collection[REQUIRED_FOR_ACTIVATION] = required_for_activation;
|
| - queue->items.push_back(
|
| - TileTaskQueue::Item(raster_tasks[i].get(), task_set_collection));
|
| + size_t priority = 0;
|
| +
|
| + for (auto& raster_task : raster_tasks) {
|
| + priority++;
|
| +
|
| + for (auto& decode_task : raster_task->dependencies()) {
|
| + graph->nodes.push_back(
|
| + TaskGraph::Node(decode_task.get(), priority, 0u));
|
| + graph->edges.push_back(
|
| + TaskGraph::Edge(raster_task.get(), decode_task.get()));
|
| + }
|
| +
|
| + graph->nodes.push_back(TaskGraph::Node(
|
| + raster_task.get(), priority, raster_task->dependencies().size()));
|
| }
|
| }
|
|
|
| @@ -238,8 +245,7 @@ class TileTaskWorkerPoolPerfTestBase {
|
|
|
| class TileTaskWorkerPoolPerfTest
|
| : public TileTaskWorkerPoolPerfTestBase,
|
| - public testing::TestWithParam<TileTaskWorkerPoolType>,
|
| - public TileTaskRunnerClient {
|
| + public testing::TestWithParam<TileTaskWorkerPoolType> {
|
| public:
|
| // Overridden from testing::Test:
|
| void SetUp() override {
|
| @@ -273,18 +279,12 @@ class TileTaskWorkerPoolPerfTest
|
| }
|
|
|
| DCHECK(tile_task_worker_pool_);
|
| - tile_task_worker_pool_->AsTileTaskRunner()->SetClient(this);
|
| }
|
| void TearDown() override {
|
| tile_task_worker_pool_->AsTileTaskRunner()->Shutdown();
|
| tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks();
|
| }
|
|
|
| - // Overriden from TileTaskRunnerClient:
|
| - void DidFinishRunningTileTasks(TaskSet task_set) override {
|
| - tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks();
|
| - }
|
| -
|
| void RunMessageLoopUntilAllTasksHaveCompleted() {
|
| task_graph_runner_->RunUntilIdle();
|
| task_runner_->RunUntilIdle();
|
| @@ -298,19 +298,19 @@ class TileTaskWorkerPoolPerfTest
|
| 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 queue.
|
| - TileTaskQueue queue;
|
| + // Avoid unnecessary heap allocations by reusing the same graph.
|
| + TaskGraph graph;
|
|
|
| timer_.Reset();
|
| do {
|
| - queue.Reset();
|
| - BuildTileTaskQueue(&queue, raster_tasks);
|
| - tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&queue);
|
| + graph.Reset();
|
| + BuildTileTaskGraph(&graph, raster_tasks);
|
| + tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph);
|
| tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks();
|
| timer_.NextLap();
|
| } while (!timer_.HasTimeLimitExpired());
|
|
|
| - TileTaskQueue empty;
|
| + TaskGraph empty;
|
| tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty);
|
| RunMessageLoopUntilAllTasksHaveCompleted();
|
|
|
| @@ -330,21 +330,21 @@ class TileTaskWorkerPoolPerfTest
|
| &raster_tasks[i]);
|
| }
|
|
|
| - // Avoid unnecessary heap allocations by reusing the same queue.
|
| - TileTaskQueue queue;
|
| + // Avoid unnecessary heap allocations by reusing the same graph.
|
| + TaskGraph graph;
|
|
|
| size_t count = 0;
|
| timer_.Reset();
|
| do {
|
| - queue.Reset();
|
| - BuildTileTaskQueue(&queue, raster_tasks[count % kNumVersions]);
|
| - tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&queue);
|
| + graph.Reset();
|
| + BuildTileTaskGraph(&graph, raster_tasks[count % kNumVersions]);
|
| + tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph);
|
| tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks();
|
| ++count;
|
| timer_.NextLap();
|
| } while (!timer_.HasTimeLimitExpired());
|
|
|
| - TileTaskQueue empty;
|
| + TaskGraph empty;
|
| tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty);
|
| RunMessageLoopUntilAllTasksHaveCompleted();
|
|
|
| @@ -360,19 +360,19 @@ class TileTaskWorkerPoolPerfTest
|
| 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 queue.
|
| - TileTaskQueue queue;
|
| + // Avoid unnecessary heap allocations by reusing the same graph.
|
| + TaskGraph graph;
|
|
|
| timer_.Reset();
|
| do {
|
| - queue.Reset();
|
| - BuildTileTaskQueue(&queue, raster_tasks);
|
| - tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&queue);
|
| + graph.Reset();
|
| + BuildTileTaskGraph(&graph, raster_tasks);
|
| + tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph);
|
| RunMessageLoopUntilAllTasksHaveCompleted();
|
| timer_.NextLap();
|
| } while (!timer_.HasTimeLimitExpired());
|
|
|
| - TileTaskQueue empty;
|
| + TaskGraph empty;
|
| tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty);
|
| RunMessageLoopUntilAllTasksHaveCompleted();
|
|
|
| @@ -461,7 +461,7 @@ class TileTaskWorkerPoolCommonPerfTest : public TileTaskWorkerPoolPerfTestBase,
|
| FakeResourceProvider::Create(output_surface_.get(), nullptr);
|
| }
|
|
|
| - void RunBuildTileTaskQueueTest(const std::string& test_name,
|
| + void RunBuildTileTaskGraphTest(const std::string& test_name,
|
| unsigned num_raster_tasks,
|
| unsigned num_image_decode_tasks) {
|
| ImageDecodeTask::Vector image_decode_tasks;
|
| @@ -469,28 +469,28 @@ class TileTaskWorkerPoolCommonPerfTest : public TileTaskWorkerPoolPerfTestBase,
|
| 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 queue.
|
| - TileTaskQueue queue;
|
| + // Avoid unnecessary heap allocations by reusing the same graph.
|
| + TaskGraph graph;
|
|
|
| timer_.Reset();
|
| do {
|
| - queue.Reset();
|
| - BuildTileTaskQueue(&queue, raster_tasks);
|
| + graph.Reset();
|
| + BuildTileTaskGraph(&graph, raster_tasks);
|
| timer_.NextLap();
|
| } while (!timer_.HasTimeLimitExpired());
|
|
|
| - perf_test::PrintResult("build_raster_task_queue", "", test_name,
|
| + perf_test::PrintResult("build_raster_task_graph", "", test_name,
|
| timer_.LapsPerSecond(), "runs/s", true);
|
| }
|
| };
|
|
|
| -TEST_F(TileTaskWorkerPoolCommonPerfTest, BuildTileTaskQueue) {
|
| - RunBuildTileTaskQueueTest("1_0", 1, 0);
|
| - RunBuildTileTaskQueueTest("32_0", 32, 0);
|
| - RunBuildTileTaskQueueTest("1_1", 1, 1);
|
| - RunBuildTileTaskQueueTest("32_1", 32, 1);
|
| - RunBuildTileTaskQueueTest("1_4", 1, 4);
|
| - RunBuildTileTaskQueueTest("32_4", 32, 4);
|
| +TEST_F(TileTaskWorkerPoolCommonPerfTest, BuildTileTaskGraph) {
|
| + RunBuildTileTaskGraphTest("1_0", 1, 0);
|
| + RunBuildTileTaskGraphTest("32_0", 32, 0);
|
| + RunBuildTileTaskGraphTest("1_1", 1, 1);
|
| + RunBuildTileTaskGraphTest("32_1", 32, 1);
|
| + RunBuildTileTaskGraphTest("1_4", 1, 4);
|
| + RunBuildTileTaskGraphTest("32_4", 32, 4);
|
| }
|
|
|
| } // namespace
|
|
|