| Index: cc/resources/task_graph_runner_perftest.cc
|
| diff --git a/cc/resources/task_graph_runner_perftest.cc b/cc/resources/task_graph_runner_perftest.cc
|
| deleted file mode 100644
|
| index cbd5c5cfc6cacaf77ab36ae23efea597094853ae..0000000000000000000000000000000000000000
|
| --- a/cc/resources/task_graph_runner_perftest.cc
|
| +++ /dev/null
|
| @@ -1,312 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "cc/resources/task_graph_runner.h"
|
| -
|
| -#include <vector>
|
| -
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/time/time.h"
|
| -#include "cc/base/completion_event.h"
|
| -#include "cc/debug/lap_timer.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -#include "testing/perf/perf_test.h"
|
| -
|
| -namespace cc {
|
| -namespace {
|
| -
|
| -static const int kTimeLimitMillis = 2000;
|
| -static const int kWarmupRuns = 5;
|
| -static const int kTimeCheckInterval = 10;
|
| -
|
| -class PerfTaskImpl : public Task {
|
| - public:
|
| - typedef std::vector<scoped_refptr<PerfTaskImpl>> Vector;
|
| -
|
| - PerfTaskImpl() {}
|
| -
|
| - // Overridden from Task:
|
| - void RunOnWorkerThread() override {}
|
| -
|
| - void Reset() { did_run_ = false; }
|
| -
|
| - private:
|
| - ~PerfTaskImpl() override {}
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(PerfTaskImpl);
|
| -};
|
| -
|
| -class TaskGraphRunnerPerfTest : public testing::Test {
|
| - public:
|
| - TaskGraphRunnerPerfTest()
|
| - : timer_(kWarmupRuns,
|
| - base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
|
| - kTimeCheckInterval) {}
|
| -
|
| - // Overridden from testing::Test:
|
| - void SetUp() override {
|
| - task_graph_runner_ = make_scoped_ptr(new TaskGraphRunner);
|
| - namespace_token_ = task_graph_runner_->GetNamespaceToken();
|
| - }
|
| - void TearDown() override { task_graph_runner_ = nullptr; }
|
| -
|
| - void RunBuildTaskGraphTest(const std::string& test_name,
|
| - int num_top_level_tasks,
|
| - int num_tasks,
|
| - int num_leaf_tasks) {
|
| - PerfTaskImpl::Vector top_level_tasks;
|
| - PerfTaskImpl::Vector tasks;
|
| - PerfTaskImpl::Vector leaf_tasks;
|
| - CreateTasks(num_top_level_tasks, &top_level_tasks);
|
| - CreateTasks(num_tasks, &tasks);
|
| - CreateTasks(num_leaf_tasks, &leaf_tasks);
|
| -
|
| - // Avoid unnecessary heap allocations by reusing the same graph.
|
| - TaskGraph graph;
|
| -
|
| - timer_.Reset();
|
| - do {
|
| - graph.Reset();
|
| - BuildTaskGraph(top_level_tasks, tasks, leaf_tasks, &graph);
|
| - timer_.NextLap();
|
| - } while (!timer_.HasTimeLimitExpired());
|
| -
|
| - perf_test::PrintResult("build_task_graph",
|
| - TestModifierString(),
|
| - test_name,
|
| - timer_.LapsPerSecond(),
|
| - "runs/s",
|
| - true);
|
| - }
|
| -
|
| - void RunScheduleTasksTest(const std::string& test_name,
|
| - int num_top_level_tasks,
|
| - int num_tasks,
|
| - int num_leaf_tasks) {
|
| - PerfTaskImpl::Vector top_level_tasks;
|
| - PerfTaskImpl::Vector tasks;
|
| - PerfTaskImpl::Vector leaf_tasks;
|
| - CreateTasks(num_top_level_tasks, &top_level_tasks);
|
| - CreateTasks(num_tasks, &tasks);
|
| - CreateTasks(num_leaf_tasks, &leaf_tasks);
|
| -
|
| - // Avoid unnecessary heap allocations by reusing the same graph and
|
| - // completed tasks vector.
|
| - TaskGraph graph;
|
| - Task::Vector completed_tasks;
|
| -
|
| - timer_.Reset();
|
| - do {
|
| - graph.Reset();
|
| - BuildTaskGraph(top_level_tasks, tasks, leaf_tasks, &graph);
|
| - task_graph_runner_->ScheduleTasks(namespace_token_, &graph);
|
| - // Shouldn't be any tasks to collect as we reschedule the same set
|
| - // of tasks.
|
| - DCHECK_EQ(0u, CollectCompletedTasks(&completed_tasks));
|
| - timer_.NextLap();
|
| - } while (!timer_.HasTimeLimitExpired());
|
| -
|
| - TaskGraph empty;
|
| - task_graph_runner_->ScheduleTasks(namespace_token_, &empty);
|
| - CollectCompletedTasks(&completed_tasks);
|
| -
|
| - perf_test::PrintResult("schedule_tasks",
|
| - TestModifierString(),
|
| - test_name,
|
| - timer_.LapsPerSecond(),
|
| - "runs/s",
|
| - true);
|
| - }
|
| -
|
| - void RunScheduleAlternateTasksTest(const std::string& test_name,
|
| - int num_top_level_tasks,
|
| - int num_tasks,
|
| - int num_leaf_tasks) {
|
| - const size_t kNumVersions = 2;
|
| - PerfTaskImpl::Vector top_level_tasks[kNumVersions];
|
| - PerfTaskImpl::Vector tasks[kNumVersions];
|
| - PerfTaskImpl::Vector leaf_tasks[kNumVersions];
|
| - for (size_t i = 0; i < kNumVersions; ++i) {
|
| - CreateTasks(num_top_level_tasks, &top_level_tasks[i]);
|
| - CreateTasks(num_tasks, &tasks[i]);
|
| - CreateTasks(num_leaf_tasks, &leaf_tasks[i]);
|
| - }
|
| -
|
| - // Avoid unnecessary heap allocations by reusing the same graph and
|
| - // completed tasks vector.
|
| - TaskGraph graph;
|
| - Task::Vector completed_tasks;
|
| -
|
| - size_t count = 0;
|
| - timer_.Reset();
|
| - do {
|
| - graph.Reset();
|
| - BuildTaskGraph(top_level_tasks[count % kNumVersions],
|
| - tasks[count % kNumVersions],
|
| - leaf_tasks[count % kNumVersions],
|
| - &graph);
|
| - task_graph_runner_->ScheduleTasks(namespace_token_, &graph);
|
| - CollectCompletedTasks(&completed_tasks);
|
| - completed_tasks.clear();
|
| - ++count;
|
| - timer_.NextLap();
|
| - } while (!timer_.HasTimeLimitExpired());
|
| -
|
| - TaskGraph empty;
|
| - task_graph_runner_->ScheduleTasks(namespace_token_, &empty);
|
| - CollectCompletedTasks(&completed_tasks);
|
| -
|
| - perf_test::PrintResult("schedule_alternate_tasks",
|
| - TestModifierString(),
|
| - test_name,
|
| - timer_.LapsPerSecond(),
|
| - "runs/s",
|
| - true);
|
| - }
|
| -
|
| - void RunScheduleAndExecuteTasksTest(const std::string& test_name,
|
| - int num_top_level_tasks,
|
| - int num_tasks,
|
| - int num_leaf_tasks) {
|
| - PerfTaskImpl::Vector top_level_tasks;
|
| - PerfTaskImpl::Vector tasks;
|
| - PerfTaskImpl::Vector leaf_tasks;
|
| - CreateTasks(num_top_level_tasks, &top_level_tasks);
|
| - CreateTasks(num_tasks, &tasks);
|
| - CreateTasks(num_leaf_tasks, &leaf_tasks);
|
| -
|
| - // Avoid unnecessary heap allocations by reusing the same graph and
|
| - // completed tasks vector.
|
| - TaskGraph graph;
|
| - Task::Vector completed_tasks;
|
| -
|
| - timer_.Reset();
|
| - do {
|
| - graph.Reset();
|
| - BuildTaskGraph(top_level_tasks, tasks, leaf_tasks, &graph);
|
| - task_graph_runner_->ScheduleTasks(namespace_token_, &graph);
|
| - task_graph_runner_->RunUntilIdle();
|
| - CollectCompletedTasks(&completed_tasks);
|
| - completed_tasks.clear();
|
| - ResetTasks(&top_level_tasks);
|
| - ResetTasks(&tasks);
|
| - ResetTasks(&leaf_tasks);
|
| - timer_.NextLap();
|
| - } while (!timer_.HasTimeLimitExpired());
|
| -
|
| - perf_test::PrintResult("execute_tasks",
|
| - TestModifierString(),
|
| - test_name,
|
| - timer_.LapsPerSecond(),
|
| - "runs/s",
|
| - true);
|
| - }
|
| -
|
| - private:
|
| - static std::string TestModifierString() {
|
| - return std::string("_task_graph_runner");
|
| - }
|
| -
|
| - void CreateTasks(int num_tasks, PerfTaskImpl::Vector* tasks) {
|
| - for (int i = 0; i < num_tasks; ++i)
|
| - tasks->push_back(make_scoped_refptr(new PerfTaskImpl));
|
| - }
|
| -
|
| - void ResetTasks(PerfTaskImpl::Vector* tasks) {
|
| - for (PerfTaskImpl::Vector::iterator it = tasks->begin(); it != tasks->end();
|
| - ++it) {
|
| - PerfTaskImpl* task = it->get();
|
| - task->Reset();
|
| - }
|
| - }
|
| -
|
| - void BuildTaskGraph(const PerfTaskImpl::Vector& top_level_tasks,
|
| - const PerfTaskImpl::Vector& tasks,
|
| - const PerfTaskImpl::Vector& leaf_tasks,
|
| - TaskGraph* graph) {
|
| - DCHECK(graph->nodes.empty());
|
| - DCHECK(graph->edges.empty());
|
| -
|
| - for (PerfTaskImpl::Vector::const_iterator it = leaf_tasks.begin();
|
| - it != leaf_tasks.end();
|
| - ++it) {
|
| - graph->nodes.push_back(TaskGraph::Node(it->get(), 0u, 0u));
|
| - }
|
| -
|
| - for (PerfTaskImpl::Vector::const_iterator it = tasks.begin();
|
| - it != tasks.end();
|
| - ++it) {
|
| - graph->nodes.push_back(TaskGraph::Node(it->get(), 0u, leaf_tasks.size()));
|
| -
|
| - for (PerfTaskImpl::Vector::const_iterator leaf_it = leaf_tasks.begin();
|
| - leaf_it != leaf_tasks.end();
|
| - ++leaf_it) {
|
| - graph->edges.push_back(TaskGraph::Edge(leaf_it->get(), it->get()));
|
| - }
|
| -
|
| - for (PerfTaskImpl::Vector::const_iterator top_level_it =
|
| - top_level_tasks.begin();
|
| - top_level_it != top_level_tasks.end();
|
| - ++top_level_it) {
|
| - graph->edges.push_back(TaskGraph::Edge(it->get(), top_level_it->get()));
|
| - }
|
| - }
|
| -
|
| - for (PerfTaskImpl::Vector::const_iterator it = top_level_tasks.begin();
|
| - it != top_level_tasks.end();
|
| - ++it) {
|
| - graph->nodes.push_back(TaskGraph::Node(it->get(), 0u, tasks.size()));
|
| - }
|
| - }
|
| -
|
| - size_t CollectCompletedTasks(Task::Vector* completed_tasks) {
|
| - DCHECK(completed_tasks->empty());
|
| - task_graph_runner_->CollectCompletedTasks(namespace_token_,
|
| - completed_tasks);
|
| - return completed_tasks->size();
|
| - }
|
| -
|
| - scoped_ptr<TaskGraphRunner> task_graph_runner_;
|
| - NamespaceToken namespace_token_;
|
| - LapTimer timer_;
|
| -};
|
| -
|
| -TEST_F(TaskGraphRunnerPerfTest, BuildTaskGraph) {
|
| - RunBuildTaskGraphTest("0_1_0", 0, 1, 0);
|
| - RunBuildTaskGraphTest("0_32_0", 0, 32, 0);
|
| - RunBuildTaskGraphTest("2_1_0", 2, 1, 0);
|
| - RunBuildTaskGraphTest("2_32_0", 2, 32, 0);
|
| - RunBuildTaskGraphTest("2_1_1", 2, 1, 1);
|
| - RunBuildTaskGraphTest("2_32_1", 2, 32, 1);
|
| -}
|
| -
|
| -TEST_F(TaskGraphRunnerPerfTest, ScheduleTasks) {
|
| - RunScheduleTasksTest("0_1_0", 0, 1, 0);
|
| - RunScheduleTasksTest("0_32_0", 0, 32, 0);
|
| - RunScheduleTasksTest("2_1_0", 2, 1, 0);
|
| - RunScheduleTasksTest("2_32_0", 2, 32, 0);
|
| - RunScheduleTasksTest("2_1_1", 2, 1, 1);
|
| - RunScheduleTasksTest("2_32_1", 2, 32, 1);
|
| -}
|
| -
|
| -TEST_F(TaskGraphRunnerPerfTest, ScheduleAlternateTasks) {
|
| - RunScheduleAlternateTasksTest("0_1_0", 0, 1, 0);
|
| - RunScheduleAlternateTasksTest("0_32_0", 0, 32, 0);
|
| - RunScheduleAlternateTasksTest("2_1_0", 2, 1, 0);
|
| - RunScheduleAlternateTasksTest("2_32_0", 2, 32, 0);
|
| - RunScheduleAlternateTasksTest("2_1_1", 2, 1, 1);
|
| - RunScheduleAlternateTasksTest("2_32_1", 2, 32, 1);
|
| -}
|
| -
|
| -TEST_F(TaskGraphRunnerPerfTest, ScheduleAndExecuteTasks) {
|
| - RunScheduleAndExecuteTasksTest("0_1_0", 0, 1, 0);
|
| - RunScheduleAndExecuteTasksTest("0_32_0", 0, 32, 0);
|
| - RunScheduleAndExecuteTasksTest("2_1_0", 2, 1, 0);
|
| - RunScheduleAndExecuteTasksTest("2_32_0", 2, 32, 0);
|
| - RunScheduleAndExecuteTasksTest("2_1_1", 2, 1, 1);
|
| - RunScheduleAndExecuteTasksTest("2_32_1", 2, 32, 1);
|
| -}
|
| -
|
| -} // namespace
|
| -} // namespace cc
|
|
|