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 |