| 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 |