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

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

Issue 1866043006: cc: Remove ScheduleOnOriginThread() and CompleteOnOriginThread(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
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"
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 ImageDecodeTask {
128 public: 128 public:
129 PerfImageDecodeTaskImpl() {} 129 PerfImageDecodeTaskImpl() { SetTaskTypeId(kImageDecodeTaskTypeId); }
130 130
131 // Overridden from Task: 131 // Overridden from Task:
132 void RunOnWorkerThread() override {} 132 void RunOnWorkerThread() override {}
133 133
134 // Overridden from TileTask:
135 void ScheduleOnOriginThread(TileTaskClient* client) override {}
136 void CompleteOnOriginThread(TileTaskClient* client) override { Reset(); }
137
138 void Reset() { 134 void Reset() {
139 did_run_ = false; 135 did_run_ = false;
140 did_complete_ = false; 136 did_complete_ = false;
141 } 137 }
142 138
143 protected: 139 protected:
144 ~PerfImageDecodeTaskImpl() override {} 140 ~PerfImageDecodeTaskImpl() override {}
145 141
146 private: 142 private:
147 DISALLOW_COPY_AND_ASSIGN(PerfImageDecodeTaskImpl); 143 DISALLOW_COPY_AND_ASSIGN(PerfImageDecodeTaskImpl);
148 }; 144 };
149 145
150 class PerfRasterTaskImpl : public RasterTask { 146 class PerfRasterTaskImpl : public RasterTask {
151 public: 147 public:
152 PerfRasterTaskImpl(std::unique_ptr<ScopedResource> resource, 148 PerfRasterTaskImpl(std::unique_ptr<ScopedResource> resource,
149 std::unique_ptr<RasterBuffer> raster_buffer,
153 ImageDecodeTask::Vector* dependencies) 150 ImageDecodeTask::Vector* dependencies)
154 : RasterTask(dependencies), resource_(std::move(resource)) {} 151 : RasterTask(dependencies),
152 resource_(std::move(resource)),
153 raster_buffer_(std::move(raster_buffer)) {
154 SetTaskTypeId(kRasterTaskTypeId);
155 }
155 156
156 // Overridden from Task: 157 // Overridden from Task:
157 void RunOnWorkerThread() override {} 158 void RunOnWorkerThread() override {}
158 159
159 // Overridden from TileTask:
160 void ScheduleOnOriginThread(TileTaskClient* client) override {
161 // No tile ids are given to support partial updates.
162 raster_buffer_ = client->AcquireBufferForRaster(resource_.get(), 0, 0);
163 }
164 void CompleteOnOriginThread(TileTaskClient* client) override {
165 client->ReleaseBufferForRaster(std::move(raster_buffer_));
166 Reset();
167 }
168
169 void Reset() { 160 void Reset() {
170 did_run_ = false; 161 did_run_ = false;
171 did_complete_ = false; 162 did_complete_ = false;
172 } 163 }
173 164
174 protected: 165 protected:
175 ~PerfRasterTaskImpl() override {} 166 ~PerfRasterTaskImpl() override {}
176 167
177 private: 168 private:
178 std::unique_ptr<ScopedResource> resource_; 169 std::unique_ptr<ScopedResource> resource_;
179 std::unique_ptr<RasterBuffer> raster_buffer_; 170 std::unique_ptr<RasterBuffer> raster_buffer_;
180 171
181 DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl); 172 DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl);
182 }; 173 };
183 174
184 class TileTaskWorkerPoolPerfTestBase { 175 class TileTaskWorkerPoolPerfTestBase : public TileTaskClient {
185 public: 176 public:
186 typedef std::vector<scoped_refptr<RasterTask>> RasterTaskVector; 177 typedef std::vector<scoped_refptr<RasterTask>> RasterTaskVector;
187 178
188 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW, ALL }; 179 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW, ALL };
189 180
190 TileTaskWorkerPoolPerfTestBase() 181 TileTaskWorkerPoolPerfTestBase()
191 : context_provider_(make_scoped_refptr(new PerfContextProvider)), 182 : context_provider_(make_scoped_refptr(new PerfContextProvider)),
192 task_runner_(new base::TestSimpleTaskRunner), 183 task_runner_(new base::TestSimpleTaskRunner),
193 task_graph_runner_(new SynchronousTaskGraphRunner), 184 task_graph_runner_(new SynchronousTaskGraphRunner),
194 timer_(kWarmupRuns, 185 timer_(kWarmupRuns,
195 base::TimeDelta::FromMilliseconds(kTimeLimitMillis), 186 base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
196 kTimeCheckInterval) {} 187 kTimeCheckInterval) {}
197 188
189 // Overridden from TileTaskClient:
190 scoped_ptr<RasterBuffer> AcquireBufferForRaster(
191 const Resource* resource,
192 uint64_t resource_content_id,
193 uint64_t previous_content_id) override {
194 return nullptr;
195 }
196 void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override {}
197
198 void CreateImageDecodeTasks(unsigned num_image_decode_tasks, 198 void CreateImageDecodeTasks(unsigned num_image_decode_tasks,
199 ImageDecodeTask::Vector* image_decode_tasks) { 199 ImageDecodeTask::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(unsigned num_raster_tasks,
205 const ImageDecodeTask::Vector& image_decode_tasks, 205 const ImageDecodeTask::Vector& image_decode_tasks,
206 RasterTaskVector* raster_tasks) { 206 RasterTaskVector* raster_tasks) {
207 const gfx::Size size(1, 1); 207 const gfx::Size size(1, 1);
208 208
209 for (unsigned i = 0; i < num_raster_tasks; ++i) { 209 for (unsigned i = 0; i < num_raster_tasks; ++i) {
210 std::unique_ptr<ScopedResource> resource( 210 std::unique_ptr<ScopedResource> resource(
211 ScopedResource::Create(resource_provider_.get())); 211 ScopedResource::Create(resource_provider_.get()));
212 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, 212 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
213 RGBA_8888); 213 RGBA_8888);
214
215 ImageDecodeTask::Vector dependencies = image_decode_tasks; 214 ImageDecodeTask::Vector dependencies = image_decode_tasks;
216 raster_tasks->push_back( 215 scoped_ptr<RasterBuffer> raster_buffer =
217 new PerfRasterTaskImpl(std::move(resource), &dependencies)); 216 AcquireBufferForRaster(resource.get(), 0, 0);
217 raster_tasks->push_back(new PerfRasterTaskImpl(
218 std::move(resource), std::move(raster_buffer), &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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 case TILE_TASK_WORKER_POOL_TYPE_BITMAP: 280 case TILE_TASK_WORKER_POOL_TYPE_BITMAP:
280 CreateSoftwareOutputSurfaceAndResourceProvider(); 281 CreateSoftwareOutputSurfaceAndResourceProvider();
281 tile_task_worker_pool_ = BitmapTileTaskWorkerPool::Create( 282 tile_task_worker_pool_ = BitmapTileTaskWorkerPool::Create(
282 task_runner_.get(), task_graph_runner_.get(), 283 task_runner_.get(), task_graph_runner_.get(),
283 resource_provider_.get()); 284 resource_provider_.get());
284 break; 285 break;
285 } 286 }
286 287
287 DCHECK(tile_task_worker_pool_); 288 DCHECK(tile_task_worker_pool_);
288 } 289 }
290
291 void CheckAndProcessCompletedTasks() {
292 Task::Vector completed_tasks;
293 tile_task_worker_pool_->AsTileTaskRunner()->CollectCompletedTasks(
294 &completed_tasks);
295
296 for (auto task : completed_tasks) {
297 if (task->GetTaskTypeId() == kImageDecodeTaskTypeId) {
298 static_cast<PerfImageDecodeTaskImpl*>(task.get())->Reset();
299 } else if (task->GetTaskTypeId() == kRasterTaskTypeId) {
300 static_cast<PerfRasterTaskImpl*>(task.get())->Reset();
301 }
302
303 static_cast<TileTask*>(task.get())->DidComplete();
304 }
305 completed_tasks.clear();
306 }
307
289 void TearDown() override { 308 void TearDown() override {
290 tile_task_worker_pool_->AsTileTaskRunner()->Shutdown(); 309 tile_task_worker_pool_->AsTileTaskRunner()->Shutdown();
291 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); 310 CheckAndProcessCompletedTasks();
292 } 311 }
293 312
294 void RunMessageLoopUntilAllTasksHaveCompleted() { 313 void RunMessageLoopUntilAllTasksHaveCompleted() {
295 task_graph_runner_->RunUntilIdle(); 314 task_graph_runner_->RunUntilIdle();
296 task_runner_->RunUntilIdle(); 315 task_runner_->RunUntilIdle();
297 } 316 }
298 317
299 void RunScheduleTasksTest(const std::string& test_name, 318 void RunScheduleTasksTest(const std::string& test_name,
300 unsigned num_raster_tasks, 319 unsigned num_raster_tasks,
301 unsigned num_image_decode_tasks) { 320 unsigned num_image_decode_tasks) {
302 ImageDecodeTask::Vector image_decode_tasks; 321 ImageDecodeTask::Vector image_decode_tasks;
303 RasterTaskVector raster_tasks; 322 RasterTaskVector raster_tasks;
304 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 323 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
305 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 324 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
306 325
307 // Avoid unnecessary heap allocations by reusing the same graph. 326 // Avoid unnecessary heap allocations by reusing the same graph.
308 TaskGraph graph; 327 TaskGraph graph;
309 328
310 timer_.Reset(); 329 timer_.Reset();
311 do { 330 do {
312 graph.Reset(); 331 graph.Reset();
313 BuildTileTaskGraph(&graph, raster_tasks); 332 BuildTileTaskGraph(&graph, raster_tasks);
314 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph); 333 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph);
315 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); 334 CheckAndProcessCompletedTasks();
316 timer_.NextLap(); 335 timer_.NextLap();
317 } while (!timer_.HasTimeLimitExpired()); 336 } while (!timer_.HasTimeLimitExpired());
318 337
319 TaskGraph empty; 338 TaskGraph empty;
320 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty); 339 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty);
321 RunMessageLoopUntilAllTasksHaveCompleted(); 340 RunMessageLoopUntilAllTasksHaveCompleted();
322 341
323 perf_test::PrintResult("schedule_tasks", TestModifierString(), test_name, 342 perf_test::PrintResult("schedule_tasks", TestModifierString(), test_name,
324 timer_.LapsPerSecond(), "runs/s", true); 343 timer_.LapsPerSecond(), "runs/s", true);
325 } 344 }
(...skipping 12 matching lines...) Expand all
338 357
339 // Avoid unnecessary heap allocations by reusing the same graph. 358 // Avoid unnecessary heap allocations by reusing the same graph.
340 TaskGraph graph; 359 TaskGraph graph;
341 360
342 size_t count = 0; 361 size_t count = 0;
343 timer_.Reset(); 362 timer_.Reset();
344 do { 363 do {
345 graph.Reset(); 364 graph.Reset();
346 BuildTileTaskGraph(&graph, raster_tasks[count % kNumVersions]); 365 BuildTileTaskGraph(&graph, raster_tasks[count % kNumVersions]);
347 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph); 366 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph);
348 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); 367 CheckAndProcessCompletedTasks();
349 ++count; 368 ++count;
350 timer_.NextLap(); 369 timer_.NextLap();
351 } while (!timer_.HasTimeLimitExpired()); 370 } while (!timer_.HasTimeLimitExpired());
352 371
353 TaskGraph empty; 372 TaskGraph empty;
354 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty); 373 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty);
355 RunMessageLoopUntilAllTasksHaveCompleted(); 374 RunMessageLoopUntilAllTasksHaveCompleted();
356 375
357 perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(), 376 perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(),
358 test_name, timer_.LapsPerSecond(), "runs/s", true); 377 test_name, timer_.LapsPerSecond(), "runs/s", true);
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 RunBuildTileTaskGraphTest("1_0", 1, 0); 513 RunBuildTileTaskGraphTest("1_0", 1, 0);
495 RunBuildTileTaskGraphTest("32_0", 32, 0); 514 RunBuildTileTaskGraphTest("32_0", 32, 0);
496 RunBuildTileTaskGraphTest("1_1", 1, 1); 515 RunBuildTileTaskGraphTest("1_1", 1, 1);
497 RunBuildTileTaskGraphTest("32_1", 32, 1); 516 RunBuildTileTaskGraphTest("32_1", 32, 1);
498 RunBuildTileTaskGraphTest("1_4", 1, 4); 517 RunBuildTileTaskGraphTest("1_4", 1, 4);
499 RunBuildTileTaskGraphTest("32_4", 32, 4); 518 RunBuildTileTaskGraphTest("32_4", 32, 4);
500 } 519 }
501 520
502 } // namespace 521 } // namespace
503 } // namespace cc 522 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698