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

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: Remove unnecessary static cast. 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"
11 #include "base/test/test_simple_task_runner.h" 11 #include "base/test/test_simple_task_runner.h"
12 #include "base/time/time.h" 12 #include "base/time/time.h"
13 #include "cc/debug/lap_timer.h" 13 #include "cc/debug/lap_timer.h"
14 #include "cc/output/context_provider.h" 14 #include "cc/output/context_provider.h"
15 #include "cc/raster/bitmap_tile_task_worker_pool.h" 15 #include "cc/raster/bitmap_tile_task_worker_pool.h"
16 #include "cc/raster/gpu_rasterizer.h" 16 #include "cc/raster/gpu_rasterizer.h"
17 #include "cc/raster/gpu_tile_task_worker_pool.h" 17 #include "cc/raster/gpu_tile_task_worker_pool.h"
18 #include "cc/raster/one_copy_tile_task_worker_pool.h" 18 #include "cc/raster/one_copy_tile_task_worker_pool.h"
19 #include "cc/raster/raster_buffer.h"
20 #include "cc/raster/synchronous_task_graph_runner.h" 19 #include "cc/raster/synchronous_task_graph_runner.h"
21 #include "cc/raster/tile_task_runner.h" 20 #include "cc/raster/tile_task_runner.h"
22 #include "cc/raster/zero_copy_tile_task_worker_pool.h" 21 #include "cc/raster/zero_copy_tile_task_worker_pool.h"
23 #include "cc/resources/resource_pool.h" 22 #include "cc/resources/resource_pool.h"
24 #include "cc/resources/resource_provider.h" 23 #include "cc/resources/resource_provider.h"
25 #include "cc/resources/scoped_resource.h" 24 #include "cc/resources/scoped_resource.h"
26 #include "cc/test/fake_output_surface.h" 25 #include "cc/test/fake_output_surface.h"
27 #include "cc/test/fake_output_surface_client.h" 26 #include "cc/test/fake_output_surface_client.h"
28 #include "cc/test/fake_resource_provider.h" 27 #include "cc/test/fake_resource_provider.h"
29 #include "cc/test/test_context_support.h" 28 #include "cc/test/test_context_support.h"
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY, 116 TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY,
118 TILE_TASK_WORKER_POOL_TYPE_ONE_COPY, 117 TILE_TASK_WORKER_POOL_TYPE_ONE_COPY,
119 TILE_TASK_WORKER_POOL_TYPE_GPU, 118 TILE_TASK_WORKER_POOL_TYPE_GPU,
120 TILE_TASK_WORKER_POOL_TYPE_BITMAP 119 TILE_TASK_WORKER_POOL_TYPE_BITMAP
121 }; 120 };
122 121
123 static const int kTimeLimitMillis = 2000; 122 static const int kTimeLimitMillis = 2000;
124 static const int kWarmupRuns = 5; 123 static const int kWarmupRuns = 5;
125 static const int kTimeCheckInterval = 10; 124 static const int kTimeCheckInterval = 10;
126 125
127 class PerfImageDecodeTaskImpl : public ImageDecodeTask { 126 class PerfImageDecodeTaskImpl : public Task {
128 public: 127 public:
129 PerfImageDecodeTaskImpl() {} 128 PerfImageDecodeTaskImpl() {}
130 129
131 // Overridden from Task: 130 // Overridden from Task:
131 void ScheduleOnOriginThread() override {}
132 void CompleteOnOriginThread() override { Reset(); }
132 void RunOnWorkerThread() override {} 133 void RunOnWorkerThread() override {}
133 134
134 // Overridden from TileTask:
135 void ScheduleOnOriginThread(TileTaskClient* client) override {}
136 void CompleteOnOriginThread(TileTaskClient* client) override { Reset(); }
137
138 void Reset() { 135 void Reset() {
139 did_run_ = false; 136 did_run_ = false;
140 did_complete_ = false; 137 did_complete_ = false;
141 } 138 }
142 139
143 protected: 140 protected:
144 ~PerfImageDecodeTaskImpl() override {} 141 ~PerfImageDecodeTaskImpl() override {}
145 142
146 private: 143 private:
147 DISALLOW_COPY_AND_ASSIGN(PerfImageDecodeTaskImpl); 144 DISALLOW_COPY_AND_ASSIGN(PerfImageDecodeTaskImpl);
148 }; 145 };
149 146
150 class PerfRasterTaskImpl : public RasterTask { 147 class PerfRasterTaskImpl : public Task {
151 public: 148 public:
152 PerfRasterTaskImpl(scoped_ptr<ScopedResource> resource, 149 PerfRasterTaskImpl(RasterBufferProvider* raster_buffer_provider,
153 ImageDecodeTask::Vector* dependencies) 150 scoped_ptr<ScopedResource> resource,
154 : RasterTask(dependencies), resource_(std::move(resource)) {} 151 Task::Vector* dependencies)
152 : Task(dependencies),
153 raster_buffer_provider_(raster_buffer_provider),
154 resource_(std::move(resource)) {}
155 155
156 // Overridden from Task: 156 // Overridden from Task:
157 void RunOnWorkerThread() override {} 157 void ScheduleOnOriginThread() override {
158
159 // Overridden from TileTask:
160 void ScheduleOnOriginThread(TileTaskClient* client) override {
161 // No tile ids are given to support partial updates. 158 // No tile ids are given to support partial updates.
162 raster_buffer_ = client->AcquireBufferForRaster(resource_.get(), 0, 0); 159 raster_buffer_ =
160 raster_buffer_provider_->AcquireBufferForRaster(resource_.get(), 0, 0);
163 } 161 }
164 void CompleteOnOriginThread(TileTaskClient* client) override { 162 void CompleteOnOriginThread() override {
165 client->ReleaseBufferForRaster(std::move(raster_buffer_)); 163 raster_buffer_provider_->ReleaseBufferForRaster(std::move(raster_buffer_));
166 Reset(); 164 Reset();
167 } 165 }
166 void RunOnWorkerThread() override {}
168 167
169 void Reset() { 168 void Reset() {
170 did_run_ = false; 169 did_run_ = false;
171 did_complete_ = false; 170 did_complete_ = false;
172 } 171 }
173 172
174 protected: 173 protected:
175 ~PerfRasterTaskImpl() override {} 174 ~PerfRasterTaskImpl() override {}
176 175
177 private: 176 private:
177 RasterBufferProvider* raster_buffer_provider_;
178 scoped_ptr<ScopedResource> resource_; 178 scoped_ptr<ScopedResource> resource_;
179 scoped_ptr<RasterBuffer> raster_buffer_; 179 scoped_ptr<RasterBuffer> raster_buffer_;
180 180
181 DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl); 181 DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl);
182 }; 182 };
183 183
184 class TileTaskWorkerPoolPerfTestBase { 184 class TileTaskWorkerPoolPerfTestBase {
185 public: 185 public:
186 typedef std::vector<scoped_refptr<RasterTask>> RasterTaskVector; 186 typedef std::vector<scoped_refptr<Task>> RasterTaskVector;
187 187
188 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW, ALL }; 188 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW, ALL };
189 189
190 TileTaskWorkerPoolPerfTestBase() 190 TileTaskWorkerPoolPerfTestBase()
191 : context_provider_(make_scoped_refptr(new PerfContextProvider)), 191 : context_provider_(make_scoped_refptr(new PerfContextProvider)),
192 task_runner_(new base::TestSimpleTaskRunner), 192 task_runner_(new base::TestSimpleTaskRunner),
193 task_graph_runner_(new SynchronousTaskGraphRunner), 193 task_graph_runner_(new SynchronousTaskGraphRunner),
194 timer_(kWarmupRuns, 194 timer_(kWarmupRuns,
195 base::TimeDelta::FromMilliseconds(kTimeLimitMillis), 195 base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
196 kTimeCheckInterval) {} 196 kTimeCheckInterval) {}
197 197
198 void CreateImageDecodeTasks(unsigned num_image_decode_tasks, 198 void CreateImageDecodeTasks(unsigned num_image_decode_tasks,
199 ImageDecodeTask::Vector* image_decode_tasks) { 199 Task::Vector* image_decode_tasks) {
200 for (unsigned i = 0; i < num_image_decode_tasks; ++i) 200 for (unsigned i = 0; i < num_image_decode_tasks; ++i)
201 image_decode_tasks->push_back(new PerfImageDecodeTaskImpl); 201 image_decode_tasks->push_back(new PerfImageDecodeTaskImpl);
202 } 202 }
203 203
204 void CreateRasterTasks(unsigned num_raster_tasks, 204 void CreateRasterTasks(RasterBufferProvider* raster_buffer_provider,
205 const ImageDecodeTask::Vector& image_decode_tasks, 205 unsigned num_raster_tasks,
206 const Task::Vector& image_decode_tasks,
206 RasterTaskVector* raster_tasks) { 207 RasterTaskVector* raster_tasks) {
207 const gfx::Size size(1, 1); 208 const gfx::Size size(1, 1);
208 209
209 for (unsigned i = 0; i < num_raster_tasks; ++i) { 210 for (unsigned i = 0; i < num_raster_tasks; ++i) {
210 scoped_ptr<ScopedResource> resource( 211 scoped_ptr<ScopedResource> resource(
211 ScopedResource::Create(resource_provider_.get())); 212 ScopedResource::Create(resource_provider_.get()));
212 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, 213 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
213 RGBA_8888); 214 RGBA_8888);
214 215
215 ImageDecodeTask::Vector dependencies = image_decode_tasks; 216 Task::Vector dependencies = image_decode_tasks;
216 raster_tasks->push_back( 217 raster_tasks->push_back(new PerfRasterTaskImpl(
217 new PerfRasterTaskImpl(std::move(resource), &dependencies)); 218 raster_buffer_provider, std::move(resource), &dependencies));
218 } 219 }
219 } 220 }
220 221
221 void BuildTileTaskGraph(TaskGraph* graph, 222 void BuildTileTaskGraph(TaskGraph* graph,
222 const RasterTaskVector& raster_tasks) { 223 const RasterTaskVector& raster_tasks) {
223 uint16_t priority = 0; 224 uint16_t priority = 0;
224 225
225 for (auto& raster_task : raster_tasks) { 226 for (auto& raster_task : raster_tasks) {
226 priority++; 227 priority++;
227 228
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 } 293 }
293 294
294 void RunMessageLoopUntilAllTasksHaveCompleted() { 295 void RunMessageLoopUntilAllTasksHaveCompleted() {
295 task_graph_runner_->RunUntilIdle(); 296 task_graph_runner_->RunUntilIdle();
296 task_runner_->RunUntilIdle(); 297 task_runner_->RunUntilIdle();
297 } 298 }
298 299
299 void RunScheduleTasksTest(const std::string& test_name, 300 void RunScheduleTasksTest(const std::string& test_name,
300 unsigned num_raster_tasks, 301 unsigned num_raster_tasks,
301 unsigned num_image_decode_tasks) { 302 unsigned num_image_decode_tasks) {
302 ImageDecodeTask::Vector image_decode_tasks; 303 Task::Vector image_decode_tasks;
303 RasterTaskVector raster_tasks; 304 RasterTaskVector raster_tasks;
304 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 305 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
305 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 306 CreateRasterTasks(tile_task_worker_pool_->AsTileTaskRunner(),
307 num_raster_tasks, image_decode_tasks, &raster_tasks);
306 308
307 // Avoid unnecessary heap allocations by reusing the same graph. 309 // Avoid unnecessary heap allocations by reusing the same graph.
308 TaskGraph graph; 310 TaskGraph graph;
309 311
310 timer_.Reset(); 312 timer_.Reset();
311 do { 313 do {
312 graph.Reset(); 314 graph.Reset();
313 BuildTileTaskGraph(&graph, raster_tasks); 315 BuildTileTaskGraph(&graph, raster_tasks);
314 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph); 316 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph);
315 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); 317 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks();
316 timer_.NextLap(); 318 timer_.NextLap();
317 } while (!timer_.HasTimeLimitExpired()); 319 } while (!timer_.HasTimeLimitExpired());
318 320
319 TaskGraph empty; 321 TaskGraph empty;
320 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty); 322 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty);
321 RunMessageLoopUntilAllTasksHaveCompleted(); 323 RunMessageLoopUntilAllTasksHaveCompleted();
322 324
323 perf_test::PrintResult("schedule_tasks", TestModifierString(), test_name, 325 perf_test::PrintResult("schedule_tasks", TestModifierString(), test_name,
324 timer_.LapsPerSecond(), "runs/s", true); 326 timer_.LapsPerSecond(), "runs/s", true);
325 } 327 }
326 328
327 void RunScheduleAlternateTasksTest(const std::string& test_name, 329 void RunScheduleAlternateTasksTest(const std::string& test_name,
328 unsigned num_raster_tasks, 330 unsigned num_raster_tasks,
329 unsigned num_image_decode_tasks) { 331 unsigned num_image_decode_tasks) {
330 const size_t kNumVersions = 2; 332 const size_t kNumVersions = 2;
331 ImageDecodeTask::Vector image_decode_tasks[kNumVersions]; 333 Task::Vector image_decode_tasks[kNumVersions];
332 RasterTaskVector raster_tasks[kNumVersions]; 334 RasterTaskVector raster_tasks[kNumVersions];
333 for (size_t i = 0; i < kNumVersions; ++i) { 335 for (size_t i = 0; i < kNumVersions; ++i) {
334 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks[i]); 336 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks[i]);
335 CreateRasterTasks(num_raster_tasks, image_decode_tasks[i], 337 CreateRasterTasks(tile_task_worker_pool_->AsTileTaskRunner(),
338 num_raster_tasks, image_decode_tasks[i],
336 &raster_tasks[i]); 339 &raster_tasks[i]);
337 } 340 }
338 341
339 // Avoid unnecessary heap allocations by reusing the same graph. 342 // Avoid unnecessary heap allocations by reusing the same graph.
340 TaskGraph graph; 343 TaskGraph graph;
341 344
342 size_t count = 0; 345 size_t count = 0;
343 timer_.Reset(); 346 timer_.Reset();
344 do { 347 do {
345 graph.Reset(); 348 graph.Reset();
346 BuildTileTaskGraph(&graph, raster_tasks[count % kNumVersions]); 349 BuildTileTaskGraph(&graph, raster_tasks[count % kNumVersions]);
347 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph); 350 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph);
348 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); 351 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks();
349 ++count; 352 ++count;
350 timer_.NextLap(); 353 timer_.NextLap();
351 } while (!timer_.HasTimeLimitExpired()); 354 } while (!timer_.HasTimeLimitExpired());
352 355
353 TaskGraph empty; 356 TaskGraph empty;
354 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty); 357 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty);
355 RunMessageLoopUntilAllTasksHaveCompleted(); 358 RunMessageLoopUntilAllTasksHaveCompleted();
356 359
357 perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(), 360 perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(),
358 test_name, timer_.LapsPerSecond(), "runs/s", true); 361 test_name, timer_.LapsPerSecond(), "runs/s", true);
359 } 362 }
360 363
361 void RunScheduleAndExecuteTasksTest(const std::string& test_name, 364 void RunScheduleAndExecuteTasksTest(const std::string& test_name,
362 unsigned num_raster_tasks, 365 unsigned num_raster_tasks,
363 unsigned num_image_decode_tasks) { 366 unsigned num_image_decode_tasks) {
364 ImageDecodeTask::Vector image_decode_tasks; 367 Task::Vector image_decode_tasks;
365 RasterTaskVector raster_tasks; 368 RasterTaskVector raster_tasks;
366 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 369 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
367 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 370 CreateRasterTasks(tile_task_worker_pool_->AsTileTaskRunner(),
371 num_raster_tasks, image_decode_tasks, &raster_tasks);
368 372
369 // Avoid unnecessary heap allocations by reusing the same graph. 373 // Avoid unnecessary heap allocations by reusing the same graph.
370 TaskGraph graph; 374 TaskGraph graph;
371 375
372 timer_.Reset(); 376 timer_.Reset();
373 do { 377 do {
374 graph.Reset(); 378 graph.Reset();
375 BuildTileTaskGraph(&graph, raster_tasks); 379 BuildTileTaskGraph(&graph, raster_tasks);
376 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph); 380 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph);
377 RunMessageLoopUntilAllTasksHaveCompleted(); 381 RunMessageLoopUntilAllTasksHaveCompleted();
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 void SetUp() override { 467 void SetUp() override {
464 output_surface_ = FakeOutputSurface::Create3d(context_provider_); 468 output_surface_ = FakeOutputSurface::Create3d(context_provider_);
465 CHECK(output_surface_->BindToClient(&output_surface_client_)); 469 CHECK(output_surface_->BindToClient(&output_surface_client_));
466 resource_provider_ = 470 resource_provider_ =
467 FakeResourceProvider::Create(output_surface_.get(), nullptr); 471 FakeResourceProvider::Create(output_surface_.get(), nullptr);
468 } 472 }
469 473
470 void RunBuildTileTaskGraphTest(const std::string& test_name, 474 void RunBuildTileTaskGraphTest(const std::string& test_name,
471 unsigned num_raster_tasks, 475 unsigned num_raster_tasks,
472 unsigned num_image_decode_tasks) { 476 unsigned num_image_decode_tasks) {
473 ImageDecodeTask::Vector image_decode_tasks; 477 Task::Vector image_decode_tasks;
474 RasterTaskVector raster_tasks; 478 RasterTaskVector raster_tasks;
475 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 479 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
476 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 480 // TODO(prashant.n): Pass real RasterBufferProvider instead of nullptr.
481 CreateRasterTasks(nullptr, num_raster_tasks, image_decode_tasks,
482 &raster_tasks);
477 483
478 // Avoid unnecessary heap allocations by reusing the same graph. 484 // Avoid unnecessary heap allocations by reusing the same graph.
479 TaskGraph graph; 485 TaskGraph graph;
480 486
481 timer_.Reset(); 487 timer_.Reset();
482 do { 488 do {
483 graph.Reset(); 489 graph.Reset();
484 BuildTileTaskGraph(&graph, raster_tasks); 490 BuildTileTaskGraph(&graph, raster_tasks);
485 timer_.NextLap(); 491 timer_.NextLap();
486 } while (!timer_.HasTimeLimitExpired()); 492 } while (!timer_.HasTimeLimitExpired());
487 493
488 perf_test::PrintResult("build_raster_task_graph", "", test_name, 494 perf_test::PrintResult("build_raster_task_graph", "", test_name,
489 timer_.LapsPerSecond(), "runs/s", true); 495 timer_.LapsPerSecond(), "runs/s", true);
490 } 496 }
491 }; 497 };
492 498
493 TEST_F(TileTaskWorkerPoolCommonPerfTest, BuildTileTaskGraph) { 499 TEST_F(TileTaskWorkerPoolCommonPerfTest, BuildTileTaskGraph) {
494 RunBuildTileTaskGraphTest("1_0", 1, 0); 500 RunBuildTileTaskGraphTest("1_0", 1, 0);
495 RunBuildTileTaskGraphTest("32_0", 32, 0); 501 RunBuildTileTaskGraphTest("32_0", 32, 0);
496 RunBuildTileTaskGraphTest("1_1", 1, 1); 502 RunBuildTileTaskGraphTest("1_1", 1, 1);
497 RunBuildTileTaskGraphTest("32_1", 32, 1); 503 RunBuildTileTaskGraphTest("32_1", 32, 1);
498 RunBuildTileTaskGraphTest("1_4", 1, 4); 504 RunBuildTileTaskGraphTest("1_4", 1, 4);
499 RunBuildTileTaskGraphTest("32_4", 32, 4); 505 RunBuildTileTaskGraphTest("32_4", 32, 4);
500 } 506 }
501 507
502 } // namespace 508 } // namespace
503 } // namespace cc 509 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698