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

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

Issue 1866043006: cc: Remove ScheduleOnOriginThread() and CompleteOnOriginThread(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixed bug 613529 Created 4 years, 7 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
« no previous file with comments | « no previous file | cc/raster/raster_buffer_provider_unittest.cc » ('j') | cc/raster/task.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 static const int kTimeCheckInterval = 10; 122 static const int kTimeCheckInterval = 10;
123 123
124 class PerfImageDecodeTaskImpl : public TileTask { 124 class PerfImageDecodeTaskImpl : public TileTask {
125 public: 125 public:
126 PerfImageDecodeTaskImpl() : TileTask(true) {} 126 PerfImageDecodeTaskImpl() : TileTask(true) {}
127 127
128 // Overridden from Task: 128 // Overridden from Task:
129 void RunOnWorkerThread() override {} 129 void RunOnWorkerThread() override {}
130 130
131 // Overridden from TileTask: 131 // Overridden from TileTask:
132 void ScheduleOnOriginThread(RasterBufferProvider* provider) override {} 132 void OnTaskCompleted() override { state().Reset(); }
133 void CompleteOnOriginThread(RasterBufferProvider* provider) override {
134 Reset();
135 }
136
137 void Reset() {
138 state().Reset();
139 did_complete_ = false;
140 }
141 133
142 protected: 134 protected:
143 ~PerfImageDecodeTaskImpl() override {} 135 ~PerfImageDecodeTaskImpl() override {}
144 136
145 private: 137 private:
146 DISALLOW_COPY_AND_ASSIGN(PerfImageDecodeTaskImpl); 138 DISALLOW_COPY_AND_ASSIGN(PerfImageDecodeTaskImpl);
147 }; 139 };
148 140
141 class PerfRasterBufferProviderHelper {
142 public:
143 virtual std::unique_ptr<RasterBuffer> AcquireBufferForRaster(
144 const Resource* resource,
145 uint64_t resource_content_id,
146 uint64_t previous_content_id) = 0;
147 virtual void ReleaseBufferForRaster(std::unique_ptr<RasterBuffer> buffer) = 0;
148 };
149
149 class PerfRasterTaskImpl : public TileTask { 150 class PerfRasterTaskImpl : public TileTask {
150 public: 151 public:
151 PerfRasterTaskImpl(std::unique_ptr<ScopedResource> resource, 152 PerfRasterTaskImpl(PerfRasterBufferProviderHelper* helper,
153 std::unique_ptr<ScopedResource> resource,
154 std::unique_ptr<RasterBuffer> raster_buffer,
152 TileTask::Vector* dependencies) 155 TileTask::Vector* dependencies)
153 : TileTask(true, dependencies), resource_(std::move(resource)) {} 156 : TileTask(true, dependencies),
157 helper_(helper),
158 resource_(std::move(resource)),
159 raster_buffer_(std::move(raster_buffer)) {}
154 160
155 // Overridden from Task: 161 // Overridden from Task:
156 void RunOnWorkerThread() override {} 162 void RunOnWorkerThread() override {}
157 163
158 // Overridden from TileTask: 164 // Overridden from TileTask:
159 void ScheduleOnOriginThread(RasterBufferProvider* provider) override { 165 void OnTaskCompleted() override {
160 // No tile ids are given to support partial updates. 166 if (helper_)
161 raster_buffer_ = provider->AcquireBufferForRaster(resource_.get(), 0, 0); 167 helper_->ReleaseBufferForRaster(std::move(raster_buffer_));
162 }
163 void CompleteOnOriginThread(RasterBufferProvider* provider) override {
164 provider->ReleaseBufferForRaster(std::move(raster_buffer_));
165 Reset();
166 }
167 168
168 void Reset() {
169 state().Reset(); 169 state().Reset();
170 did_complete_ = false;
171 } 170 }
172 171
173 protected: 172 protected:
174 ~PerfRasterTaskImpl() override {} 173 ~PerfRasterTaskImpl() override {}
175 174
176 private: 175 private:
176 PerfRasterBufferProviderHelper* helper_;
177 std::unique_ptr<ScopedResource> resource_; 177 std::unique_ptr<ScopedResource> resource_;
178 std::unique_ptr<RasterBuffer> raster_buffer_; 178 std::unique_ptr<RasterBuffer> raster_buffer_;
179 179
180 DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl); 180 DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl);
181 }; 181 };
182 182
183 class RasterBufferProviderPerfTestBase { 183 class RasterBufferProviderPerfTestBase {
184 public: 184 public:
185 typedef std::vector<scoped_refptr<TileTask>> RasterTaskVector; 185 typedef std::vector<scoped_refptr<TileTask>> RasterTaskVector;
186 186
187 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW, ALL }; 187 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION, REQUIRED_FOR_DRAW, ALL };
188 188
189 RasterBufferProviderPerfTestBase() 189 RasterBufferProviderPerfTestBase()
190 : context_provider_(make_scoped_refptr(new PerfContextProvider)), 190 : context_provider_(make_scoped_refptr(new PerfContextProvider)),
191 task_runner_(new base::TestSimpleTaskRunner), 191 task_runner_(new base::TestSimpleTaskRunner),
192 task_graph_runner_(new SynchronousTaskGraphRunner), 192 task_graph_runner_(new SynchronousTaskGraphRunner),
193 timer_(kWarmupRuns, 193 timer_(kWarmupRuns,
194 base::TimeDelta::FromMilliseconds(kTimeLimitMillis), 194 base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
195 kTimeCheckInterval) {} 195 kTimeCheckInterval) {}
196 196
197 void CreateImageDecodeTasks(unsigned num_image_decode_tasks, 197 void CreateImageDecodeTasks(unsigned num_image_decode_tasks,
198 TileTask::Vector* image_decode_tasks) { 198 TileTask::Vector* image_decode_tasks) {
199 for (unsigned i = 0; i < num_image_decode_tasks; ++i) 199 for (unsigned i = 0; i < num_image_decode_tasks; ++i)
200 image_decode_tasks->push_back(new PerfImageDecodeTaskImpl); 200 image_decode_tasks->push_back(new PerfImageDecodeTaskImpl);
201 } 201 }
202 202
203 void CreateRasterTasks(unsigned num_raster_tasks, 203 void CreateRasterTasks(PerfRasterBufferProviderHelper* helper,
204 unsigned num_raster_tasks,
204 const TileTask::Vector& image_decode_tasks, 205 const TileTask::Vector& image_decode_tasks,
205 RasterTaskVector* raster_tasks) { 206 RasterTaskVector* raster_tasks) {
206 const gfx::Size size(1, 1); 207 const gfx::Size size(1, 1);
207 208
208 for (unsigned i = 0; i < num_raster_tasks; ++i) { 209 for (unsigned i = 0; i < num_raster_tasks; ++i) {
209 std::unique_ptr<ScopedResource> resource( 210 std::unique_ptr<ScopedResource> resource(
210 ScopedResource::Create(resource_provider_.get())); 211 ScopedResource::Create(resource_provider_.get()));
211 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, 212 resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
212 RGBA_8888); 213 RGBA_8888);
213 214
215 // No tile ids are given to support partial updates.
216 std::unique_ptr<RasterBuffer> raster_buffer;
217 if (helper) {
218 raster_buffer = helper->AcquireBufferForRaster(resource.get(), 0, 0);
219 }
214 TileTask::Vector dependencies = image_decode_tasks; 220 TileTask::Vector dependencies = image_decode_tasks;
215 raster_tasks->push_back( 221 raster_tasks->push_back(
216 new PerfRasterTaskImpl(std::move(resource), &dependencies)); 222 new PerfRasterTaskImpl(helper, std::move(resource),
223 std::move(raster_buffer), &dependencies));
217 } 224 }
218 } 225 }
219 226
220 void BuildTileTaskGraph(TaskGraph* graph, 227 void BuildTileTaskGraph(TaskGraph* graph,
221 const RasterTaskVector& raster_tasks) { 228 const RasterTaskVector& raster_tasks) {
222 uint16_t priority = 0; 229 uint16_t priority = 0;
223 230
224 for (auto& raster_task : raster_tasks) { 231 for (auto& raster_task : raster_tasks) {
225 priority++; 232 priority++;
226 233
(...skipping 25 matching lines...) Expand all
252 FakeOutputSurfaceClient output_surface_client_; 259 FakeOutputSurfaceClient output_surface_client_;
253 std::unique_ptr<FakeOutputSurface> output_surface_; 260 std::unique_ptr<FakeOutputSurface> output_surface_;
254 std::unique_ptr<ResourceProvider> resource_provider_; 261 std::unique_ptr<ResourceProvider> resource_provider_;
255 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; 262 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
256 std::unique_ptr<SynchronousTaskGraphRunner> task_graph_runner_; 263 std::unique_ptr<SynchronousTaskGraphRunner> task_graph_runner_;
257 LapTimer timer_; 264 LapTimer timer_;
258 }; 265 };
259 266
260 class RasterBufferProviderPerfTest 267 class RasterBufferProviderPerfTest
261 : public RasterBufferProviderPerfTestBase, 268 : public RasterBufferProviderPerfTestBase,
269 public PerfRasterBufferProviderHelper,
262 public testing::TestWithParam<RasterBufferProviderType> { 270 public testing::TestWithParam<RasterBufferProviderType> {
263 public: 271 public:
264 // Overridden from testing::Test: 272 // Overridden from testing::Test:
265 void SetUp() override { 273 void SetUp() override {
266 std::unique_ptr<RasterBufferProvider> raster_buffer_provider; 274 std::unique_ptr<RasterBufferProvider> raster_buffer_provider;
267 switch (GetParam()) { 275 switch (GetParam()) {
268 case RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY: 276 case RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY:
269 Create3dOutputSurfaceAndResourceProvider(); 277 Create3dOutputSurfaceAndResourceProvider();
270 raster_buffer_provider = ZeroCopyRasterBufferProvider::Create( 278 raster_buffer_provider = ZeroCopyRasterBufferProvider::Create(
271 resource_provider_.get(), PlatformColor::BestTextureFormat()); 279 resource_provider_.get(), PlatformColor::BestTextureFormat());
(...skipping 21 matching lines...) Expand all
293 DCHECK(raster_buffer_provider); 301 DCHECK(raster_buffer_provider);
294 302
295 tile_task_manager_ = TileTaskManagerImpl::Create( 303 tile_task_manager_ = TileTaskManagerImpl::Create(
296 std::move(raster_buffer_provider), task_graph_runner_.get()); 304 std::move(raster_buffer_provider), task_graph_runner_.get());
297 } 305 }
298 void TearDown() override { 306 void TearDown() override {
299 tile_task_manager_->Shutdown(); 307 tile_task_manager_->Shutdown();
300 tile_task_manager_->CheckForCompletedTasks(); 308 tile_task_manager_->CheckForCompletedTasks();
301 } 309 }
302 310
311 // Overridden from PerfRasterBufferProviderHelper:
312 std::unique_ptr<RasterBuffer> AcquireBufferForRaster(
313 const Resource* resource,
314 uint64_t resource_content_id,
315 uint64_t previous_content_id) override {
316 return tile_task_manager_->GetRasterBufferProvider()
317 ->AcquireBufferForRaster(resource, resource_content_id,
318 previous_content_id);
319 }
320 void ReleaseBufferForRaster(std::unique_ptr<RasterBuffer> buffer) override {
321 tile_task_manager_->GetRasterBufferProvider()->ReleaseBufferForRaster(
322 std::move(buffer));
323 }
324
303 void RunMessageLoopUntilAllTasksHaveCompleted() { 325 void RunMessageLoopUntilAllTasksHaveCompleted() {
304 task_graph_runner_->RunUntilIdle(); 326 task_graph_runner_->RunUntilIdle();
305 task_runner_->RunUntilIdle(); 327 task_runner_->RunUntilIdle();
306 } 328 }
307 329
308 void RunScheduleTasksTest(const std::string& test_name, 330 void RunScheduleTasksTest(const std::string& test_name,
309 unsigned num_raster_tasks, 331 unsigned num_raster_tasks,
310 unsigned num_image_decode_tasks) { 332 unsigned num_image_decode_tasks) {
311 TileTask::Vector image_decode_tasks; 333 TileTask::Vector image_decode_tasks;
312 RasterTaskVector raster_tasks; 334 RasterTaskVector raster_tasks;
313 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 335 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
314 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 336 CreateRasterTasks(this, num_raster_tasks, image_decode_tasks,
337 &raster_tasks);
315 338
316 // Avoid unnecessary heap allocations by reusing the same graph. 339 // Avoid unnecessary heap allocations by reusing the same graph.
317 TaskGraph graph; 340 TaskGraph graph;
318 341
319 timer_.Reset(); 342 timer_.Reset();
320 do { 343 do {
321 graph.Reset(); 344 graph.Reset();
322 BuildTileTaskGraph(&graph, raster_tasks); 345 BuildTileTaskGraph(&graph, raster_tasks);
323 tile_task_manager_->ScheduleTasks(&graph); 346 tile_task_manager_->ScheduleTasks(&graph);
324 tile_task_manager_->CheckForCompletedTasks(); 347 tile_task_manager_->CheckForCompletedTasks();
325 timer_.NextLap(); 348 timer_.NextLap();
326 } while (!timer_.HasTimeLimitExpired()); 349 } while (!timer_.HasTimeLimitExpired());
327 350
328 TaskGraph empty; 351 TaskGraph empty;
329 tile_task_manager_->ScheduleTasks(&empty); 352 tile_task_manager_->ScheduleTasks(&empty);
330 RunMessageLoopUntilAllTasksHaveCompleted(); 353 RunMessageLoopUntilAllTasksHaveCompleted();
331 354
332 perf_test::PrintResult("schedule_tasks", TestModifierString(), test_name, 355 perf_test::PrintResult("schedule_tasks", TestModifierString(), test_name,
333 timer_.LapsPerSecond(), "runs/s", true); 356 timer_.LapsPerSecond(), "runs/s", true);
334 } 357 }
335 358
336 void RunScheduleAlternateTasksTest(const std::string& test_name, 359 void RunScheduleAlternateTasksTest(const std::string& test_name,
337 unsigned num_raster_tasks, 360 unsigned num_raster_tasks,
338 unsigned num_image_decode_tasks) { 361 unsigned num_image_decode_tasks) {
339 const size_t kNumVersions = 2; 362 const size_t kNumVersions = 2;
340 TileTask::Vector image_decode_tasks[kNumVersions]; 363 TileTask::Vector image_decode_tasks[kNumVersions];
341 RasterTaskVector raster_tasks[kNumVersions]; 364 RasterTaskVector raster_tasks[kNumVersions];
342 for (size_t i = 0; i < kNumVersions; ++i) { 365 for (size_t i = 0; i < kNumVersions; ++i) {
343 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks[i]); 366 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks[i]);
344 CreateRasterTasks(num_raster_tasks, image_decode_tasks[i], 367 CreateRasterTasks(this, num_raster_tasks, image_decode_tasks[i],
345 &raster_tasks[i]); 368 &raster_tasks[i]);
346 } 369 }
347 370
348 // Avoid unnecessary heap allocations by reusing the same graph. 371 // Avoid unnecessary heap allocations by reusing the same graph.
349 TaskGraph graph; 372 TaskGraph graph;
350 373
351 size_t count = 0; 374 size_t count = 0;
352 timer_.Reset(); 375 timer_.Reset();
353 do { 376 do {
354 graph.Reset(); 377 graph.Reset();
(...skipping 11 matching lines...) Expand all
366 perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(), 389 perf_test::PrintResult("schedule_alternate_tasks", TestModifierString(),
367 test_name, timer_.LapsPerSecond(), "runs/s", true); 390 test_name, timer_.LapsPerSecond(), "runs/s", true);
368 } 391 }
369 392
370 void RunScheduleAndExecuteTasksTest(const std::string& test_name, 393 void RunScheduleAndExecuteTasksTest(const std::string& test_name,
371 unsigned num_raster_tasks, 394 unsigned num_raster_tasks,
372 unsigned num_image_decode_tasks) { 395 unsigned num_image_decode_tasks) {
373 TileTask::Vector image_decode_tasks; 396 TileTask::Vector image_decode_tasks;
374 RasterTaskVector raster_tasks; 397 RasterTaskVector raster_tasks;
375 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 398 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
376 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 399 CreateRasterTasks(this, num_raster_tasks, image_decode_tasks,
400 &raster_tasks);
377 401
378 // Avoid unnecessary heap allocations by reusing the same graph. 402 // Avoid unnecessary heap allocations by reusing the same graph.
379 TaskGraph graph; 403 TaskGraph graph;
380 404
381 timer_.Reset(); 405 timer_.Reset();
382 do { 406 do {
383 graph.Reset(); 407 graph.Reset();
384 BuildTileTaskGraph(&graph, raster_tasks); 408 BuildTileTaskGraph(&graph, raster_tasks);
385 tile_task_manager_->ScheduleTasks(&graph); 409 tile_task_manager_->ScheduleTasks(&graph);
386 RunMessageLoopUntilAllTasksHaveCompleted(); 410 RunMessageLoopUntilAllTasksHaveCompleted();
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 resource_provider_ = 500 resource_provider_ =
477 FakeResourceProvider::Create(output_surface_.get(), nullptr); 501 FakeResourceProvider::Create(output_surface_.get(), nullptr);
478 } 502 }
479 503
480 void RunBuildTileTaskGraphTest(const std::string& test_name, 504 void RunBuildTileTaskGraphTest(const std::string& test_name,
481 unsigned num_raster_tasks, 505 unsigned num_raster_tasks,
482 unsigned num_image_decode_tasks) { 506 unsigned num_image_decode_tasks) {
483 TileTask::Vector image_decode_tasks; 507 TileTask::Vector image_decode_tasks;
484 RasterTaskVector raster_tasks; 508 RasterTaskVector raster_tasks;
485 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 509 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
486 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 510 CreateRasterTasks(nullptr, num_raster_tasks, image_decode_tasks,
511 &raster_tasks);
487 512
488 // Avoid unnecessary heap allocations by reusing the same graph. 513 // Avoid unnecessary heap allocations by reusing the same graph.
489 TaskGraph graph; 514 TaskGraph graph;
490 515
491 timer_.Reset(); 516 timer_.Reset();
492 do { 517 do {
493 graph.Reset(); 518 graph.Reset();
494 BuildTileTaskGraph(&graph, raster_tasks); 519 BuildTileTaskGraph(&graph, raster_tasks);
495 timer_.NextLap(); 520 timer_.NextLap();
496 } while (!timer_.HasTimeLimitExpired()); 521 } while (!timer_.HasTimeLimitExpired());
497 522
498 perf_test::PrintResult("build_raster_task_graph", "", test_name, 523 perf_test::PrintResult("build_raster_task_graph", "", test_name,
499 timer_.LapsPerSecond(), "runs/s", true); 524 timer_.LapsPerSecond(), "runs/s", true);
500 } 525 }
501 }; 526 };
502 527
503 TEST_F(RasterBufferProviderCommonPerfTest, BuildTileTaskGraph) { 528 TEST_F(RasterBufferProviderCommonPerfTest, BuildTileTaskGraph) {
504 RunBuildTileTaskGraphTest("1_0", 1, 0); 529 RunBuildTileTaskGraphTest("1_0", 1, 0);
505 RunBuildTileTaskGraphTest("32_0", 32, 0); 530 RunBuildTileTaskGraphTest("32_0", 32, 0);
506 RunBuildTileTaskGraphTest("1_1", 1, 1); 531 RunBuildTileTaskGraphTest("1_1", 1, 1);
507 RunBuildTileTaskGraphTest("32_1", 32, 1); 532 RunBuildTileTaskGraphTest("32_1", 32, 1);
508 RunBuildTileTaskGraphTest("1_4", 1, 4); 533 RunBuildTileTaskGraphTest("1_4", 1, 4);
509 RunBuildTileTaskGraphTest("32_4", 32, 4); 534 RunBuildTileTaskGraphTest("32_4", 32, 4);
510 } 535 }
511 536
512 } // namespace 537 } // namespace
513 } // namespace cc 538 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | cc/raster/raster_buffer_provider_unittest.cc » ('j') | cc/raster/task.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698