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

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

Issue 1890903002: cc: Simplify Task and its derived classes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@remove_tile_task_runner
Patch Set: nits 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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/test/test_simple_task_runner.h" 10 #include "base/test/test_simple_task_runner.h"
11 #include "base/time/time.h" 11 #include "base/time/time.h"
12 #include "cc/debug/lap_timer.h" 12 #include "cc/debug/lap_timer.h"
13 #include "cc/output/context_provider.h" 13 #include "cc/output/context_provider.h"
14 #include "cc/raster/bitmap_tile_task_worker_pool.h" 14 #include "cc/raster/bitmap_tile_task_worker_pool.h"
15 #include "cc/raster/gpu_rasterizer.h" 15 #include "cc/raster/gpu_rasterizer.h"
16 #include "cc/raster/gpu_tile_task_worker_pool.h" 16 #include "cc/raster/gpu_tile_task_worker_pool.h"
17 #include "cc/raster/one_copy_tile_task_worker_pool.h" 17 #include "cc/raster/one_copy_tile_task_worker_pool.h"
18 #include "cc/raster/synchronous_task_graph_runner.h" 18 #include "cc/raster/synchronous_task_graph_runner.h"
19 #include "cc/raster/tile_task_runner.h"
20 #include "cc/raster/tile_task_worker_pool.h" 19 #include "cc/raster/tile_task_worker_pool.h"
21 #include "cc/raster/zero_copy_tile_task_worker_pool.h" 20 #include "cc/raster/zero_copy_tile_task_worker_pool.h"
22 #include "cc/resources/resource_pool.h" 21 #include "cc/resources/resource_pool.h"
23 #include "cc/resources/resource_provider.h" 22 #include "cc/resources/resource_provider.h"
24 #include "cc/resources/scoped_resource.h" 23 #include "cc/resources/scoped_resource.h"
25 #include "cc/test/fake_output_surface.h" 24 #include "cc/test/fake_output_surface.h"
26 #include "cc/test/fake_output_surface_client.h" 25 #include "cc/test/fake_output_surface_client.h"
27 #include "cc/test/fake_resource_provider.h" 26 #include "cc/test/fake_resource_provider.h"
28 #include "cc/test/test_context_support.h" 27 #include "cc/test/test_context_support.h"
29 #include "cc/test/test_gpu_memory_buffer_manager.h" 28 #include "cc/test/test_gpu_memory_buffer_manager.h"
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY, 115 TILE_TASK_WORKER_POOL_TYPE_ZERO_COPY,
117 TILE_TASK_WORKER_POOL_TYPE_ONE_COPY, 116 TILE_TASK_WORKER_POOL_TYPE_ONE_COPY,
118 TILE_TASK_WORKER_POOL_TYPE_GPU, 117 TILE_TASK_WORKER_POOL_TYPE_GPU,
119 TILE_TASK_WORKER_POOL_TYPE_BITMAP 118 TILE_TASK_WORKER_POOL_TYPE_BITMAP
120 }; 119 };
121 120
122 static const int kTimeLimitMillis = 2000; 121 static const int kTimeLimitMillis = 2000;
123 static const int kWarmupRuns = 5; 122 static const int kWarmupRuns = 5;
124 static const int kTimeCheckInterval = 10; 123 static const int kTimeCheckInterval = 10;
125 124
126 class PerfImageDecodeTaskImpl : public ImageDecodeTask { 125 class PerfImageDecodeTaskImpl : public Task {
127 public: 126 public:
128 PerfImageDecodeTaskImpl() { SetTaskTypeId(TASK_TYPE_IMAGE_DECODE); } 127 PerfImageDecodeTaskImpl() { SetTaskType(TASK_TYPE_IMAGE_DECODE); }
129 128
130 // Overridden from Task: 129 // Overridden from Task:
131 void RunOnWorkerThread() override {} 130 void RunOnWorkerThread() override {}
132 131
133 void Reset() { 132 void Reset() {
134 did_run_ = false; 133 did_run_ = false;
135 did_complete_ = false; 134 did_complete_ = false;
136 } 135 }
137 136
138 protected: 137 protected:
139 ~PerfImageDecodeTaskImpl() override {} 138 ~PerfImageDecodeTaskImpl() override {}
140 139
141 private: 140 private:
142 DISALLOW_COPY_AND_ASSIGN(PerfImageDecodeTaskImpl); 141 DISALLOW_COPY_AND_ASSIGN(PerfImageDecodeTaskImpl);
143 }; 142 };
144 143
145 class PerfRasterTaskImpl : public RasterTask { 144 class PerfRasterTaskImpl : public Task {
146 public: 145 public:
147 PerfRasterTaskImpl(std::unique_ptr<ScopedResource> resource, 146 PerfRasterTaskImpl(std::unique_ptr<ScopedResource> resource,
148 std::unique_ptr<RasterBuffer> raster_buffer, 147 std::unique_ptr<RasterBuffer> raster_buffer,
149 ImageDecodeTask::Vector* dependencies) 148 Task::Vector* dependencies)
150 : RasterTask(dependencies), 149 : Task(dependencies),
151 resource_(std::move(resource)), 150 resource_(std::move(resource)),
152 raster_buffer_(std::move(raster_buffer)) { 151 raster_buffer_(std::move(raster_buffer)) {
153 SetTaskTypeId(TASK_TYPE_RASTER); 152 SetTaskType(TASK_TYPE_RASTER);
154 } 153 }
155 154
156 // Overridden from Task: 155 // Overridden from Task:
157 void RunOnWorkerThread() override {} 156 void RunOnWorkerThread() override {}
158 157
159 void Reset() { 158 void Reset() {
160 did_run_ = false; 159 did_run_ = false;
161 did_complete_ = false; 160 did_complete_ = false;
162 } 161 }
163 162
164 protected: 163 protected:
165 ~PerfRasterTaskImpl() override {} 164 ~PerfRasterTaskImpl() override {}
166 165
167 private: 166 private:
168 std::unique_ptr<ScopedResource> resource_; 167 std::unique_ptr<ScopedResource> resource_;
169 std::unique_ptr<RasterBuffer> raster_buffer_; 168 std::unique_ptr<RasterBuffer> raster_buffer_;
170 169
171 DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl); 170 DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl);
172 }; 171 };
173 172
174 class TileTaskWorkerPoolPerfTestBase : public RasterBufferProvider { 173 class TileTaskWorkerPoolPerfTestBase : public RasterBufferProvider {
175 public: 174 public:
176 typedef std::vector<scoped_refptr<RasterTask>> RasterTaskVector; 175 typedef Task::Vector RasterTaskVector;
177 176
178 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW, ALL }; 177 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW, ALL };
179 178
180 TileTaskWorkerPoolPerfTestBase() 179 TileTaskWorkerPoolPerfTestBase()
181 : context_provider_(make_scoped_refptr(new PerfContextProvider)), 180 : context_provider_(make_scoped_refptr(new PerfContextProvider)),
182 task_runner_(new base::TestSimpleTaskRunner), 181 task_runner_(new base::TestSimpleTaskRunner),
183 task_graph_runner_(new SynchronousTaskGraphRunner), 182 task_graph_runner_(new SynchronousTaskGraphRunner),
184 timer_(kWarmupRuns, 183 timer_(kWarmupRuns,
185 base::TimeDelta::FromMilliseconds(kTimeLimitMillis), 184 base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
186 kTimeCheckInterval) {} 185 kTimeCheckInterval) {}
187 186
188 // Overridden from RasterBufferProvider: 187 // Overridden from RasterBufferProvider:
189 scoped_ptr<RasterBuffer> AcquireBufferForRaster( 188 scoped_ptr<RasterBuffer> AcquireBufferForRaster(
190 const Resource* resource, 189 const Resource* resource,
191 uint64_t resource_content_id, 190 uint64_t resource_content_id,
192 uint64_t previous_content_id) override { 191 uint64_t previous_content_id) override {
193 return nullptr; 192 return nullptr;
194 } 193 }
195 void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override {} 194 void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override {}
196 195
197 void CreateImageDecodeTasks(unsigned num_image_decode_tasks, 196 void CreateImageDecodeTasks(unsigned num_image_decode_tasks,
198 ImageDecodeTask::Vector* image_decode_tasks) { 197 Task::Vector* image_decode_tasks) {
199 for (unsigned i = 0; i < num_image_decode_tasks; ++i) 198 for (unsigned i = 0; i < num_image_decode_tasks; ++i)
200 image_decode_tasks->push_back(new PerfImageDecodeTaskImpl); 199 image_decode_tasks->push_back(new PerfImageDecodeTaskImpl);
201 } 200 }
202 201
203 void CreateRasterTasks(unsigned num_raster_tasks, 202 void CreateRasterTasks(unsigned num_raster_tasks,
204 const ImageDecodeTask::Vector& image_decode_tasks, 203 const Task::Vector& image_decode_tasks,
205 RasterTaskVector* raster_tasks) { 204 RasterTaskVector* raster_tasks) {
206 const gfx::Size size(1, 1); 205 const gfx::Size size(1, 1);
207 206
208 for (unsigned i = 0; i < num_raster_tasks; ++i) { 207 for (unsigned i = 0; i < num_raster_tasks; ++i) {
209 std::unique_ptr<ScopedResource> resource( 208 std::unique_ptr<ScopedResource> resource(
210 ScopedResource::Create(resource_provider_.get())); 209 ScopedResource::Create(resource_provider_.get()));
211 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, 210 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
212 RGBA_8888); 211 RGBA_8888);
213 ImageDecodeTask::Vector dependencies = image_decode_tasks; 212 Task::Vector dependencies = image_decode_tasks;
214 scoped_ptr<RasterBuffer> raster_buffer = 213 scoped_ptr<RasterBuffer> raster_buffer =
215 AcquireBufferForRaster(resource.get(), 0, 0); 214 AcquireBufferForRaster(resource.get(), 0, 0);
216 raster_tasks->push_back(new PerfRasterTaskImpl( 215 raster_tasks->push_back(new PerfRasterTaskImpl(
217 std::move(resource), std::move(raster_buffer), &dependencies)); 216 std::move(resource), std::move(raster_buffer), &dependencies));
218 } 217 }
219 } 218 }
220 219
221 void BuildTileTaskGraph(TaskGraph* graph, 220 void BuildTileTaskGraph(TaskGraph* graph,
222 const RasterTaskVector& raster_tasks) { 221 const RasterTaskVector& raster_tasks) {
223 uint16_t priority = 0; 222 uint16_t priority = 0;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 } 284 }
286 285
287 DCHECK(tile_task_worker_pool_); 286 DCHECK(tile_task_worker_pool_);
288 } 287 }
289 288
290 void CheckAndProcessCompletedTasks() { 289 void CheckAndProcessCompletedTasks() {
291 Task::Vector completed_tasks; 290 Task::Vector completed_tasks;
292 tile_task_worker_pool_->CollectCompletedTasks(&completed_tasks); 291 tile_task_worker_pool_->CollectCompletedTasks(&completed_tasks);
293 292
294 for (auto task : completed_tasks) { 293 for (auto task : completed_tasks) {
295 if (task->GetTaskTypeId() == TASK_TYPE_IMAGE_DECODE) { 294 if (task->GetTaskType() == TASK_TYPE_IMAGE_DECODE) {
296 static_cast<PerfImageDecodeTaskImpl*>(task.get())->Reset(); 295 static_cast<PerfImageDecodeTaskImpl*>(task.get())->Reset();
297 } else if (task->GetTaskTypeId() == TASK_TYPE_RASTER) { 296 } else if (task->GetTaskType() == TASK_TYPE_RASTER) {
298 static_cast<PerfRasterTaskImpl*>(task.get())->Reset(); 297 static_cast<PerfRasterTaskImpl*>(task.get())->Reset();
299 } 298 }
300 299
301 static_cast<TileTask*>(task.get())->DidComplete(); 300 task->DidComplete();
302 } 301 }
303 completed_tasks.clear(); 302 completed_tasks.clear();
304 } 303 }
305 304
306 void TearDown() override { 305 void TearDown() override {
307 tile_task_worker_pool_->Shutdown(); 306 tile_task_worker_pool_->Shutdown();
308 CheckAndProcessCompletedTasks(); 307 CheckAndProcessCompletedTasks();
309 } 308 }
310 309
311 void RunMessageLoopUntilAllTasksHaveCompleted() { 310 void RunMessageLoopUntilAllTasksHaveCompleted() {
312 task_graph_runner_->RunUntilIdle(); 311 task_graph_runner_->RunUntilIdle();
313 task_runner_->RunUntilIdle(); 312 task_runner_->RunUntilIdle();
314 } 313 }
315 314
316 void RunScheduleTasksTest(const std::string& test_name, 315 void RunScheduleTasksTest(const std::string& test_name,
317 unsigned num_raster_tasks, 316 unsigned num_raster_tasks,
318 unsigned num_image_decode_tasks) { 317 unsigned num_image_decode_tasks) {
319 ImageDecodeTask::Vector image_decode_tasks; 318 Task::Vector image_decode_tasks;
320 RasterTaskVector raster_tasks; 319 RasterTaskVector raster_tasks;
321 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 320 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
322 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 321 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
323 322
324 // Avoid unnecessary heap allocations by reusing the same graph. 323 // Avoid unnecessary heap allocations by reusing the same graph.
325 TaskGraph graph; 324 TaskGraph graph;
326 325
327 timer_.Reset(); 326 timer_.Reset();
328 do { 327 do {
329 graph.Reset(); 328 graph.Reset();
330 BuildTileTaskGraph(&graph, raster_tasks); 329 BuildTileTaskGraph(&graph, raster_tasks);
331 tile_task_worker_pool_->ScheduleTasks(&graph); 330 tile_task_worker_pool_->ScheduleTasks(&graph);
332 CheckAndProcessCompletedTasks(); 331 CheckAndProcessCompletedTasks();
333 timer_.NextLap(); 332 timer_.NextLap();
334 } while (!timer_.HasTimeLimitExpired()); 333 } while (!timer_.HasTimeLimitExpired());
335 334
336 TaskGraph empty; 335 TaskGraph empty;
337 tile_task_worker_pool_->ScheduleTasks(&empty); 336 tile_task_worker_pool_->ScheduleTasks(&empty);
338 RunMessageLoopUntilAllTasksHaveCompleted(); 337 RunMessageLoopUntilAllTasksHaveCompleted();
339 338
340 perf_test::PrintResult("schedule_tasks", TestModifierString(), test_name, 339 perf_test::PrintResult("schedule_tasks", TestModifierString(), test_name,
341 timer_.LapsPerSecond(), "runs/s", true); 340 timer_.LapsPerSecond(), "runs/s", true);
342 } 341 }
343 342
344 void RunScheduleAlternateTasksTest(const std::string& test_name, 343 void RunScheduleAlternateTasksTest(const std::string& test_name,
345 unsigned num_raster_tasks, 344 unsigned num_raster_tasks,
346 unsigned num_image_decode_tasks) { 345 unsigned num_image_decode_tasks) {
347 const size_t kNumVersions = 2; 346 const size_t kNumVersions = 2;
348 ImageDecodeTask::Vector image_decode_tasks[kNumVersions]; 347 Task::Vector image_decode_tasks[kNumVersions];
349 RasterTaskVector raster_tasks[kNumVersions]; 348 RasterTaskVector raster_tasks[kNumVersions];
350 for (size_t i = 0; i < kNumVersions; ++i) { 349 for (size_t i = 0; i < kNumVersions; ++i) {
351 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks[i]); 350 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks[i]);
352 CreateRasterTasks(num_raster_tasks, image_decode_tasks[i], 351 CreateRasterTasks(num_raster_tasks, image_decode_tasks[i],
353 &raster_tasks[i]); 352 &raster_tasks[i]);
354 } 353 }
355 354
356 // Avoid unnecessary heap allocations by reusing the same graph. 355 // Avoid unnecessary heap allocations by reusing the same graph.
357 TaskGraph graph; 356 TaskGraph graph;
358 357
(...skipping 12 matching lines...) Expand all
371 tile_task_worker_pool_->ScheduleTasks(&empty); 370 tile_task_worker_pool_->ScheduleTasks(&empty);
372 RunMessageLoopUntilAllTasksHaveCompleted(); 371 RunMessageLoopUntilAllTasksHaveCompleted();
373 372
374 perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(), 373 perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(),
375 test_name, timer_.LapsPerSecond(), "runs/s", true); 374 test_name, timer_.LapsPerSecond(), "runs/s", true);
376 } 375 }
377 376
378 void RunScheduleAndExecuteTasksTest(const std::string& test_name, 377 void RunScheduleAndExecuteTasksTest(const std::string& test_name,
379 unsigned num_raster_tasks, 378 unsigned num_raster_tasks,
380 unsigned num_image_decode_tasks) { 379 unsigned num_image_decode_tasks) {
381 ImageDecodeTask::Vector image_decode_tasks; 380 Task::Vector image_decode_tasks;
382 RasterTaskVector raster_tasks; 381 RasterTaskVector raster_tasks;
383 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 382 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
384 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 383 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
385 384
386 // Avoid unnecessary heap allocations by reusing the same graph. 385 // Avoid unnecessary heap allocations by reusing the same graph.
387 TaskGraph graph; 386 TaskGraph graph;
388 387
389 timer_.Reset(); 388 timer_.Reset();
390 do { 389 do {
391 graph.Reset(); 390 graph.Reset();
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 void SetUp() override { 479 void SetUp() override {
481 output_surface_ = FakeOutputSurface::Create3d(context_provider_); 480 output_surface_ = FakeOutputSurface::Create3d(context_provider_);
482 CHECK(output_surface_->BindToClient(&output_surface_client_)); 481 CHECK(output_surface_->BindToClient(&output_surface_client_));
483 resource_provider_ = 482 resource_provider_ =
484 FakeResourceProvider::Create(output_surface_.get(), nullptr); 483 FakeResourceProvider::Create(output_surface_.get(), nullptr);
485 } 484 }
486 485
487 void RunBuildTileTaskGraphTest(const std::string& test_name, 486 void RunBuildTileTaskGraphTest(const std::string& test_name,
488 unsigned num_raster_tasks, 487 unsigned num_raster_tasks,
489 unsigned num_image_decode_tasks) { 488 unsigned num_image_decode_tasks) {
490 ImageDecodeTask::Vector image_decode_tasks; 489 Task::Vector image_decode_tasks;
491 RasterTaskVector raster_tasks; 490 RasterTaskVector raster_tasks;
492 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 491 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
493 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 492 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
494 493
495 // Avoid unnecessary heap allocations by reusing the same graph. 494 // Avoid unnecessary heap allocations by reusing the same graph.
496 TaskGraph graph; 495 TaskGraph graph;
497 496
498 timer_.Reset(); 497 timer_.Reset();
499 do { 498 do {
500 graph.Reset(); 499 graph.Reset();
(...skipping 10 matching lines...) Expand all
511 RunBuildTileTaskGraphTest("1_0", 1, 0); 510 RunBuildTileTaskGraphTest("1_0", 1, 0);
512 RunBuildTileTaskGraphTest("32_0", 32, 0); 511 RunBuildTileTaskGraphTest("32_0", 32, 0);
513 RunBuildTileTaskGraphTest("1_1", 1, 1); 512 RunBuildTileTaskGraphTest("1_1", 1, 1);
514 RunBuildTileTaskGraphTest("32_1", 32, 1); 513 RunBuildTileTaskGraphTest("32_1", 32, 1);
515 RunBuildTileTaskGraphTest("1_4", 1, 4); 514 RunBuildTileTaskGraphTest("1_4", 1, 4);
516 RunBuildTileTaskGraphTest("32_4", 32, 4); 515 RunBuildTileTaskGraphTest("32_4", 32, 4);
517 } 516 }
518 517
519 } // namespace 518 } // namespace
520 } // namespace cc 519 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698