| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "gpu/command_buffer/service/query_manager.h" | 5 #include <stddef.h> |
| 6 #include <stdint.h> |
| 7 |
| 6 #include "gpu/command_buffer/common/gles2_cmd_format.h" | 8 #include "gpu/command_buffer/common/gles2_cmd_format.h" |
| 7 #include "gpu/command_buffer/service/cmd_buffer_engine.h" | 9 #include "gpu/command_buffer/service/cmd_buffer_engine.h" |
| 8 #include "gpu/command_buffer/service/error_state_mock.h" | 10 #include "gpu/command_buffer/service/error_state_mock.h" |
| 9 #include "gpu/command_buffer/service/feature_info.h" | 11 #include "gpu/command_buffer/service/feature_info.h" |
| 10 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 12 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
| 11 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" | 13 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" |
| 12 #include "gpu/command_buffer/service/gpu_service_test.h" | 14 #include "gpu/command_buffer/service/gpu_service_test.h" |
| 15 #include "gpu/command_buffer/service/query_manager.h" |
| 13 #include "gpu/command_buffer/service/test_helper.h" | 16 #include "gpu/command_buffer/service/test_helper.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 15 #include "ui/gl/gl_context.h" | 18 #include "ui/gl/gl_context.h" |
| 16 #include "ui/gl/gl_mock.h" | 19 #include "ui/gl/gl_mock.h" |
| 17 #include "ui/gl/gpu_timing.h" | 20 #include "ui/gl/gpu_timing.h" |
| 18 #include "ui/gl/gpu_timing_fake.h" | 21 #include "ui/gl/gpu_timing_fake.h" |
| 19 | 22 |
| 20 using ::testing::_; | 23 using ::testing::_; |
| 21 using ::testing::InSequence; | 24 using ::testing::InSequence; |
| 22 using ::testing::Return; | 25 using ::testing::Return; |
| 23 using ::testing::SetArgumentPointee; | 26 using ::testing::SetArgumentPointee; |
| 24 | 27 |
| 25 namespace gpu { | 28 namespace gpu { |
| 26 namespace gles2 { | 29 namespace gles2 { |
| 27 | 30 |
| 28 class QueryManagerTest : public GpuServiceTest { | 31 class QueryManagerTest : public GpuServiceTest { |
| 29 public: | 32 public: |
| 30 static const int32 kSharedMemoryId = 401; | 33 static const int32_t kSharedMemoryId = 401; |
| 31 static const uint32 kSharedMemoryOffset = 132; | 34 static const uint32_t kSharedMemoryOffset = 132; |
| 32 static const int32 kSharedMemory2Id = 402; | 35 static const int32_t kSharedMemory2Id = 402; |
| 33 static const uint32 kSharedMemory2Offset = 232; | 36 static const uint32_t kSharedMemory2Offset = 232; |
| 34 static const size_t kSharedBufferSize = 2048; | 37 static const size_t kSharedBufferSize = 2048; |
| 35 static const int32 kInvalidSharedMemoryId = 403; | 38 static const int32_t kInvalidSharedMemoryId = 403; |
| 36 static const uint32 kInvalidSharedMemoryOffset = kSharedBufferSize + 1; | 39 static const uint32_t kInvalidSharedMemoryOffset = kSharedBufferSize + 1; |
| 37 static const uint32 kInitialResult = 0xBDBDBDBDu; | 40 static const uint32_t kInitialResult = 0xBDBDBDBDu; |
| 38 static const uint8 kInitialMemoryValue = 0xBDu; | 41 static const uint8_t kInitialMemoryValue = 0xBDu; |
| 39 | 42 |
| 40 QueryManagerTest() { | 43 QueryManagerTest() { |
| 41 } | 44 } |
| 42 ~QueryManagerTest() override {} | 45 ~QueryManagerTest() override {} |
| 43 | 46 |
| 44 protected: | 47 protected: |
| 45 void SetUp() override { | 48 void SetUp() override { |
| 46 GpuServiceTest::SetUpWithGLVersion("3.2", | 49 GpuServiceTest::SetUpWithGLVersion("3.2", |
| 47 "GL_ARB_occlusion_query, " | 50 "GL_ARB_occlusion_query, " |
| 48 "GL_ARB_timer_query"); | 51 "GL_ARB_timer_query"); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 63 decoder_->set_engine(engine_.get()); | 66 decoder_->set_engine(engine_.get()); |
| 64 TestHelper::SetupFeatureInfoInitExpectations( | 67 TestHelper::SetupFeatureInfoInitExpectations( |
| 65 gl_.get(), extension_expectations); | 68 gl_.get(), extension_expectations); |
| 66 EXPECT_CALL(*decoder_.get(), GetGLContext()) | 69 EXPECT_CALL(*decoder_.get(), GetGLContext()) |
| 67 .WillRepeatedly(Return(GetGLContext())); | 70 .WillRepeatedly(Return(GetGLContext())); |
| 68 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 71 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 69 feature_info->InitializeForTesting(); | 72 feature_info->InitializeForTesting(); |
| 70 manager_.reset(new QueryManager(decoder_.get(), feature_info.get())); | 73 manager_.reset(new QueryManager(decoder_.get(), feature_info.get())); |
| 71 } | 74 } |
| 72 | 75 |
| 73 QueryManager::Query* CreateQuery( | 76 QueryManager::Query* CreateQuery(GLenum target, |
| 74 GLenum target, GLuint client_id, int32 shm_id, uint32 shm_offset, | 77 GLuint client_id, |
| 75 GLuint service_id) { | 78 int32_t shm_id, |
| 79 uint32_t shm_offset, |
| 80 GLuint service_id) { |
| 76 EXPECT_CALL(*gl_, GenQueries(1, _)) | 81 EXPECT_CALL(*gl_, GenQueries(1, _)) |
| 77 .WillOnce(SetArgumentPointee<1>(service_id)) | 82 .WillOnce(SetArgumentPointee<1>(service_id)) |
| 78 .RetiresOnSaturation(); | 83 .RetiresOnSaturation(); |
| 79 return manager_->CreateQuery(target, client_id, shm_id, shm_offset); | 84 return manager_->CreateQuery(target, client_id, shm_id, shm_offset); |
| 80 } | 85 } |
| 81 | 86 |
| 82 void QueueQuery(QueryManager::Query* query, | 87 void QueueQuery(QueryManager::Query* query, |
| 83 GLuint service_id, | 88 GLuint service_id, |
| 84 base::subtle::Atomic32 submit_count) { | 89 base::subtle::Atomic32 submit_count) { |
| 85 EXPECT_CALL(*gl_, BeginQuery(query->target(), service_id)) | 90 EXPECT_CALL(*gl_, BeginQuery(query->target(), service_id)) |
| (...skipping 21 matching lines...) Expand all Loading... |
| 107 scoped_ptr<base::SharedMemory> shared_memory2(new base::SharedMemory()); | 112 scoped_ptr<base::SharedMemory> shared_memory2(new base::SharedMemory()); |
| 108 shared_memory2->CreateAndMapAnonymous(kSharedBufferSize); | 113 shared_memory2->CreateAndMapAnonymous(kSharedBufferSize); |
| 109 valid_buffer2_ = MakeBufferFromSharedMemory(std::move(shared_memory2), | 114 valid_buffer2_ = MakeBufferFromSharedMemory(std::move(shared_memory2), |
| 110 kSharedBufferSize); | 115 kSharedBufferSize); |
| 111 | 116 |
| 112 ClearSharedMemory(); | 117 ClearSharedMemory(); |
| 113 } | 118 } |
| 114 | 119 |
| 115 ~MockCommandBufferEngine() override {} | 120 ~MockCommandBufferEngine() override {} |
| 116 | 121 |
| 117 scoped_refptr<gpu::Buffer> GetSharedMemoryBuffer(int32 shm_id) override { | 122 scoped_refptr<gpu::Buffer> GetSharedMemoryBuffer(int32_t shm_id) override { |
| 118 switch (shm_id) { | 123 switch (shm_id) { |
| 119 case kSharedMemoryId: return valid_buffer_; | 124 case kSharedMemoryId: return valid_buffer_; |
| 120 case kSharedMemory2Id: return valid_buffer2_; | 125 case kSharedMemory2Id: return valid_buffer2_; |
| 121 default: return invalid_buffer_; | 126 default: return invalid_buffer_; |
| 122 } | 127 } |
| 123 } | 128 } |
| 124 | 129 |
| 125 void ClearSharedMemory() { | 130 void ClearSharedMemory() { |
| 126 memset(valid_buffer_->memory(), kInitialMemoryValue, kSharedBufferSize); | 131 memset(valid_buffer_->memory(), kInitialMemoryValue, kSharedBufferSize); |
| 127 memset(valid_buffer2_->memory(), kInitialMemoryValue, kSharedBufferSize); | 132 memset(valid_buffer2_->memory(), kInitialMemoryValue, kSharedBufferSize); |
| 128 } | 133 } |
| 129 | 134 |
| 130 void set_token(int32 token) override { DCHECK(false); } | 135 void set_token(int32_t token) override { DCHECK(false); } |
| 131 | 136 |
| 132 bool SetGetBuffer(int32 /* transfer_buffer_id */) override { | 137 bool SetGetBuffer(int32_t /* transfer_buffer_id */) override { |
| 133 DCHECK(false); | 138 DCHECK(false); |
| 134 return false; | 139 return false; |
| 135 } | 140 } |
| 136 | 141 |
| 137 // Overridden from CommandBufferEngine. | 142 // Overridden from CommandBufferEngine. |
| 138 bool SetGetOffset(int32 offset) override { | 143 bool SetGetOffset(int32_t offset) override { |
| 139 DCHECK(false); | 144 DCHECK(false); |
| 140 return false; | 145 return false; |
| 141 } | 146 } |
| 142 | 147 |
| 143 // Overridden from CommandBufferEngine. | 148 // Overridden from CommandBufferEngine. |
| 144 int32 GetGetOffset() override { | 149 int32_t GetGetOffset() override { |
| 145 DCHECK(false); | 150 DCHECK(false); |
| 146 return 0; | 151 return 0; |
| 147 } | 152 } |
| 148 | 153 |
| 149 private: | 154 private: |
| 150 scoped_refptr<gpu::Buffer> valid_buffer_; | 155 scoped_refptr<gpu::Buffer> valid_buffer_; |
| 151 scoped_refptr<gpu::Buffer> valid_buffer2_; | 156 scoped_refptr<gpu::Buffer> valid_buffer2_; |
| 152 scoped_refptr<gpu::Buffer> invalid_buffer_; | 157 scoped_refptr<gpu::Buffer> invalid_buffer_; |
| 153 }; | 158 }; |
| 154 | 159 |
| 155 scoped_ptr<MockCommandBufferEngine> engine_; | 160 scoped_ptr<MockCommandBufferEngine> engine_; |
| 156 }; | 161 }; |
| 157 | 162 |
| 158 class QueryManagerManualSetupTest : public QueryManagerTest { | 163 class QueryManagerManualSetupTest : public QueryManagerTest { |
| 159 protected: | 164 protected: |
| 160 void SetUp() override { | 165 void SetUp() override { |
| 161 // Let test setup manually. | 166 // Let test setup manually. |
| 162 } | 167 } |
| 163 }; | 168 }; |
| 164 | 169 |
| 165 // GCC requires these declarations, but MSVC requires they not be present | 170 // GCC requires these declarations, but MSVC requires they not be present |
| 166 #ifndef COMPILER_MSVC | 171 #ifndef COMPILER_MSVC |
| 167 const int32 QueryManagerTest::kSharedMemoryId; | 172 const int32_t QueryManagerTest::kSharedMemoryId; |
| 168 const uint32 QueryManagerTest::kSharedMemoryOffset; | 173 const uint32_t QueryManagerTest::kSharedMemoryOffset; |
| 169 const int32 QueryManagerTest::kSharedMemory2Id; | 174 const int32_t QueryManagerTest::kSharedMemory2Id; |
| 170 const uint32 QueryManagerTest::kSharedMemory2Offset; | 175 const uint32_t QueryManagerTest::kSharedMemory2Offset; |
| 171 const size_t QueryManagerTest::kSharedBufferSize; | 176 const size_t QueryManagerTest::kSharedBufferSize; |
| 172 const int32 QueryManagerTest::kInvalidSharedMemoryId; | 177 const int32_t QueryManagerTest::kInvalidSharedMemoryId; |
| 173 const uint32 QueryManagerTest::kInvalidSharedMemoryOffset; | 178 const uint32_t QueryManagerTest::kInvalidSharedMemoryOffset; |
| 174 const uint32 QueryManagerTest::kInitialResult; | 179 const uint32_t QueryManagerTest::kInitialResult; |
| 175 const uint8 QueryManagerTest::kInitialMemoryValue; | 180 const uint8_t QueryManagerTest::kInitialMemoryValue; |
| 176 #endif | 181 #endif |
| 177 | 182 |
| 178 TEST_F(QueryManagerTest, Basic) { | 183 TEST_F(QueryManagerTest, Basic) { |
| 179 const GLuint kClient1Id = 1; | 184 const GLuint kClient1Id = 1; |
| 180 const GLuint kService1Id = 11; | 185 const GLuint kService1Id = 11; |
| 181 const GLuint kClient2Id = 2; | 186 const GLuint kClient2Id = 2; |
| 182 | 187 |
| 183 EXPECT_FALSE(manager_->HavePendingQueries()); | 188 EXPECT_FALSE(manager_->HavePendingQueries()); |
| 184 // Check we can create a Query. | 189 // Check we can create a Query. |
| 185 scoped_refptr<QueryManager::Query> query( | 190 scoped_refptr<QueryManager::Query> query( |
| (...skipping 756 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 942 | 947 |
| 943 EXPECT_EQ(static_cast<GLuint>(GL_INVALID_ENUM), sync->result); | 948 EXPECT_EQ(static_cast<GLuint>(GL_INVALID_ENUM), sync->result); |
| 944 | 949 |
| 945 manager->Destroy(false); | 950 manager->Destroy(false); |
| 946 } | 951 } |
| 947 | 952 |
| 948 } // namespace gles2 | 953 } // namespace gles2 |
| 949 } // namespace gpu | 954 } // namespace gpu |
| 950 | 955 |
| 951 | 956 |
| OLD | NEW |