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

Side by Side Diff: cc/resources/raster_worker_pool_perftest.cc

Issue 602493003: cc: Add BitmapRasterWorkerPool. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@reduce-transfer-buffer-limit-use
Patch Set: fix unit test Created 6 years, 3 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 | « cc/resources/bitmap_raster_worker_pool.cc ('k') | cc/resources/raster_worker_pool_unittest.cc » ('j') | no next file with comments »
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 "cc/resources/raster_worker_pool.h" 5 #include "cc/resources/raster_worker_pool.h"
6 6
7 #include "base/test/test_simple_task_runner.h" 7 #include "base/test/test_simple_task_runner.h"
8 #include "base/time/time.h" 8 #include "base/time/time.h"
9 #include "cc/debug/lap_timer.h" 9 #include "cc/debug/lap_timer.h"
10 #include "cc/output/context_provider.h" 10 #include "cc/output/context_provider.h"
11 #include "cc/resources/bitmap_raster_worker_pool.h"
11 #include "cc/resources/gpu_raster_worker_pool.h" 12 #include "cc/resources/gpu_raster_worker_pool.h"
12 #include "cc/resources/one_copy_raster_worker_pool.h" 13 #include "cc/resources/one_copy_raster_worker_pool.h"
13 #include "cc/resources/pixel_buffer_raster_worker_pool.h" 14 #include "cc/resources/pixel_buffer_raster_worker_pool.h"
14 #include "cc/resources/raster_buffer.h" 15 #include "cc/resources/raster_buffer.h"
15 #include "cc/resources/rasterizer.h" 16 #include "cc/resources/rasterizer.h"
16 #include "cc/resources/resource_pool.h" 17 #include "cc/resources/resource_pool.h"
17 #include "cc/resources/resource_provider.h" 18 #include "cc/resources/resource_provider.h"
18 #include "cc/resources/scoped_resource.h" 19 #include "cc/resources/scoped_resource.h"
19 #include "cc/resources/zero_copy_raster_worker_pool.h" 20 #include "cc/resources/zero_copy_raster_worker_pool.h"
20 #include "cc/test/fake_output_surface.h" 21 #include "cc/test/fake_output_surface.h"
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 virtual ~PerfContextProvider() {} 90 virtual ~PerfContextProvider() {}
90 91
91 scoped_ptr<PerfGLES2Interface> context_gl_; 92 scoped_ptr<PerfGLES2Interface> context_gl_;
92 TestContextSupport support_; 93 TestContextSupport support_;
93 }; 94 };
94 95
95 enum RasterWorkerPoolType { 96 enum RasterWorkerPoolType {
96 RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, 97 RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER,
97 RASTER_WORKER_POOL_TYPE_ZERO_COPY, 98 RASTER_WORKER_POOL_TYPE_ZERO_COPY,
98 RASTER_WORKER_POOL_TYPE_ONE_COPY, 99 RASTER_WORKER_POOL_TYPE_ONE_COPY,
99 RASTER_WORKER_POOL_TYPE_GPU 100 RASTER_WORKER_POOL_TYPE_GPU,
101 RASTER_WORKER_POOL_TYPE_BITMAP
100 }; 102 };
101 103
102 static const int kTimeLimitMillis = 2000; 104 static const int kTimeLimitMillis = 2000;
103 static const int kWarmupRuns = 5; 105 static const int kWarmupRuns = 5;
104 static const int kTimeCheckInterval = 10; 106 static const int kTimeCheckInterval = 10;
105 107
106 class PerfImageDecodeTaskImpl : public ImageDecodeTask { 108 class PerfImageDecodeTaskImpl : public ImageDecodeTask {
107 public: 109 public:
108 PerfImageDecodeTaskImpl() {} 110 PerfImageDecodeTaskImpl() {}
109 111
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 typedef std::vector<scoped_refptr<RasterTask> > RasterTaskVector; 167 typedef std::vector<scoped_refptr<RasterTask> > RasterTaskVector;
166 168
167 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION = 0, ALL = 1 }; 169 enum NamedTaskSet { REQUIRED_FOR_ACTIVATION = 0, ALL = 1 };
168 170
169 RasterWorkerPoolPerfTestBase() 171 RasterWorkerPoolPerfTestBase()
170 : context_provider_(make_scoped_refptr(new PerfContextProvider)), 172 : context_provider_(make_scoped_refptr(new PerfContextProvider)),
171 task_runner_(new base::TestSimpleTaskRunner), 173 task_runner_(new base::TestSimpleTaskRunner),
172 task_graph_runner_(new TaskGraphRunner), 174 task_graph_runner_(new TaskGraphRunner),
173 timer_(kWarmupRuns, 175 timer_(kWarmupRuns,
174 base::TimeDelta::FromMilliseconds(kTimeLimitMillis), 176 base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
175 kTimeCheckInterval) { 177 kTimeCheckInterval) {}
176 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass();
177 CHECK(output_surface_->BindToClient(&output_surface_client_));
178
179 shared_bitmap_manager_.reset(new TestSharedBitmapManager());
180 resource_provider_ = ResourceProvider::Create(output_surface_.get(),
181 shared_bitmap_manager_.get(),
182 NULL,
183 0,
184 false,
185 1,
186 false).Pass();
187 staging_resource_pool_ = ResourcePool::Create(
188 resource_provider_.get(), GL_TEXTURE_2D, RGBA_8888);
189 }
190 178
191 void CreateImageDecodeTasks(unsigned num_image_decode_tasks, 179 void CreateImageDecodeTasks(unsigned num_image_decode_tasks,
192 ImageDecodeTask::Vector* image_decode_tasks) { 180 ImageDecodeTask::Vector* image_decode_tasks) {
193 for (unsigned i = 0; i < num_image_decode_tasks; ++i) 181 for (unsigned i = 0; i < num_image_decode_tasks; ++i)
194 image_decode_tasks->push_back(new PerfImageDecodeTaskImpl); 182 image_decode_tasks->push_back(new PerfImageDecodeTaskImpl);
195 } 183 }
196 184
197 void CreateRasterTasks(unsigned num_raster_tasks, 185 void CreateRasterTasks(unsigned num_raster_tasks,
198 const ImageDecodeTask::Vector& image_decode_tasks, 186 const ImageDecodeTask::Vector& image_decode_tasks,
199 RasterTaskVector* raster_tasks) { 187 RasterTaskVector* raster_tasks) {
(...skipping 20 matching lines...) Expand all
220 task_set_collection[REQUIRED_FOR_ACTIVATION] = required_for_activation; 208 task_set_collection[REQUIRED_FOR_ACTIVATION] = required_for_activation;
221 queue->items.push_back( 209 queue->items.push_back(
222 RasterTaskQueue::Item(raster_tasks[i].get(), task_set_collection)); 210 RasterTaskQueue::Item(raster_tasks[i].get(), task_set_collection));
223 } 211 }
224 } 212 }
225 213
226 protected: 214 protected:
227 scoped_refptr<ContextProvider> context_provider_; 215 scoped_refptr<ContextProvider> context_provider_;
228 FakeOutputSurfaceClient output_surface_client_; 216 FakeOutputSurfaceClient output_surface_client_;
229 scoped_ptr<FakeOutputSurface> output_surface_; 217 scoped_ptr<FakeOutputSurface> output_surface_;
230 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_;
231 scoped_ptr<ResourceProvider> resource_provider_; 218 scoped_ptr<ResourceProvider> resource_provider_;
232 scoped_ptr<ResourcePool> staging_resource_pool_;
233 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; 219 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
234 scoped_ptr<TaskGraphRunner> task_graph_runner_; 220 scoped_ptr<TaskGraphRunner> task_graph_runner_;
235 LapTimer timer_; 221 LapTimer timer_;
236 }; 222 };
237 223
238 class RasterWorkerPoolPerfTest 224 class RasterWorkerPoolPerfTest
239 : public RasterWorkerPoolPerfTestBase, 225 : public RasterWorkerPoolPerfTestBase,
240 public testing::TestWithParam<RasterWorkerPoolType>, 226 public testing::TestWithParam<RasterWorkerPoolType>,
241 public RasterizerClient { 227 public RasterizerClient {
242 public: 228 public:
243 RasterWorkerPoolPerfTest() { 229 // Overridden from testing::Test:
230 virtual void SetUp() OVERRIDE {
244 switch (GetParam()) { 231 switch (GetParam()) {
245 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER: 232 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER:
233 Create3dOutputSurfaceAndResourceProvider();
246 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( 234 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create(
247 task_runner_.get(), 235 task_runner_.get(),
248 task_graph_runner_.get(), 236 task_graph_runner_.get(),
249 context_provider_.get(), 237 context_provider_.get(),
250 resource_provider_.get(), 238 resource_provider_.get(),
251 std::numeric_limits<size_t>::max()); 239 std::numeric_limits<size_t>::max());
252 break; 240 break;
253 case RASTER_WORKER_POOL_TYPE_ZERO_COPY: 241 case RASTER_WORKER_POOL_TYPE_ZERO_COPY:
242 Create3dOutputSurfaceAndResourceProvider();
254 raster_worker_pool_ = 243 raster_worker_pool_ =
255 ZeroCopyRasterWorkerPool::Create(task_runner_.get(), 244 ZeroCopyRasterWorkerPool::Create(task_runner_.get(),
256 task_graph_runner_.get(), 245 task_graph_runner_.get(),
257 resource_provider_.get()); 246 resource_provider_.get());
258 break; 247 break;
259 case RASTER_WORKER_POOL_TYPE_ONE_COPY: 248 case RASTER_WORKER_POOL_TYPE_ONE_COPY:
249 Create3dOutputSurfaceAndResourceProvider();
250 staging_resource_pool_ = ResourcePool::Create(
251 resource_provider_.get(), GL_TEXTURE_2D, RGBA_8888);
260 raster_worker_pool_ = 252 raster_worker_pool_ =
261 OneCopyRasterWorkerPool::Create(task_runner_.get(), 253 OneCopyRasterWorkerPool::Create(task_runner_.get(),
262 task_graph_runner_.get(), 254 task_graph_runner_.get(),
263 context_provider_.get(), 255 context_provider_.get(),
264 resource_provider_.get(), 256 resource_provider_.get(),
265 staging_resource_pool_.get()); 257 staging_resource_pool_.get());
266 break; 258 break;
267 case RASTER_WORKER_POOL_TYPE_GPU: 259 case RASTER_WORKER_POOL_TYPE_GPU:
260 Create3dOutputSurfaceAndResourceProvider();
268 raster_worker_pool_ = 261 raster_worker_pool_ =
269 GpuRasterWorkerPool::Create(task_runner_.get(), 262 GpuRasterWorkerPool::Create(task_runner_.get(),
270 context_provider_.get(), 263 context_provider_.get(),
271 resource_provider_.get()); 264 resource_provider_.get());
272 break; 265 break;
266 case RASTER_WORKER_POOL_TYPE_BITMAP:
267 CreateSoftwareOutputSurfaceAndResourceProvider();
268 raster_worker_pool_ =
269 BitmapRasterWorkerPool::Create(task_runner_.get(),
270 task_graph_runner_.get(),
271 resource_provider_.get());
272 break;
273 } 273 }
274 274
275 DCHECK(raster_worker_pool_); 275 DCHECK(raster_worker_pool_);
276 raster_worker_pool_->AsRasterizer()->SetClient(this); 276 raster_worker_pool_->AsRasterizer()->SetClient(this);
277 } 277 }
278
279 // Overridden from testing::Test:
280 virtual void TearDown() OVERRIDE { 278 virtual void TearDown() OVERRIDE {
281 raster_worker_pool_->AsRasterizer()->Shutdown(); 279 raster_worker_pool_->AsRasterizer()->Shutdown();
282 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks(); 280 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks();
283 } 281 }
284 282
285 // Overriden from RasterizerClient: 283 // Overriden from RasterizerClient:
286 virtual void DidFinishRunningTasks(TaskSet task_set) OVERRIDE { 284 virtual void DidFinishRunningTasks(TaskSet task_set) OVERRIDE {
287 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks(); 285 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks();
288 } 286 }
289 virtual TaskSetCollection TasksThatShouldBeForcedToComplete() const OVERRIDE { 287 virtual TaskSetCollection TasksThatShouldBeForcedToComplete() const OVERRIDE {
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 389
392 perf_test::PrintResult("schedule_and_execute_tasks", 390 perf_test::PrintResult("schedule_and_execute_tasks",
393 TestModifierString(), 391 TestModifierString(),
394 test_name, 392 test_name,
395 timer_.LapsPerSecond(), 393 timer_.LapsPerSecond(),
396 "runs/s", 394 "runs/s",
397 true); 395 true);
398 } 396 }
399 397
400 private: 398 private:
399 void Create3dOutputSurfaceAndResourceProvider() {
400 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass();
401 CHECK(output_surface_->BindToClient(&output_surface_client_));
402 resource_provider_ =
403 ResourceProvider::Create(
404 output_surface_.get(), NULL, NULL, 0, false, 1, false).Pass();
405 }
406
407 void CreateSoftwareOutputSurfaceAndResourceProvider() {
408 output_surface_ = FakeOutputSurface::CreateSoftware(
409 make_scoped_ptr(new SoftwareOutputDevice));
410 CHECK(output_surface_->BindToClient(&output_surface_client_));
411 resource_provider_ = ResourceProvider::Create(output_surface_.get(),
412 &shared_bitmap_manager_,
413 NULL,
414 0,
415 false,
416 1,
417 false).Pass();
418 }
419
401 std::string TestModifierString() const { 420 std::string TestModifierString() const {
402 switch (GetParam()) { 421 switch (GetParam()) {
403 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER: 422 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER:
404 return std::string("_pixel_raster_worker_pool"); 423 return std::string("_pixel_raster_worker_pool");
405 case RASTER_WORKER_POOL_TYPE_ZERO_COPY: 424 case RASTER_WORKER_POOL_TYPE_ZERO_COPY:
406 return std::string("_zero_copy_raster_worker_pool"); 425 return std::string("_zero_copy_raster_worker_pool");
407 case RASTER_WORKER_POOL_TYPE_ONE_COPY: 426 case RASTER_WORKER_POOL_TYPE_ONE_COPY:
408 return std::string("_one_copy_raster_worker_pool"); 427 return std::string("_one_copy_raster_worker_pool");
409 case RASTER_WORKER_POOL_TYPE_GPU: 428 case RASTER_WORKER_POOL_TYPE_GPU:
410 return std::string("_gpu_raster_worker_pool"); 429 return std::string("_gpu_raster_worker_pool");
430 case RASTER_WORKER_POOL_TYPE_BITMAP:
431 return std::string("_bitmap_raster_worker_pool");
411 } 432 }
412 NOTREACHED(); 433 NOTREACHED();
413 return std::string(); 434 return std::string();
414 } 435 }
415 436
437 scoped_ptr<ResourcePool> staging_resource_pool_;
416 scoped_ptr<RasterWorkerPool> raster_worker_pool_; 438 scoped_ptr<RasterWorkerPool> raster_worker_pool_;
439 TestSharedBitmapManager shared_bitmap_manager_;
417 }; 440 };
418 441
419 TEST_P(RasterWorkerPoolPerfTest, ScheduleTasks) { 442 TEST_P(RasterWorkerPoolPerfTest, ScheduleTasks) {
420 RunScheduleTasksTest("1_0", 1, 0); 443 RunScheduleTasksTest("1_0", 1, 0);
421 RunScheduleTasksTest("32_0", 32, 0); 444 RunScheduleTasksTest("32_0", 32, 0);
422 RunScheduleTasksTest("1_1", 1, 1); 445 RunScheduleTasksTest("1_1", 1, 1);
423 RunScheduleTasksTest("32_1", 32, 1); 446 RunScheduleTasksTest("32_1", 32, 1);
424 RunScheduleTasksTest("1_4", 1, 4); 447 RunScheduleTasksTest("1_4", 1, 4);
425 RunScheduleTasksTest("32_4", 32, 4); 448 RunScheduleTasksTest("32_4", 32, 4);
426 } 449 }
(...skipping 14 matching lines...) Expand all
441 RunScheduleAndExecuteTasksTest("32_1", 32, 1); 464 RunScheduleAndExecuteTasksTest("32_1", 32, 1);
442 RunScheduleAndExecuteTasksTest("1_4", 1, 4); 465 RunScheduleAndExecuteTasksTest("1_4", 1, 4);
443 RunScheduleAndExecuteTasksTest("32_4", 32, 4); 466 RunScheduleAndExecuteTasksTest("32_4", 32, 4);
444 } 467 }
445 468
446 INSTANTIATE_TEST_CASE_P(RasterWorkerPoolPerfTests, 469 INSTANTIATE_TEST_CASE_P(RasterWorkerPoolPerfTests,
447 RasterWorkerPoolPerfTest, 470 RasterWorkerPoolPerfTest,
448 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, 471 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER,
449 RASTER_WORKER_POOL_TYPE_ZERO_COPY, 472 RASTER_WORKER_POOL_TYPE_ZERO_COPY,
450 RASTER_WORKER_POOL_TYPE_ONE_COPY, 473 RASTER_WORKER_POOL_TYPE_ONE_COPY,
451 RASTER_WORKER_POOL_TYPE_GPU)); 474 RASTER_WORKER_POOL_TYPE_GPU,
475 RASTER_WORKER_POOL_TYPE_BITMAP));
452 476
453 class RasterWorkerPoolCommonPerfTest : public RasterWorkerPoolPerfTestBase, 477 class RasterWorkerPoolCommonPerfTest : public RasterWorkerPoolPerfTestBase,
454 public testing::Test { 478 public testing::Test {
455 public: 479 public:
480 // Overridden from testing::Test:
481 virtual void SetUp() OVERRIDE {
482 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass();
483 CHECK(output_surface_->BindToClient(&output_surface_client_));
484 resource_provider_ =
485 ResourceProvider::Create(
486 output_surface_.get(), NULL, NULL, 0, false, 1, false).Pass();
487 }
488
456 void RunBuildRasterTaskQueueTest(const std::string& test_name, 489 void RunBuildRasterTaskQueueTest(const std::string& test_name,
457 unsigned num_raster_tasks, 490 unsigned num_raster_tasks,
458 unsigned num_image_decode_tasks) { 491 unsigned num_image_decode_tasks) {
459 ImageDecodeTask::Vector image_decode_tasks; 492 ImageDecodeTask::Vector image_decode_tasks;
460 RasterTaskVector raster_tasks; 493 RasterTaskVector raster_tasks;
461 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 494 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
462 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 495 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
463 496
464 // Avoid unnecessary heap allocations by reusing the same queue. 497 // Avoid unnecessary heap allocations by reusing the same queue.
465 RasterTaskQueue queue; 498 RasterTaskQueue queue;
(...skipping 18 matching lines...) Expand all
484 RunBuildRasterTaskQueueTest("1_0", 1, 0); 517 RunBuildRasterTaskQueueTest("1_0", 1, 0);
485 RunBuildRasterTaskQueueTest("32_0", 32, 0); 518 RunBuildRasterTaskQueueTest("32_0", 32, 0);
486 RunBuildRasterTaskQueueTest("1_1", 1, 1); 519 RunBuildRasterTaskQueueTest("1_1", 1, 1);
487 RunBuildRasterTaskQueueTest("32_1", 32, 1); 520 RunBuildRasterTaskQueueTest("32_1", 32, 1);
488 RunBuildRasterTaskQueueTest("1_4", 1, 4); 521 RunBuildRasterTaskQueueTest("1_4", 1, 4);
489 RunBuildRasterTaskQueueTest("32_4", 32, 4); 522 RunBuildRasterTaskQueueTest("32_4", 32, 4);
490 } 523 }
491 524
492 } // namespace 525 } // namespace
493 } // namespace cc 526 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/bitmap_raster_worker_pool.cc ('k') | cc/resources/raster_worker_pool_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698