Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(145)

Side by Side Diff: cc/raster/task_graph_runner_perftest.cc

Issue 1854723002: cc: Simplify task and its derived classes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <vector> 8 #include <vector>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "base/time/time.h" 12 #include "base/time/time.h"
13 #include "cc/base/completion_event.h" 13 #include "cc/base/completion_event.h"
14 #include "cc/debug/lap_timer.h" 14 #include "cc/debug/lap_timer.h"
15 #include "cc/raster/synchronous_task_graph_runner.h" 15 #include "cc/raster/synchronous_task_graph_runner.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 #include "testing/perf/perf_test.h" 17 #include "testing/perf/perf_test.h"
18 18
19 namespace cc { 19 namespace cc {
20 namespace { 20 namespace {
21 21
22 static const int kTimeLimitMillis = 2000; 22 static const int kTimeLimitMillis = 2000;
23 static const int kWarmupRuns = 5; 23 static const int kWarmupRuns = 5;
24 static const int kTimeCheckInterval = 10; 24 static const int kTimeCheckInterval = 10;
25 25
26 class PerfTaskImpl : public Task { 26 class PerfTaskImpl : public DependencyTask {
27 public: 27 public:
28 typedef std::vector<scoped_refptr<PerfTaskImpl>> Vector; 28 typedef std::vector<scoped_refptr<PerfTaskImpl>> Vector;
29 29
30 PerfTaskImpl() {} 30 PerfTaskImpl() {}
31 31
32 // Overridden from Task: 32 // Overridden from DependencyTask:
33 void ScheduleOnOriginThread() override {}
34 void CompleteOnOriginThread() override {}
33 void RunOnWorkerThread() override {} 35 void RunOnWorkerThread() override {}
34 36
35 void Reset() { did_run_ = false; } 37 void Reset() { did_run_ = false; }
36 38
37 private: 39 private:
38 ~PerfTaskImpl() override {} 40 ~PerfTaskImpl() override {}
39 41
40 DISALLOW_COPY_AND_ASSIGN(PerfTaskImpl); 42 DISALLOW_COPY_AND_ASSIGN(PerfTaskImpl);
41 }; 43 };
42 44
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 PerfTaskImpl::Vector top_level_tasks; 92 PerfTaskImpl::Vector top_level_tasks;
91 PerfTaskImpl::Vector tasks; 93 PerfTaskImpl::Vector tasks;
92 PerfTaskImpl::Vector leaf_tasks; 94 PerfTaskImpl::Vector leaf_tasks;
93 CreateTasks(num_top_level_tasks, &top_level_tasks); 95 CreateTasks(num_top_level_tasks, &top_level_tasks);
94 CreateTasks(num_tasks, &tasks); 96 CreateTasks(num_tasks, &tasks);
95 CreateTasks(num_leaf_tasks, &leaf_tasks); 97 CreateTasks(num_leaf_tasks, &leaf_tasks);
96 98
97 // Avoid unnecessary heap allocations by reusing the same graph and 99 // Avoid unnecessary heap allocations by reusing the same graph and
98 // completed tasks vector. 100 // completed tasks vector.
99 TaskGraph graph; 101 TaskGraph graph;
100 Task::Vector completed_tasks; 102 DependencyTask::Vector completed_tasks;
101 103
102 timer_.Reset(); 104 timer_.Reset();
103 do { 105 do {
104 graph.Reset(); 106 graph.Reset();
105 BuildTaskGraph(top_level_tasks, tasks, leaf_tasks, &graph); 107 BuildTaskGraph(top_level_tasks, tasks, leaf_tasks, &graph);
106 task_graph_runner_->ScheduleTasks(namespace_token_, &graph); 108 task_graph_runner_->ScheduleTasks(namespace_token_, &graph);
107 // Shouldn't be any tasks to collect as we reschedule the same set 109 // Shouldn't be any tasks to collect as we reschedule the same set
108 // of tasks. 110 // of tasks.
109 DCHECK_EQ(0u, CollectCompletedTasks(&completed_tasks)); 111 DCHECK_EQ(0u, CollectCompletedTasks(&completed_tasks));
110 timer_.NextLap(); 112 timer_.NextLap();
(...skipping 21 matching lines...) Expand all
132 PerfTaskImpl::Vector leaf_tasks[kNumVersions]; 134 PerfTaskImpl::Vector leaf_tasks[kNumVersions];
133 for (size_t i = 0; i < kNumVersions; ++i) { 135 for (size_t i = 0; i < kNumVersions; ++i) {
134 CreateTasks(num_top_level_tasks, &top_level_tasks[i]); 136 CreateTasks(num_top_level_tasks, &top_level_tasks[i]);
135 CreateTasks(num_tasks, &tasks[i]); 137 CreateTasks(num_tasks, &tasks[i]);
136 CreateTasks(num_leaf_tasks, &leaf_tasks[i]); 138 CreateTasks(num_leaf_tasks, &leaf_tasks[i]);
137 } 139 }
138 140
139 // Avoid unnecessary heap allocations by reusing the same graph and 141 // Avoid unnecessary heap allocations by reusing the same graph and
140 // completed tasks vector. 142 // completed tasks vector.
141 TaskGraph graph; 143 TaskGraph graph;
142 Task::Vector completed_tasks; 144 DependencyTask::Vector completed_tasks;
143 145
144 size_t count = 0; 146 size_t count = 0;
145 timer_.Reset(); 147 timer_.Reset();
146 do { 148 do {
147 graph.Reset(); 149 graph.Reset();
148 BuildTaskGraph(top_level_tasks[count % kNumVersions], 150 BuildTaskGraph(top_level_tasks[count % kNumVersions],
149 tasks[count % kNumVersions], 151 tasks[count % kNumVersions],
150 leaf_tasks[count % kNumVersions], 152 leaf_tasks[count % kNumVersions],
151 &graph); 153 &graph);
152 task_graph_runner_->ScheduleTasks(namespace_token_, &graph); 154 task_graph_runner_->ScheduleTasks(namespace_token_, &graph);
(...skipping 22 matching lines...) Expand all
175 PerfTaskImpl::Vector top_level_tasks; 177 PerfTaskImpl::Vector top_level_tasks;
176 PerfTaskImpl::Vector tasks; 178 PerfTaskImpl::Vector tasks;
177 PerfTaskImpl::Vector leaf_tasks; 179 PerfTaskImpl::Vector leaf_tasks;
178 CreateTasks(num_top_level_tasks, &top_level_tasks); 180 CreateTasks(num_top_level_tasks, &top_level_tasks);
179 CreateTasks(num_tasks, &tasks); 181 CreateTasks(num_tasks, &tasks);
180 CreateTasks(num_leaf_tasks, &leaf_tasks); 182 CreateTasks(num_leaf_tasks, &leaf_tasks);
181 183
182 // Avoid unnecessary heap allocations by reusing the same graph and 184 // Avoid unnecessary heap allocations by reusing the same graph and
183 // completed tasks vector. 185 // completed tasks vector.
184 TaskGraph graph; 186 TaskGraph graph;
185 Task::Vector completed_tasks; 187 DependencyTask::Vector completed_tasks;
186 188
187 timer_.Reset(); 189 timer_.Reset();
188 do { 190 do {
189 graph.Reset(); 191 graph.Reset();
190 BuildTaskGraph(top_level_tasks, tasks, leaf_tasks, &graph); 192 BuildTaskGraph(top_level_tasks, tasks, leaf_tasks, &graph);
191 task_graph_runner_->ScheduleTasks(namespace_token_, &graph); 193 task_graph_runner_->ScheduleTasks(namespace_token_, &graph);
192 task_graph_runner_->RunUntilIdle(); 194 task_graph_runner_->RunUntilIdle();
193 CollectCompletedTasks(&completed_tasks); 195 CollectCompletedTasks(&completed_tasks);
194 completed_tasks.clear(); 196 completed_tasks.clear();
195 ResetTasks(&top_level_tasks); 197 ResetTasks(&top_level_tasks);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 } 258 }
257 } 259 }
258 260
259 for (PerfTaskImpl::Vector::const_iterator it = top_level_tasks.begin(); 261 for (PerfTaskImpl::Vector::const_iterator it = top_level_tasks.begin();
260 it != top_level_tasks.end(); ++it) { 262 it != top_level_tasks.end(); ++it) {
261 graph->nodes.push_back(TaskGraph::Node( 263 graph->nodes.push_back(TaskGraph::Node(
262 it->get(), 0u, 0u, static_cast<uint32_t>(tasks.size()))); 264 it->get(), 0u, 0u, static_cast<uint32_t>(tasks.size())));
263 } 265 }
264 } 266 }
265 267
266 size_t CollectCompletedTasks(Task::Vector* completed_tasks) { 268 size_t CollectCompletedTasks(DependencyTask::Vector* completed_tasks) {
267 DCHECK(completed_tasks->empty()); 269 DCHECK(completed_tasks->empty());
268 task_graph_runner_->CollectCompletedTasks(namespace_token_, 270 task_graph_runner_->CollectCompletedTasks(namespace_token_,
269 completed_tasks); 271 completed_tasks);
270 return completed_tasks->size(); 272 return completed_tasks->size();
271 } 273 }
272 274
273 // Test uses SynchronousTaskGraphRunner, as this implementation introduces 275 // Test uses SynchronousTaskGraphRunner, as this implementation introduces
274 // minimal additional complexity over the TaskGraphWorkQueue helpers. 276 // minimal additional complexity over the TaskGraphWorkQueue helpers.
275 scoped_ptr<SynchronousTaskGraphRunner> task_graph_runner_; 277 scoped_ptr<SynchronousTaskGraphRunner> task_graph_runner_;
276 NamespaceToken namespace_token_; 278 NamespaceToken namespace_token_;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 RunScheduleAndExecuteTasksTest("0_1_0", 0, 1, 0); 310 RunScheduleAndExecuteTasksTest("0_1_0", 0, 1, 0);
309 RunScheduleAndExecuteTasksTest("0_32_0", 0, 32, 0); 311 RunScheduleAndExecuteTasksTest("0_32_0", 0, 32, 0);
310 RunScheduleAndExecuteTasksTest("2_1_0", 2, 1, 0); 312 RunScheduleAndExecuteTasksTest("2_1_0", 2, 1, 0);
311 RunScheduleAndExecuteTasksTest("2_32_0", 2, 32, 0); 313 RunScheduleAndExecuteTasksTest("2_32_0", 2, 32, 0);
312 RunScheduleAndExecuteTasksTest("2_1_1", 2, 1, 1); 314 RunScheduleAndExecuteTasksTest("2_1_1", 2, 1, 1);
313 RunScheduleAndExecuteTasksTest("2_32_1", 2, 32, 1); 315 RunScheduleAndExecuteTasksTest("2_32_1", 2, 32, 1);
314 } 316 }
315 317
316 } // namespace 318 } // namespace
317 } // namespace cc 319 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698