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

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

Issue 1854723002: cc: Simplify task and its derived classes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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 2013 The Chromium Authors. All rights reserved. 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 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 "cc/raster/tile_task_worker_pool.h" 5 #include "cc/raster/tile_task_worker_pool.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY, 117 TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY,
118 TILE_TASK_WORKER_POOL_TYPE_ONE_COPY, 118 TILE_TASK_WORKER_POOL_TYPE_ONE_COPY,
119 TILE_TASK_WORKER_POOL_TYPE_GPU, 119 TILE_TASK_WORKER_POOL_TYPE_GPU,
120 TILE_TASK_WORKER_POOL_TYPE_BITMAP 120 TILE_TASK_WORKER_POOL_TYPE_BITMAP
121 }; 121 };
122 122
123 static const int kTimeLimitMillis = 2000; 123 static const int kTimeLimitMillis = 2000;
124 static const int kWarmupRuns = 5; 124 static const int kWarmupRuns = 5;
125 static const int kTimeCheckInterval = 10; 125 static const int kTimeCheckInterval = 10;
126 126
127 class PerfImageDecodeTaskImpl : public ImageDecodeTask { 127 class PerfImageDecodeTaskImpl : public DependencyTask {
128 public: 128 public:
129 PerfImageDecodeTaskImpl() {} 129 PerfImageDecodeTaskImpl() {}
130 130
131 // Overridden from Task: 131 // Overridden from DependencyTask:
132 void RunOnWorkerThread() override {} 132 void RunOnWorkerThread() override {}
133 133 void ScheduleOnOriginThread(DependencyTaskClient* client) override {}
134 // Overridden from TileTask: 134 void CompleteOnOriginThread(DependencyTaskClient* client) override {
135 void ScheduleOnOriginThread(TileTaskClient* client) override {} 135 Reset();
136 void CompleteOnOriginThread(TileTaskClient* client) override { Reset(); } 136 }
137 137
138 void Reset() { 138 void Reset() {
139 did_run_ = false; 139 did_run_ = false;
140 did_complete_ = false; 140 did_complete_ = false;
141 } 141 }
142 142
143 protected: 143 protected:
144 ~PerfImageDecodeTaskImpl() override {} 144 ~PerfImageDecodeTaskImpl() override {}
145 145
146 private: 146 private:
147 DISALLOW_COPY_AND_ASSIGN(PerfImageDecodeTaskImpl); 147 DISALLOW_COPY_AND_ASSIGN(PerfImageDecodeTaskImpl);
148 }; 148 };
149 149
150 class PerfRasterTaskImpl : public RasterTask { 150 class PerfRasterTaskImpl : public DependencyTask {
151 public: 151 public:
152 PerfRasterTaskImpl(scoped_ptr<ScopedResource> resource, 152 PerfRasterTaskImpl(scoped_ptr<ScopedResource> resource,
153 ImageDecodeTask::Vector* dependencies) 153 DependencyTask::Vector* dependencies)
154 : RasterTask(dependencies), resource_(std::move(resource)) {} 154 : DependencyTask(dependencies), resource_(std::move(resource)) {}
155 155
156 // Overridden from Task: 156 // Overridden from DependencyTask:
157 void RunOnWorkerThread() override {} 157 void RunOnWorkerThread() override {}
158 158 void ScheduleOnOriginThread(DependencyTaskClient* client) override {
159 // Overridden from TileTask:
160 void ScheduleOnOriginThread(TileTaskClient* client) override {
161 // No tile ids are given to support partial updates. 159 // No tile ids are given to support partial updates.
162 raster_buffer_ = client->AcquireBufferForRaster(resource_.get(), 0, 0); 160 raster_buffer_ = client->AcquireBufferForRaster(resource_.get(), 0, 0);
163 } 161 }
164 void CompleteOnOriginThread(TileTaskClient* client) override { 162 void CompleteOnOriginThread(DependencyTaskClient* client) override {
165 client->ReleaseBufferForRaster(std::move(raster_buffer_)); 163 client->ReleaseBufferForRaster(std::move(raster_buffer_));
166 Reset(); 164 Reset();
167 } 165 }
168 166
169 void Reset() { 167 void Reset() {
170 did_run_ = false; 168 did_run_ = false;
171 did_complete_ = false; 169 did_complete_ = false;
172 } 170 }
173 171
174 protected: 172 protected:
175 ~PerfRasterTaskImpl() override {} 173 ~PerfRasterTaskImpl() override {}
176 174
177 private: 175 private:
178 scoped_ptr<ScopedResource> resource_; 176 scoped_ptr<ScopedResource> resource_;
179 scoped_ptr<RasterBuffer> raster_buffer_; 177 scoped_ptr<RasterBuffer> raster_buffer_;
180 178
181 DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl); 179 DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl);
182 }; 180 };
183 181
184 class TileTaskWorkerPoolPerfTestBase { 182 class TileTaskWorkerPoolPerfTestBase {
185 public: 183 public:
186 typedef std::vector<scoped_refptr<RasterTask>> RasterTaskVector; 184 typedef std::vector<scoped_refptr<DependencyTask>> RasterTaskVector;
187 185
188 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW, ALL }; 186 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW, ALL };
189 187
190 TileTaskWorkerPoolPerfTestBase() 188 TileTaskWorkerPoolPerfTestBase()
191 : context_provider_(make_scoped_refptr(new PerfContextProvider)), 189 : context_provider_(make_scoped_refptr(new PerfContextProvider)),
192 task_runner_(new base::TestSimpleTaskRunner), 190 task_runner_(new base::TestSimpleTaskRunner),
193 task_graph_runner_(new SynchronousTaskGraphRunner), 191 task_graph_runner_(new SynchronousTaskGraphRunner),
194 timer_(kWarmupRuns, 192 timer_(kWarmupRuns,
195 base::TimeDelta::FromMilliseconds(kTimeLimitMillis), 193 base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
196 kTimeCheckInterval) {} 194 kTimeCheckInterval) {}
197 195
198 void CreateImageDecodeTasks(unsigned num_image_decode_tasks, 196 void CreateImageDecodeTasks(unsigned num_image_decode_tasks,
199 ImageDecodeTask::Vector* image_decode_tasks) { 197 DependencyTask::Vector* image_decode_tasks) {
200 for (unsigned i = 0; i < num_image_decode_tasks; ++i) 198 for (unsigned i = 0; i < num_image_decode_tasks; ++i)
201 image_decode_tasks->push_back(new PerfImageDecodeTaskImpl); 199 image_decode_tasks->push_back(new PerfImageDecodeTaskImpl);
202 } 200 }
203 201
204 void CreateRasterTasks(unsigned num_raster_tasks, 202 void CreateRasterTasks(unsigned num_raster_tasks,
205 const ImageDecodeTask::Vector& image_decode_tasks, 203 const DependencyTask::Vector& image_decode_tasks,
206 RasterTaskVector* raster_tasks) { 204 RasterTaskVector* raster_tasks) {
207 const gfx::Size size(1, 1); 205 const gfx::Size size(1, 1);
208 206
209 for (unsigned i = 0; i < num_raster_tasks; ++i) { 207 for (unsigned i = 0; i < num_raster_tasks; ++i) {
210 scoped_ptr<ScopedResource> resource( 208 scoped_ptr<ScopedResource> resource(
211 ScopedResource::Create(resource_provider_.get())); 209 ScopedResource::Create(resource_provider_.get()));
212 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, 210 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
213 RGBA_8888); 211 RGBA_8888);
214 212
215 ImageDecodeTask::Vector dependencies = image_decode_tasks; 213 DependencyTask::Vector dependencies = image_decode_tasks;
216 raster_tasks->push_back( 214 raster_tasks->push_back(
217 new PerfRasterTaskImpl(std::move(resource), &dependencies)); 215 new PerfRasterTaskImpl(std::move(resource), &dependencies));
218 } 216 }
219 } 217 }
220 218
221 void BuildTileTaskGraph(TaskGraph* graph, 219 void BuildTileTaskGraph(TaskGraph* graph,
222 const RasterTaskVector& raster_tasks) { 220 const RasterTaskVector& raster_tasks) {
223 uint16_t priority = 0; 221 uint16_t priority = 0;
224 222
225 for (auto& raster_task : raster_tasks) { 223 for (auto& raster_task : raster_tasks) {
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 } 290 }
293 291
294 void RunMessageLoopUntilAllTasksHaveCompleted() { 292 void RunMessageLoopUntilAllTasksHaveCompleted() {
295 task_graph_runner_->RunUntilIdle(); 293 task_graph_runner_->RunUntilIdle();
296 task_runner_->RunUntilIdle(); 294 task_runner_->RunUntilIdle();
297 } 295 }
298 296
299 void RunScheduleTasksTest(const std::string& test_name, 297 void RunScheduleTasksTest(const std::string& test_name,
300 unsigned num_raster_tasks, 298 unsigned num_raster_tasks,
301 unsigned num_image_decode_tasks) { 299 unsigned num_image_decode_tasks) {
302 ImageDecodeTask::Vector image_decode_tasks; 300 DependencyTask::Vector image_decode_tasks;
303 RasterTaskVector raster_tasks; 301 RasterTaskVector raster_tasks;
304 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 302 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
305 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 303 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
306 304
307 // Avoid unnecessary heap allocations by reusing the same graph. 305 // Avoid unnecessary heap allocations by reusing the same graph.
308 TaskGraph graph; 306 TaskGraph graph;
309 307
310 timer_.Reset(); 308 timer_.Reset();
311 do { 309 do {
312 graph.Reset(); 310 graph.Reset();
313 BuildTileTaskGraph(&graph, raster_tasks); 311 BuildTileTaskGraph(&graph, raster_tasks);
314 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph); 312 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph);
315 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); 313 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks();
316 timer_.NextLap(); 314 timer_.NextLap();
317 } while (!timer_.HasTimeLimitExpired()); 315 } while (!timer_.HasTimeLimitExpired());
318 316
319 TaskGraph empty; 317 TaskGraph empty;
320 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty); 318 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty);
321 RunMessageLoopUntilAllTasksHaveCompleted(); 319 RunMessageLoopUntilAllTasksHaveCompleted();
322 320
323 perf_test::PrintResult("schedule_tasks", TestModifierString(), test_name, 321 perf_test::PrintResult("schedule_tasks", TestModifierString(), test_name,
324 timer_.LapsPerSecond(), "runs/s", true); 322 timer_.LapsPerSecond(), "runs/s", true);
325 } 323 }
326 324
327 void RunScheduleAlternateTasksTest(const std::string& test_name, 325 void RunScheduleAlternateTasksTest(const std::string& test_name,
328 unsigned num_raster_tasks, 326 unsigned num_raster_tasks,
329 unsigned num_image_decode_tasks) { 327 unsigned num_image_decode_tasks) {
330 const size_t kNumVersions = 2; 328 const size_t kNumVersions = 2;
331 ImageDecodeTask::Vector image_decode_tasks[kNumVersions]; 329 DependencyTask::Vector image_decode_tasks[kNumVersions];
332 RasterTaskVector raster_tasks[kNumVersions]; 330 RasterTaskVector raster_tasks[kNumVersions];
333 for (size_t i = 0; i < kNumVersions; ++i) { 331 for (size_t i = 0; i < kNumVersions; ++i) {
334 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks[i]); 332 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks[i]);
335 CreateRasterTasks(num_raster_tasks, image_decode_tasks[i], 333 CreateRasterTasks(num_raster_tasks, image_decode_tasks[i],
336 &raster_tasks[i]); 334 &raster_tasks[i]);
337 } 335 }
338 336
339 // Avoid unnecessary heap allocations by reusing the same graph. 337 // Avoid unnecessary heap allocations by reusing the same graph.
340 TaskGraph graph; 338 TaskGraph graph;
341 339
(...skipping 12 matching lines...) Expand all
354 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty); 352 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty);
355 RunMessageLoopUntilAllTasksHaveCompleted(); 353 RunMessageLoopUntilAllTasksHaveCompleted();
356 354
357 perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(), 355 perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(),
358 test_name, timer_.LapsPerSecond(), "runs/s", true); 356 test_name, timer_.LapsPerSecond(), "runs/s", true);
359 } 357 }
360 358
361 void RunScheduleAndExecuteTasksTest(const std::string& test_name, 359 void RunScheduleAndExecuteTasksTest(const std::string& test_name,
362 unsigned num_raster_tasks, 360 unsigned num_raster_tasks,
363 unsigned num_image_decode_tasks) { 361 unsigned num_image_decode_tasks) {
364 ImageDecodeTask::Vector image_decode_tasks; 362 DependencyTask::Vector image_decode_tasks;
365 RasterTaskVector raster_tasks; 363 RasterTaskVector raster_tasks;
366 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 364 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
367 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 365 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
368 366
369 // Avoid unnecessary heap allocations by reusing the same graph. 367 // Avoid unnecessary heap allocations by reusing the same graph.
370 TaskGraph graph; 368 TaskGraph graph;
371 369
372 timer_.Reset(); 370 timer_.Reset();
373 do { 371 do {
374 graph.Reset(); 372 graph.Reset();
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 void SetUp() override { 461 void SetUp() override {
464 output_surface_ = FakeOutputSurface::Create3d(context_provider_); 462 output_surface_ = FakeOutputSurface::Create3d(context_provider_);
465 CHECK(output_surface_->BindToClient(&output_surface_client_)); 463 CHECK(output_surface_->BindToClient(&output_surface_client_));
466 resource_provider_ = 464 resource_provider_ =
467 FakeResourceProvider::Create(output_surface_.get(), nullptr); 465 FakeResourceProvider::Create(output_surface_.get(), nullptr);
468 } 466 }
469 467
470 void RunBuildTileTaskGraphTest(const std::string& test_name, 468 void RunBuildTileTaskGraphTest(const std::string& test_name,
471 unsigned num_raster_tasks, 469 unsigned num_raster_tasks,
472 unsigned num_image_decode_tasks) { 470 unsigned num_image_decode_tasks) {
473 ImageDecodeTask::Vector image_decode_tasks; 471 DependencyTask::Vector image_decode_tasks;
474 RasterTaskVector raster_tasks; 472 RasterTaskVector raster_tasks;
475 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 473 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
476 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 474 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
477 475
478 // Avoid unnecessary heap allocations by reusing the same graph. 476 // Avoid unnecessary heap allocations by reusing the same graph.
479 TaskGraph graph; 477 TaskGraph graph;
480 478
481 timer_.Reset(); 479 timer_.Reset();
482 do { 480 do {
483 graph.Reset(); 481 graph.Reset();
(...skipping 10 matching lines...) Expand all
494 RunBuildTileTaskGraphTest("1_0", 1, 0); 492 RunBuildTileTaskGraphTest("1_0", 1, 0);
495 RunBuildTileTaskGraphTest("32_0", 32, 0); 493 RunBuildTileTaskGraphTest("32_0", 32, 0);
496 RunBuildTileTaskGraphTest("1_1", 1, 1); 494 RunBuildTileTaskGraphTest("1_1", 1, 1);
497 RunBuildTileTaskGraphTest("32_1", 32, 1); 495 RunBuildTileTaskGraphTest("32_1", 32, 1);
498 RunBuildTileTaskGraphTest("1_4", 1, 4); 496 RunBuildTileTaskGraphTest("1_4", 1, 4);
499 RunBuildTileTaskGraphTest("32_4", 32, 4); 497 RunBuildTileTaskGraphTest("32_4", 32, 4);
500 } 498 }
501 499
502 } // namespace 500 } // namespace
503 } // namespace cc 501 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698