| OLD | NEW |
| 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" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 #include "third_party/khronos/GLES2/gl2.h" | 28 #include "third_party/khronos/GLES2/gl2.h" |
| 29 | 29 |
| 30 namespace cc { | 30 namespace cc { |
| 31 namespace { | 31 namespace { |
| 32 | 32 |
| 33 class PerfGLES2Interface : public gpu::gles2::GLES2InterfaceStub { | 33 class PerfGLES2Interface : public gpu::gles2::GLES2InterfaceStub { |
| 34 // Overridden from gpu::gles2::GLES2Interface: | 34 // Overridden from gpu::gles2::GLES2Interface: |
| 35 virtual GLuint CreateImageCHROMIUM(GLsizei width, | 35 virtual GLuint CreateImageCHROMIUM(GLsizei width, |
| 36 GLsizei height, | 36 GLsizei height, |
| 37 GLenum internalformat, | 37 GLenum internalformat, |
| 38 GLenum usage) OVERRIDE { | 38 GLenum usage) override { |
| 39 return 1u; | 39 return 1u; |
| 40 } | 40 } |
| 41 virtual void GenBuffers(GLsizei n, GLuint* buffers) OVERRIDE { | 41 virtual void GenBuffers(GLsizei n, GLuint* buffers) override { |
| 42 for (GLsizei i = 0; i < n; ++i) | 42 for (GLsizei i = 0; i < n; ++i) |
| 43 buffers[i] = 1u; | 43 buffers[i] = 1u; |
| 44 } | 44 } |
| 45 virtual void GenTextures(GLsizei n, GLuint* textures) OVERRIDE { | 45 virtual void GenTextures(GLsizei n, GLuint* textures) override { |
| 46 for (GLsizei i = 0; i < n; ++i) | 46 for (GLsizei i = 0; i < n; ++i) |
| 47 textures[i] = 1u; | 47 textures[i] = 1u; |
| 48 } | 48 } |
| 49 virtual void GetIntegerv(GLenum pname, GLint* params) OVERRIDE { | 49 virtual void GetIntegerv(GLenum pname, GLint* params) override { |
| 50 if (pname == GL_MAX_TEXTURE_SIZE) | 50 if (pname == GL_MAX_TEXTURE_SIZE) |
| 51 *params = INT_MAX; | 51 *params = INT_MAX; |
| 52 } | 52 } |
| 53 virtual void GenQueriesEXT(GLsizei n, GLuint* queries) OVERRIDE { | 53 virtual void GenQueriesEXT(GLsizei n, GLuint* queries) override { |
| 54 for (GLsizei i = 0; i < n; ++i) | 54 for (GLsizei i = 0; i < n; ++i) |
| 55 queries[i] = 1u; | 55 queries[i] = 1u; |
| 56 } | 56 } |
| 57 virtual void GetQueryObjectuivEXT(GLuint query, | 57 virtual void GetQueryObjectuivEXT(GLuint query, |
| 58 GLenum pname, | 58 GLenum pname, |
| 59 GLuint* params) OVERRIDE { | 59 GLuint* params) override { |
| 60 if (pname == GL_QUERY_RESULT_AVAILABLE_EXT) | 60 if (pname == GL_QUERY_RESULT_AVAILABLE_EXT) |
| 61 *params = 1; | 61 *params = 1; |
| 62 } | 62 } |
| 63 }; | 63 }; |
| 64 | 64 |
| 65 class PerfContextProvider : public ContextProvider { | 65 class PerfContextProvider : public ContextProvider { |
| 66 public: | 66 public: |
| 67 PerfContextProvider() : context_gl_(new PerfGLES2Interface) {} | 67 PerfContextProvider() : context_gl_(new PerfGLES2Interface) {} |
| 68 | 68 |
| 69 virtual bool BindToCurrentThread() OVERRIDE { return true; } | 69 virtual bool BindToCurrentThread() override { return true; } |
| 70 virtual Capabilities ContextCapabilities() OVERRIDE { | 70 virtual Capabilities ContextCapabilities() override { |
| 71 Capabilities capabilities; | 71 Capabilities capabilities; |
| 72 capabilities.gpu.image = true; | 72 capabilities.gpu.image = true; |
| 73 capabilities.gpu.sync_query = true; | 73 capabilities.gpu.sync_query = true; |
| 74 return capabilities; | 74 return capabilities; |
| 75 } | 75 } |
| 76 virtual gpu::gles2::GLES2Interface* ContextGL() OVERRIDE { | 76 virtual gpu::gles2::GLES2Interface* ContextGL() override { |
| 77 return context_gl_.get(); | 77 return context_gl_.get(); |
| 78 } | 78 } |
| 79 virtual gpu::ContextSupport* ContextSupport() OVERRIDE { return &support_; } | 79 virtual gpu::ContextSupport* ContextSupport() override { return &support_; } |
| 80 virtual class GrContext* GrContext() OVERRIDE { return NULL; } | 80 virtual class GrContext* GrContext() override { return NULL; } |
| 81 virtual bool IsContextLost() OVERRIDE { return false; } | 81 virtual bool IsContextLost() override { return false; } |
| 82 virtual void VerifyContexts() OVERRIDE {} | 82 virtual void VerifyContexts() override {} |
| 83 virtual void DeleteCachedResources() OVERRIDE {} | 83 virtual void DeleteCachedResources() override {} |
| 84 virtual bool DestroyedOnMainThread() OVERRIDE { return false; } | 84 virtual bool DestroyedOnMainThread() override { return false; } |
| 85 virtual void SetLostContextCallback(const LostContextCallback& cb) OVERRIDE {} | 85 virtual void SetLostContextCallback(const LostContextCallback& cb) override {} |
| 86 virtual void SetMemoryPolicyChangedCallback( | 86 virtual void SetMemoryPolicyChangedCallback( |
| 87 const MemoryPolicyChangedCallback& cb) OVERRIDE {} | 87 const MemoryPolicyChangedCallback& cb) override {} |
| 88 | 88 |
| 89 private: | 89 private: |
| 90 virtual ~PerfContextProvider() {} | 90 virtual ~PerfContextProvider() {} |
| 91 | 91 |
| 92 scoped_ptr<PerfGLES2Interface> context_gl_; | 92 scoped_ptr<PerfGLES2Interface> context_gl_; |
| 93 TestContextSupport support_; | 93 TestContextSupport support_; |
| 94 }; | 94 }; |
| 95 | 95 |
| 96 enum RasterWorkerPoolType { | 96 enum RasterWorkerPoolType { |
| 97 RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, | 97 RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, |
| 98 RASTER_WORKER_POOL_TYPE_ZERO_COPY, | 98 RASTER_WORKER_POOL_TYPE_ZERO_COPY, |
| 99 RASTER_WORKER_POOL_TYPE_ONE_COPY, | 99 RASTER_WORKER_POOL_TYPE_ONE_COPY, |
| 100 RASTER_WORKER_POOL_TYPE_GPU, | 100 RASTER_WORKER_POOL_TYPE_GPU, |
| 101 RASTER_WORKER_POOL_TYPE_BITMAP | 101 RASTER_WORKER_POOL_TYPE_BITMAP |
| 102 }; | 102 }; |
| 103 | 103 |
| 104 static const int kTimeLimitMillis = 2000; | 104 static const int kTimeLimitMillis = 2000; |
| 105 static const int kWarmupRuns = 5; | 105 static const int kWarmupRuns = 5; |
| 106 static const int kTimeCheckInterval = 10; | 106 static const int kTimeCheckInterval = 10; |
| 107 | 107 |
| 108 class PerfImageDecodeTaskImpl : public ImageDecodeTask { | 108 class PerfImageDecodeTaskImpl : public ImageDecodeTask { |
| 109 public: | 109 public: |
| 110 PerfImageDecodeTaskImpl() {} | 110 PerfImageDecodeTaskImpl() {} |
| 111 | 111 |
| 112 // Overridden from Task: | 112 // Overridden from Task: |
| 113 virtual void RunOnWorkerThread() OVERRIDE {} | 113 virtual void RunOnWorkerThread() override {} |
| 114 | 114 |
| 115 // Overridden from RasterizerTask: | 115 // Overridden from RasterizerTask: |
| 116 virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) OVERRIDE {} | 116 virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) override {} |
| 117 virtual void CompleteOnOriginThread(RasterizerTaskClient* client) OVERRIDE {} | 117 virtual void CompleteOnOriginThread(RasterizerTaskClient* client) override {} |
| 118 virtual void RunReplyOnOriginThread() OVERRIDE { Reset(); } | 118 virtual void RunReplyOnOriginThread() override { Reset(); } |
| 119 | 119 |
| 120 void Reset() { | 120 void Reset() { |
| 121 did_run_ = false; | 121 did_run_ = false; |
| 122 did_complete_ = false; | 122 did_complete_ = false; |
| 123 } | 123 } |
| 124 | 124 |
| 125 protected: | 125 protected: |
| 126 virtual ~PerfImageDecodeTaskImpl() {} | 126 virtual ~PerfImageDecodeTaskImpl() {} |
| 127 | 127 |
| 128 private: | 128 private: |
| 129 DISALLOW_COPY_AND_ASSIGN(PerfImageDecodeTaskImpl); | 129 DISALLOW_COPY_AND_ASSIGN(PerfImageDecodeTaskImpl); |
| 130 }; | 130 }; |
| 131 | 131 |
| 132 class PerfRasterTaskImpl : public RasterTask { | 132 class PerfRasterTaskImpl : public RasterTask { |
| 133 public: | 133 public: |
| 134 PerfRasterTaskImpl(scoped_ptr<ScopedResource> resource, | 134 PerfRasterTaskImpl(scoped_ptr<ScopedResource> resource, |
| 135 ImageDecodeTask::Vector* dependencies) | 135 ImageDecodeTask::Vector* dependencies) |
| 136 : RasterTask(resource.get(), dependencies), resource_(resource.Pass()) {} | 136 : RasterTask(resource.get(), dependencies), resource_(resource.Pass()) {} |
| 137 | 137 |
| 138 // Overridden from Task: | 138 // Overridden from Task: |
| 139 virtual void RunOnWorkerThread() OVERRIDE {} | 139 virtual void RunOnWorkerThread() override {} |
| 140 | 140 |
| 141 // Overridden from RasterizerTask: | 141 // Overridden from RasterizerTask: |
| 142 virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) OVERRIDE { | 142 virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) override { |
| 143 raster_buffer_ = client->AcquireBufferForRaster(resource()); | 143 raster_buffer_ = client->AcquireBufferForRaster(resource()); |
| 144 } | 144 } |
| 145 virtual void CompleteOnOriginThread(RasterizerTaskClient* client) OVERRIDE { | 145 virtual void CompleteOnOriginThread(RasterizerTaskClient* client) override { |
| 146 client->ReleaseBufferForRaster(raster_buffer_.Pass()); | 146 client->ReleaseBufferForRaster(raster_buffer_.Pass()); |
| 147 } | 147 } |
| 148 virtual void RunReplyOnOriginThread() OVERRIDE { Reset(); } | 148 virtual void RunReplyOnOriginThread() override { Reset(); } |
| 149 | 149 |
| 150 void Reset() { | 150 void Reset() { |
| 151 did_run_ = false; | 151 did_run_ = false; |
| 152 did_complete_ = false; | 152 did_complete_ = false; |
| 153 } | 153 } |
| 154 | 154 |
| 155 protected: | 155 protected: |
| 156 virtual ~PerfRasterTaskImpl() {} | 156 virtual ~PerfRasterTaskImpl() {} |
| 157 | 157 |
| 158 private: | 158 private: |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 scoped_ptr<TaskGraphRunner> task_graph_runner_; | 220 scoped_ptr<TaskGraphRunner> task_graph_runner_; |
| 221 LapTimer timer_; | 221 LapTimer timer_; |
| 222 }; | 222 }; |
| 223 | 223 |
| 224 class RasterWorkerPoolPerfTest | 224 class RasterWorkerPoolPerfTest |
| 225 : public RasterWorkerPoolPerfTestBase, | 225 : public RasterWorkerPoolPerfTestBase, |
| 226 public testing::TestWithParam<RasterWorkerPoolType>, | 226 public testing::TestWithParam<RasterWorkerPoolType>, |
| 227 public RasterizerClient { | 227 public RasterizerClient { |
| 228 public: | 228 public: |
| 229 // Overridden from testing::Test: | 229 // Overridden from testing::Test: |
| 230 virtual void SetUp() OVERRIDE { | 230 virtual void SetUp() override { |
| 231 switch (GetParam()) { | 231 switch (GetParam()) { |
| 232 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER: | 232 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER: |
| 233 Create3dOutputSurfaceAndResourceProvider(); | 233 Create3dOutputSurfaceAndResourceProvider(); |
| 234 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( | 234 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( |
| 235 task_runner_.get(), | 235 task_runner_.get(), |
| 236 task_graph_runner_.get(), | 236 task_graph_runner_.get(), |
| 237 context_provider_.get(), | 237 context_provider_.get(), |
| 238 resource_provider_.get(), | 238 resource_provider_.get(), |
| 239 std::numeric_limits<size_t>::max()); | 239 std::numeric_limits<size_t>::max()); |
| 240 break; | 240 break; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 268 raster_worker_pool_ = | 268 raster_worker_pool_ = |
| 269 BitmapRasterWorkerPool::Create(task_runner_.get(), | 269 BitmapRasterWorkerPool::Create(task_runner_.get(), |
| 270 task_graph_runner_.get(), | 270 task_graph_runner_.get(), |
| 271 resource_provider_.get()); | 271 resource_provider_.get()); |
| 272 break; | 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 virtual void TearDown() OVERRIDE { | 278 virtual void TearDown() override { |
| 279 raster_worker_pool_->AsRasterizer()->Shutdown(); | 279 raster_worker_pool_->AsRasterizer()->Shutdown(); |
| 280 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks(); | 280 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks(); |
| 281 } | 281 } |
| 282 | 282 |
| 283 // Overriden from RasterizerClient: | 283 // Overriden from RasterizerClient: |
| 284 virtual void DidFinishRunningTasks(TaskSet task_set) OVERRIDE { | 284 virtual void DidFinishRunningTasks(TaskSet task_set) override { |
| 285 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks(); | 285 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks(); |
| 286 } | 286 } |
| 287 virtual TaskSetCollection TasksThatShouldBeForcedToComplete() const OVERRIDE { | 287 virtual TaskSetCollection TasksThatShouldBeForcedToComplete() const override { |
| 288 return TaskSetCollection(); | 288 return TaskSetCollection(); |
| 289 } | 289 } |
| 290 | 290 |
| 291 void RunMessageLoopUntilAllTasksHaveCompleted() { | 291 void RunMessageLoopUntilAllTasksHaveCompleted() { |
| 292 task_graph_runner_->RunUntilIdle(); | 292 task_graph_runner_->RunUntilIdle(); |
| 293 task_runner_->RunUntilIdle(); | 293 task_runner_->RunUntilIdle(); |
| 294 } | 294 } |
| 295 | 295 |
| 296 void RunScheduleTasksTest(const std::string& test_name, | 296 void RunScheduleTasksTest(const std::string& test_name, |
| 297 unsigned num_raster_tasks, | 297 unsigned num_raster_tasks, |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 471 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, | 471 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, |
| 472 RASTER_WORKER_POOL_TYPE_ZERO_COPY, | 472 RASTER_WORKER_POOL_TYPE_ZERO_COPY, |
| 473 RASTER_WORKER_POOL_TYPE_ONE_COPY, | 473 RASTER_WORKER_POOL_TYPE_ONE_COPY, |
| 474 RASTER_WORKER_POOL_TYPE_GPU, | 474 RASTER_WORKER_POOL_TYPE_GPU, |
| 475 RASTER_WORKER_POOL_TYPE_BITMAP)); | 475 RASTER_WORKER_POOL_TYPE_BITMAP)); |
| 476 | 476 |
| 477 class RasterWorkerPoolCommonPerfTest : public RasterWorkerPoolPerfTestBase, | 477 class RasterWorkerPoolCommonPerfTest : public RasterWorkerPoolPerfTestBase, |
| 478 public testing::Test { | 478 public testing::Test { |
| 479 public: | 479 public: |
| 480 // Overridden from testing::Test: | 480 // Overridden from testing::Test: |
| 481 virtual void SetUp() OVERRIDE { | 481 virtual void SetUp() override { |
| 482 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass(); | 482 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass(); |
| 483 CHECK(output_surface_->BindToClient(&output_surface_client_)); | 483 CHECK(output_surface_->BindToClient(&output_surface_client_)); |
| 484 resource_provider_ = | 484 resource_provider_ = |
| 485 ResourceProvider::Create( | 485 ResourceProvider::Create( |
| 486 output_surface_.get(), NULL, NULL, 0, false, 1, false).Pass(); | 486 output_surface_.get(), NULL, NULL, 0, false, 1, false).Pass(); |
| 487 } | 487 } |
| 488 | 488 |
| 489 void RunBuildRasterTaskQueueTest(const std::string& test_name, | 489 void RunBuildRasterTaskQueueTest(const std::string& test_name, |
| 490 unsigned num_raster_tasks, | 490 unsigned num_raster_tasks, |
| 491 unsigned num_image_decode_tasks) { | 491 unsigned num_image_decode_tasks) { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 517 RunBuildRasterTaskQueueTest("1_0", 1, 0); | 517 RunBuildRasterTaskQueueTest("1_0", 1, 0); |
| 518 RunBuildRasterTaskQueueTest("32_0", 32, 0); | 518 RunBuildRasterTaskQueueTest("32_0", 32, 0); |
| 519 RunBuildRasterTaskQueueTest("1_1", 1, 1); | 519 RunBuildRasterTaskQueueTest("1_1", 1, 1); |
| 520 RunBuildRasterTaskQueueTest("32_1", 32, 1); | 520 RunBuildRasterTaskQueueTest("32_1", 32, 1); |
| 521 RunBuildRasterTaskQueueTest("1_4", 1, 4); | 521 RunBuildRasterTaskQueueTest("1_4", 1, 4); |
| 522 RunBuildRasterTaskQueueTest("32_4", 32, 4); | 522 RunBuildRasterTaskQueueTest("32_4", 32, 4); |
| 523 } | 523 } |
| 524 | 524 |
| 525 } // namespace | 525 } // namespace |
| 526 } // namespace cc | 526 } // namespace cc |
| OLD | NEW |