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

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: wip 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 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
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() {}
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 { Reset(); }
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(scoped_ptr<ScopedResource> resource, 148 PerfRasterTaskImpl(scoped_ptr<ScopedResource> resource,
149 scoped_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)) {}
155 154
156 // Overridden from Task: 155 // Overridden from Task:
157 void RunOnWorkerThread() override {} 156 void RunOnWorkerThread() override {}
158 157
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() { 158 void Reset() {
170 did_run_ = false; 159 did_run_ = false;
171 did_complete_ = false; 160 did_complete_ = false;
172 } 161 }
173 162
174 protected: 163 protected:
175 ~PerfRasterTaskImpl() override {} 164 ~PerfRasterTaskImpl() override { Reset(); }
176 165
177 private: 166 private:
178 scoped_ptr<ScopedResource> resource_; 167 scoped_ptr<ScopedResource> resource_;
179 scoped_ptr<RasterBuffer> raster_buffer_; 168 scoped_ptr<RasterBuffer> raster_buffer_;
180 169
181 DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl); 170 DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl);
182 }; 171 };
183 172
184 class TileTaskWorkerPoolPerfTestBase { 173 class TileTaskWorkerPoolPerfTestBase : public TileTaskClient {
185 public: 174 public:
186 typedef std::vector<scoped_refptr<RasterTask>> RasterTaskVector; 175 typedef std::vector<scoped_refptr<RasterTask>> RasterTaskVector;
187 176
188 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW, ALL }; 177 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW, ALL };
189 178
190 TileTaskWorkerPoolPerfTestBase() 179 TileTaskWorkerPoolPerfTestBase()
191 : context_provider_(make_scoped_refptr(new PerfContextProvider)), 180 : context_provider_(make_scoped_refptr(new PerfContextProvider)),
192 task_runner_(new base::TestSimpleTaskRunner), 181 task_runner_(new base::TestSimpleTaskRunner),
193 task_graph_runner_(new SynchronousTaskGraphRunner), 182 task_graph_runner_(new SynchronousTaskGraphRunner),
194 timer_(kWarmupRuns, 183 timer_(kWarmupRuns,
195 base::TimeDelta::FromMilliseconds(kTimeLimitMillis), 184 base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
196 kTimeCheckInterval) {} 185 kTimeCheckInterval) {}
197 186
187 // Overridden from TileTaskClient:
188 scoped_ptr<RasterBuffer> AcquireBufferForRaster(
189 const Resource* resource,
190 uint64_t resource_content_id,
191 uint64_t previous_content_id) override {
192 return nullptr;
193 }
194 void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override {}
195
198 void CreateImageDecodeTasks(unsigned num_image_decode_tasks, 196 void CreateImageDecodeTasks(unsigned num_image_decode_tasks,
199 ImageDecodeTask::Vector* image_decode_tasks) { 197 ImageDecodeTask::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 ImageDecodeTask::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
215 ImageDecodeTask::Vector dependencies = image_decode_tasks; 212 ImageDecodeTask::Vector dependencies = image_decode_tasks;
216 raster_tasks->push_back( 213 scoped_ptr<RasterBuffer> raster_buffer =
217 new PerfRasterTaskImpl(std::move(resource), &dependencies)); 214 AcquireBufferForRaster(resource.get(), 0, 0);
215 raster_tasks->push_back(new PerfRasterTaskImpl(
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;
224 223
225 for (auto& raster_task : raster_tasks) { 224 for (auto& raster_task : raster_tasks) {
226 priority++; 225 priority++;
227 226
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 tile_task_worker_pool_ = BitmapTileTaskWorkerPool::Create( 280 tile_task_worker_pool_ = BitmapTileTaskWorkerPool::Create(
282 task_runner_.get(), task_graph_runner_.get(), 281 task_runner_.get(), task_graph_runner_.get(),
283 resource_provider_.get()); 282 resource_provider_.get());
284 break; 283 break;
285 } 284 }
286 285
287 DCHECK(tile_task_worker_pool_); 286 DCHECK(tile_task_worker_pool_);
288 } 287 }
289 void TearDown() override { 288 void TearDown() override {
290 tile_task_worker_pool_->AsTileTaskRunner()->Shutdown(); 289 tile_task_worker_pool_->AsTileTaskRunner()->Shutdown();
291 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); 290 Task::Vector completed_tasks;
291 tile_task_worker_pool_->AsTileTaskRunner()->CollectCompletedTasks(
292 &completed_tasks);
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 ImageDecodeTask::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(num_raster_tasks, image_decode_tasks, &raster_tasks);
306 307
307 // Avoid unnecessary heap allocations by reusing the same graph. 308 // Avoid unnecessary heap allocations by reusing the same graph.
308 TaskGraph graph; 309 TaskGraph graph;
309 310
310 timer_.Reset(); 311 timer_.Reset();
311 do { 312 do {
312 graph.Reset(); 313 graph.Reset();
313 BuildTileTaskGraph(&graph, raster_tasks); 314 BuildTileTaskGraph(&graph, raster_tasks);
314 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph); 315 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph);
315 tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); 316 Task::Vector completed_tasks;
317 tile_task_worker_pool_->AsTileTaskRunner()->CollectCompletedTasks(
318 &completed_tasks);
316 timer_.NextLap(); 319 timer_.NextLap();
317 } while (!timer_.HasTimeLimitExpired()); 320 } while (!timer_.HasTimeLimitExpired());
318 321
319 TaskGraph empty; 322 TaskGraph empty;
320 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty); 323 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty);
321 RunMessageLoopUntilAllTasksHaveCompleted(); 324 RunMessageLoopUntilAllTasksHaveCompleted();
322 325
323 perf_test::PrintResult("schedule_tasks", TestModifierString(), test_name, 326 perf_test::PrintResult("schedule_tasks", TestModifierString(), test_name,
324 timer_.LapsPerSecond(), "runs/s", true); 327 timer_.LapsPerSecond(), "runs/s", true);
325 } 328 }
(...skipping 12 matching lines...) Expand all
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 Task::Vector completed_tasks;
352 tile_task_worker_pool_->AsTileTaskRunner()->CollectCompletedTasks(
353 &completed_tasks);
349 ++count; 354 ++count;
350 timer_.NextLap(); 355 timer_.NextLap();
351 } while (!timer_.HasTimeLimitExpired()); 356 } while (!timer_.HasTimeLimitExpired());
352 357
353 TaskGraph empty; 358 TaskGraph empty;
354 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty); 359 tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&empty);
355 RunMessageLoopUntilAllTasksHaveCompleted(); 360 RunMessageLoopUntilAllTasksHaveCompleted();
356 361
357 perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(), 362 perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(),
358 test_name, timer_.LapsPerSecond(), "runs/s", true); 363 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); 499 RunBuildTileTaskGraphTest("1_0", 1, 0);
495 RunBuildTileTaskGraphTest("32_0", 32, 0); 500 RunBuildTileTaskGraphTest("32_0", 32, 0);
496 RunBuildTileTaskGraphTest("1_1", 1, 1); 501 RunBuildTileTaskGraphTest("1_1", 1, 1);
497 RunBuildTileTaskGraphTest("32_1", 32, 1); 502 RunBuildTileTaskGraphTest("32_1", 32, 1);
498 RunBuildTileTaskGraphTest("1_4", 1, 4); 503 RunBuildTileTaskGraphTest("1_4", 1, 4);
499 RunBuildTileTaskGraphTest("32_4", 32, 4); 504 RunBuildTileTaskGraphTest("32_4", 32, 4);
500 } 505 }
501 506
502 } // namespace 507 } // namespace
503 } // namespace cc 508 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698