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 15 matching lines...) Expand all Loading... |
26 #include "cc/test/test_web_graphics_context_3d.h" | 26 #include "cc/test/test_web_graphics_context_3d.h" |
27 #include "testing/gtest/include/gtest/gtest.h" | 27 #include "testing/gtest/include/gtest/gtest.h" |
28 #include "testing/perf/perf_test.h" | 28 #include "testing/perf/perf_test.h" |
29 #include "third_party/khronos/GLES2/gl2.h" | 29 #include "third_party/khronos/GLES2/gl2.h" |
30 | 30 |
31 namespace cc { | 31 namespace cc { |
32 namespace { | 32 namespace { |
33 | 33 |
34 class PerfGLES2Interface : public gpu::gles2::GLES2InterfaceStub { | 34 class PerfGLES2Interface : public gpu::gles2::GLES2InterfaceStub { |
35 // Overridden from gpu::gles2::GLES2Interface: | 35 // Overridden from gpu::gles2::GLES2Interface: |
36 virtual GLuint CreateImageCHROMIUM(ClientBuffer buffer, | 36 GLuint CreateImageCHROMIUM(ClientBuffer buffer, |
37 GLsizei width, | 37 GLsizei width, |
38 GLsizei height, | 38 GLsizei height, |
39 GLenum internalformat) override { | 39 GLenum internalformat) override { |
40 return 1u; | 40 return 1u; |
41 } | 41 } |
42 virtual void GenBuffers(GLsizei n, GLuint* buffers) override { | 42 void GenBuffers(GLsizei n, GLuint* buffers) override { |
43 for (GLsizei i = 0; i < n; ++i) | 43 for (GLsizei i = 0; i < n; ++i) |
44 buffers[i] = 1u; | 44 buffers[i] = 1u; |
45 } | 45 } |
46 virtual void GenTextures(GLsizei n, GLuint* textures) override { | 46 void GenTextures(GLsizei n, GLuint* textures) override { |
47 for (GLsizei i = 0; i < n; ++i) | 47 for (GLsizei i = 0; i < n; ++i) |
48 textures[i] = 1u; | 48 textures[i] = 1u; |
49 } | 49 } |
50 virtual void GetIntegerv(GLenum pname, GLint* params) override { | 50 void GetIntegerv(GLenum pname, GLint* params) override { |
51 if (pname == GL_MAX_TEXTURE_SIZE) | 51 if (pname == GL_MAX_TEXTURE_SIZE) |
52 *params = INT_MAX; | 52 *params = INT_MAX; |
53 } | 53 } |
54 virtual void GenQueriesEXT(GLsizei n, GLuint* queries) override { | 54 void GenQueriesEXT(GLsizei n, GLuint* queries) override { |
55 for (GLsizei i = 0; i < n; ++i) | 55 for (GLsizei i = 0; i < n; ++i) |
56 queries[i] = 1u; | 56 queries[i] = 1u; |
57 } | 57 } |
58 virtual void GetQueryObjectuivEXT(GLuint query, | 58 void GetQueryObjectuivEXT(GLuint query, |
59 GLenum pname, | 59 GLenum pname, |
60 GLuint* params) override { | 60 GLuint* params) override { |
61 if (pname == GL_QUERY_RESULT_AVAILABLE_EXT) | 61 if (pname == GL_QUERY_RESULT_AVAILABLE_EXT) |
62 *params = 1; | 62 *params = 1; |
63 } | 63 } |
64 }; | 64 }; |
65 | 65 |
66 class PerfContextProvider : public ContextProvider { | 66 class PerfContextProvider : public ContextProvider { |
67 public: | 67 public: |
68 PerfContextProvider() : context_gl_(new PerfGLES2Interface) {} | 68 PerfContextProvider() : context_gl_(new PerfGLES2Interface) {} |
69 | 69 |
70 virtual bool BindToCurrentThread() override { return true; } | 70 bool BindToCurrentThread() override { return true; } |
71 virtual Capabilities ContextCapabilities() override { | 71 Capabilities ContextCapabilities() override { |
72 Capabilities capabilities; | 72 Capabilities capabilities; |
73 capabilities.gpu.image = true; | 73 capabilities.gpu.image = true; |
74 capabilities.gpu.sync_query = true; | 74 capabilities.gpu.sync_query = true; |
75 return capabilities; | 75 return capabilities; |
76 } | 76 } |
77 virtual gpu::gles2::GLES2Interface* ContextGL() override { | 77 gpu::gles2::GLES2Interface* ContextGL() override { return context_gl_.get(); } |
78 return context_gl_.get(); | 78 gpu::ContextSupport* ContextSupport() override { return &support_; } |
| 79 class GrContext* GrContext() override { |
| 80 return NULL; |
79 } | 81 } |
80 virtual gpu::ContextSupport* ContextSupport() override { return &support_; } | 82 bool IsContextLost() override { return false; } |
81 virtual class GrContext* GrContext() override { return NULL; } | 83 void VerifyContexts() override {} |
82 virtual bool IsContextLost() override { return false; } | 84 void DeleteCachedResources() override {} |
83 virtual void VerifyContexts() override {} | 85 bool DestroyedOnMainThread() override { return false; } |
84 virtual void DeleteCachedResources() override {} | 86 void SetLostContextCallback(const LostContextCallback& cb) override {} |
85 virtual bool DestroyedOnMainThread() override { return false; } | 87 void SetMemoryPolicyChangedCallback( |
86 virtual void SetLostContextCallback(const LostContextCallback& cb) override {} | |
87 virtual void SetMemoryPolicyChangedCallback( | |
88 const MemoryPolicyChangedCallback& cb) override {} | 88 const MemoryPolicyChangedCallback& cb) override {} |
89 | 89 |
90 private: | 90 private: |
91 virtual ~PerfContextProvider() {} | 91 ~PerfContextProvider() override {} |
92 | 92 |
93 scoped_ptr<PerfGLES2Interface> context_gl_; | 93 scoped_ptr<PerfGLES2Interface> context_gl_; |
94 TestContextSupport support_; | 94 TestContextSupport support_; |
95 }; | 95 }; |
96 | 96 |
97 enum RasterWorkerPoolType { | 97 enum RasterWorkerPoolType { |
98 RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, | 98 RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, |
99 RASTER_WORKER_POOL_TYPE_ZERO_COPY, | 99 RASTER_WORKER_POOL_TYPE_ZERO_COPY, |
100 RASTER_WORKER_POOL_TYPE_ONE_COPY, | 100 RASTER_WORKER_POOL_TYPE_ONE_COPY, |
101 RASTER_WORKER_POOL_TYPE_GPU, | 101 RASTER_WORKER_POOL_TYPE_GPU, |
102 RASTER_WORKER_POOL_TYPE_BITMAP | 102 RASTER_WORKER_POOL_TYPE_BITMAP |
103 }; | 103 }; |
104 | 104 |
105 static const int kTimeLimitMillis = 2000; | 105 static const int kTimeLimitMillis = 2000; |
106 static const int kWarmupRuns = 5; | 106 static const int kWarmupRuns = 5; |
107 static const int kTimeCheckInterval = 10; | 107 static const int kTimeCheckInterval = 10; |
108 | 108 |
109 class PerfImageDecodeTaskImpl : public ImageDecodeTask { | 109 class PerfImageDecodeTaskImpl : public ImageDecodeTask { |
110 public: | 110 public: |
111 PerfImageDecodeTaskImpl() {} | 111 PerfImageDecodeTaskImpl() {} |
112 | 112 |
113 // Overridden from Task: | 113 // Overridden from Task: |
114 virtual void RunOnWorkerThread() override {} | 114 void RunOnWorkerThread() override {} |
115 | 115 |
116 // Overridden from RasterizerTask: | 116 // Overridden from RasterizerTask: |
117 virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) override {} | 117 void ScheduleOnOriginThread(RasterizerTaskClient* client) override {} |
118 virtual void CompleteOnOriginThread(RasterizerTaskClient* client) override {} | 118 void CompleteOnOriginThread(RasterizerTaskClient* client) override {} |
119 virtual void RunReplyOnOriginThread() override { Reset(); } | 119 void RunReplyOnOriginThread() override { Reset(); } |
120 | 120 |
121 void Reset() { | 121 void Reset() { |
122 did_run_ = false; | 122 did_run_ = false; |
123 did_complete_ = false; | 123 did_complete_ = false; |
124 } | 124 } |
125 | 125 |
126 protected: | 126 protected: |
127 virtual ~PerfImageDecodeTaskImpl() {} | 127 ~PerfImageDecodeTaskImpl() override {} |
128 | 128 |
129 private: | 129 private: |
130 DISALLOW_COPY_AND_ASSIGN(PerfImageDecodeTaskImpl); | 130 DISALLOW_COPY_AND_ASSIGN(PerfImageDecodeTaskImpl); |
131 }; | 131 }; |
132 | 132 |
133 class PerfRasterTaskImpl : public RasterTask { | 133 class PerfRasterTaskImpl : public RasterTask { |
134 public: | 134 public: |
135 PerfRasterTaskImpl(scoped_ptr<ScopedResource> resource, | 135 PerfRasterTaskImpl(scoped_ptr<ScopedResource> resource, |
136 ImageDecodeTask::Vector* dependencies) | 136 ImageDecodeTask::Vector* dependencies) |
137 : RasterTask(resource.get(), dependencies), resource_(resource.Pass()) {} | 137 : RasterTask(resource.get(), dependencies), resource_(resource.Pass()) {} |
138 | 138 |
139 // Overridden from Task: | 139 // Overridden from Task: |
140 virtual void RunOnWorkerThread() override {} | 140 void RunOnWorkerThread() override {} |
141 | 141 |
142 // Overridden from RasterizerTask: | 142 // Overridden from RasterizerTask: |
143 virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) override { | 143 void ScheduleOnOriginThread(RasterizerTaskClient* client) override { |
144 raster_buffer_ = client->AcquireBufferForRaster(resource()); | 144 raster_buffer_ = client->AcquireBufferForRaster(resource()); |
145 } | 145 } |
146 virtual void CompleteOnOriginThread(RasterizerTaskClient* client) override { | 146 void CompleteOnOriginThread(RasterizerTaskClient* client) override { |
147 client->ReleaseBufferForRaster(raster_buffer_.Pass()); | 147 client->ReleaseBufferForRaster(raster_buffer_.Pass()); |
148 } | 148 } |
149 virtual void RunReplyOnOriginThread() override { Reset(); } | 149 void RunReplyOnOriginThread() override { Reset(); } |
150 | 150 |
151 void Reset() { | 151 void Reset() { |
152 did_run_ = false; | 152 did_run_ = false; |
153 did_complete_ = false; | 153 did_complete_ = false; |
154 } | 154 } |
155 | 155 |
156 protected: | 156 protected: |
157 virtual ~PerfRasterTaskImpl() {} | 157 ~PerfRasterTaskImpl() override {} |
158 | 158 |
159 private: | 159 private: |
160 scoped_ptr<ScopedResource> resource_; | 160 scoped_ptr<ScopedResource> resource_; |
161 scoped_ptr<RasterBuffer> raster_buffer_; | 161 scoped_ptr<RasterBuffer> raster_buffer_; |
162 | 162 |
163 DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl); | 163 DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl); |
164 }; | 164 }; |
165 | 165 |
166 class RasterWorkerPoolPerfTestBase { | 166 class RasterWorkerPoolPerfTestBase { |
167 public: | 167 public: |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 | 275 |
276 DCHECK(raster_worker_pool_); | 276 DCHECK(raster_worker_pool_); |
277 raster_worker_pool_->AsRasterizer()->SetClient(this); | 277 raster_worker_pool_->AsRasterizer()->SetClient(this); |
278 } | 278 } |
279 virtual void TearDown() override { | 279 virtual void TearDown() override { |
280 raster_worker_pool_->AsRasterizer()->Shutdown(); | 280 raster_worker_pool_->AsRasterizer()->Shutdown(); |
281 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks(); | 281 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks(); |
282 } | 282 } |
283 | 283 |
284 // Overriden from RasterizerClient: | 284 // Overriden from RasterizerClient: |
285 virtual void DidFinishRunningTasks(TaskSet task_set) override { | 285 void DidFinishRunningTasks(TaskSet task_set) override { |
286 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks(); | 286 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks(); |
287 } | 287 } |
288 virtual TaskSetCollection TasksThatShouldBeForcedToComplete() const override { | 288 TaskSetCollection TasksThatShouldBeForcedToComplete() const override { |
289 return TaskSetCollection(); | 289 return TaskSetCollection(); |
290 } | 290 } |
291 | 291 |
292 void RunMessageLoopUntilAllTasksHaveCompleted() { | 292 void RunMessageLoopUntilAllTasksHaveCompleted() { |
293 task_graph_runner_->RunUntilIdle(); | 293 task_graph_runner_->RunUntilIdle(); |
294 task_runner_->RunUntilIdle(); | 294 task_runner_->RunUntilIdle(); |
295 } | 295 } |
296 | 296 |
297 void RunScheduleTasksTest(const std::string& test_name, | 297 void RunScheduleTasksTest(const std::string& test_name, |
298 unsigned num_raster_tasks, | 298 unsigned num_raster_tasks, |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 RunBuildRasterTaskQueueTest("1_0", 1, 0); | 525 RunBuildRasterTaskQueueTest("1_0", 1, 0); |
526 RunBuildRasterTaskQueueTest("32_0", 32, 0); | 526 RunBuildRasterTaskQueueTest("32_0", 32, 0); |
527 RunBuildRasterTaskQueueTest("1_1", 1, 1); | 527 RunBuildRasterTaskQueueTest("1_1", 1, 1); |
528 RunBuildRasterTaskQueueTest("32_1", 32, 1); | 528 RunBuildRasterTaskQueueTest("32_1", 32, 1); |
529 RunBuildRasterTaskQueueTest("1_4", 1, 4); | 529 RunBuildRasterTaskQueueTest("1_4", 1, 4); |
530 RunBuildRasterTaskQueueTest("32_4", 32, 4); | 530 RunBuildRasterTaskQueueTest("32_4", 32, 4); |
531 } | 531 } |
532 | 532 |
533 } // namespace | 533 } // namespace |
534 } // namespace cc | 534 } // namespace cc |
OLD | NEW |