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

Side by Side Diff: cc/resources/raster_worker_pool_perftest.cc

Issue 17244003: cc: Move task graph construction to RasterWorkerPool classes. (Closed) Base URL: http://git.chromium.org/chromium/src.git@wp-run-count
Patch Set: add missing CC_EXPORT Created 7 years, 6 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
« no previous file with comments | « cc/resources/raster_worker_pool.cc ('k') | cc/resources/raster_worker_pool_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "cc/resources/raster_worker_pool.h"
6
7 #include "base/time.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace cc {
11
12 namespace {
13
14 static const int kTimeLimitMillis = 2000;
15 static const int kWarmupRuns = 5;
16 static const int kTimeCheckInterval = 10;
17
18 class PerfWorkerPoolTaskImpl : public internal::WorkerPoolTask {
19 public:
20 // Overridden from internal::WorkerPoolTask:
21 virtual void RunOnThread(unsigned thread_index) OVERRIDE {}
22 virtual void DispatchCompletionCallback() OVERRIDE {}
23
24 private:
25 virtual ~PerfWorkerPoolTaskImpl() {}
26 };
27
28 class PerfRasterWorkerPool : public RasterWorkerPool {
29 public:
30 PerfRasterWorkerPool() : RasterWorkerPool(NULL, 1) {}
31 virtual ~PerfRasterWorkerPool() {}
32
33 static scoped_ptr<PerfRasterWorkerPool> Create() {
34 return make_scoped_ptr(new PerfRasterWorkerPool);
35 }
36
37 // Overridden from RasterWorkerPool:
38 virtual void ScheduleTasks(RasterTask::Queue* queue) OVERRIDE {
39 NOTREACHED();
40 }
41
42 void SetRasterTasks(RasterTask::Queue* queue) {
43 RasterWorkerPool::SetRasterTasks(queue);
44
45 TaskMap perf_tasks;
46 for (RasterTaskVector::const_iterator it = raster_tasks().begin();
47 it != raster_tasks().end(); ++it) {
48 internal::RasterWorkerPoolTask* task = it->get();
49
50 scoped_refptr<internal::WorkerPoolTask> new_perf_task(
51 new PerfWorkerPoolTaskImpl);
52 perf_tasks[task] = new_perf_task;
53 }
54
55 perf_tasks_.swap(perf_tasks);
56 }
57
58 void BuildTaskGraph() {
59 RasterTaskGraph graph;
60
61 for (RasterTaskVector::const_iterator it = raster_tasks().begin();
62 it != raster_tasks().end(); ++it) {
63 internal::RasterWorkerPoolTask* task = it->get();
64
65 TaskMap::iterator perf_it = perf_tasks_.find(task);
66 DCHECK(perf_it != perf_tasks_.end());
67 if (perf_it != perf_tasks_.end()) {
68 internal::WorkerPoolTask* perf_task = perf_it->second.get();
69 graph.InsertRasterTask(perf_task, task->dependencies());
70 }
71 }
72 }
73
74 private:
75 TaskMap perf_tasks_;
76
77 DISALLOW_COPY_AND_ASSIGN(PerfRasterWorkerPool);
78 };
79
80 class RasterWorkerPoolPerfTest : public testing::Test {
81 public:
82 RasterWorkerPoolPerfTest() : num_runs_(0) {}
83
84 // Overridden from testing::Test:
85 virtual void SetUp() OVERRIDE {
86 raster_worker_pool_ = PerfRasterWorkerPool::Create();
87 }
88 virtual void TearDown() OVERRIDE {
89 raster_worker_pool_->Shutdown();
90 }
91
92 void EndTest() {
93 elapsed_ = base::TimeTicks::HighResNow() - start_time_;
94 }
95
96 void AfterTest(const std::string test_name) {
97 // Format matches chrome/test/perf/perf_test.h:PrintResult
98 printf("*RESULT %s: %.2f runs/s\n",
99 test_name.c_str(),
100 num_runs_ / elapsed_.InSecondsF());
101 }
102
103 bool DidRun() {
104 ++num_runs_;
105 if (num_runs_ == kWarmupRuns)
106 start_time_ = base::TimeTicks::HighResNow();
107
108 if (!start_time_.is_null() && (num_runs_ % kTimeCheckInterval) == 0) {
109 base::TimeDelta elapsed = base::TimeTicks::HighResNow() - start_time_;
110 if (elapsed >= base::TimeDelta::FromMilliseconds(kTimeLimitMillis)) {
111 elapsed_ = elapsed;
112 return false;
113 }
114 }
115
116 return true;
117 }
118
119 void CreateTasks(RasterWorkerPool::RasterTask::Queue* tasks,
120 unsigned num_raster_tasks,
121 unsigned num_image_decode_tasks) {
122 typedef std::vector<RasterWorkerPool::Task> TaskVector;
123 TaskVector image_decode_tasks;
124
125 for (unsigned i = 0; i < num_image_decode_tasks; ++i) {
126 image_decode_tasks.push_back(
127 RasterWorkerPool::CreateImageDecodeTask(
128 NULL,
129 0,
130 NULL,
131 base::Bind(
132 &RasterWorkerPoolPerfTest::OnImageDecodeTaskCompleted)));
133 }
134
135 for (unsigned i = 0; i < num_raster_tasks; ++i) {
136 RasterWorkerPool::Task::Set decode_tasks;
137 for (TaskVector::iterator it = image_decode_tasks.begin();
138 it != image_decode_tasks.end(); ++it)
139 decode_tasks.Insert(*it);
140
141 tasks->Append(
142 RasterWorkerPool::CreateRasterTask(
143 NULL,
144 NULL,
145 gfx::Rect(),
146 1.0,
147 HIGH_QUALITY_RASTER_MODE,
148 false,
149 RasterTaskMetadata(),
150 NULL,
151 base::Bind(&RasterWorkerPoolPerfTest::OnRasterTaskCompleted),
152 &decode_tasks),
153 false);
154 }
155 }
156
157 void RunBuildTaskGraphTest(const std::string test_name,
158 unsigned num_raster_tasks,
159 unsigned num_image_decode_tasks) {
160 start_time_ = base::TimeTicks();
161 num_runs_ = 0;
162 RasterWorkerPool::RasterTask::Queue tasks;
163 CreateTasks(&tasks, num_raster_tasks, num_image_decode_tasks);
164 raster_worker_pool_->SetRasterTasks(&tasks);
165 do {
166 raster_worker_pool_->BuildTaskGraph();
167 } while (DidRun());
168
169 AfterTest(test_name);
170 }
171
172 protected:
173 static void OnRasterTaskCompleted(const PicturePileImpl::Analysis& analysis,
174 bool was_canceled) {}
175 static void OnImageDecodeTaskCompleted(bool was_canceled) {}
176
177 scoped_ptr<PerfRasterWorkerPool> raster_worker_pool_;
178 base::TimeTicks start_time_;
179 base::TimeDelta elapsed_;
180 int num_runs_;
181 };
182
183 TEST_F(RasterWorkerPoolPerfTest, BuildTaskGraph) {
184 RunBuildTaskGraphTest("build_task_graph_10_0", 10, 0);
185 RunBuildTaskGraphTest("build_task_graph_100_0", 100, 0);
186 RunBuildTaskGraphTest("build_task_graph_1000_0", 1000, 0);
187 RunBuildTaskGraphTest("build_task_graph_10_1", 10, 1);
188 RunBuildTaskGraphTest("build_task_graph_100_1", 100, 1);
189 RunBuildTaskGraphTest("build_task_graph_1000_1", 1000, 1);
190 RunBuildTaskGraphTest("build_task_graph_10_4", 10, 4);
191 RunBuildTaskGraphTest("build_task_graph_100_4", 100, 4);
192 RunBuildTaskGraphTest("build_task_graph_1000_4", 1000, 4);
193 RunBuildTaskGraphTest("build_task_graph_10_16", 10, 16);
194 RunBuildTaskGraphTest("build_task_graph_100_16", 100, 16);
195 RunBuildTaskGraphTest("build_task_graph_1000_16", 1000, 16);
196 }
197
198 } // namespace
199
200 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/raster_worker_pool.cc ('k') | cc/resources/raster_worker_pool_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698