| 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 "gpu/command_buffer/service/query_manager.h" |
| 6 #include "gpu/command_buffer/common/gles2_cmd_format.h" | 6 #include "gpu/command_buffer/common/gles2_cmd_format.h" |
| 7 #include "gpu/command_buffer/service/cmd_buffer_engine.h" | 7 #include "gpu/command_buffer/service/cmd_buffer_engine.h" |
| 8 #include "gpu/command_buffer/service/error_state_mock.h" | 8 #include "gpu/command_buffer/service/error_state_mock.h" |
| 9 #include "gpu/command_buffer/service/feature_info.h" | |
| 10 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 9 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
| 11 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" | 10 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" |
| 12 #include "gpu/command_buffer/service/gpu_service_test.h" | 11 #include "gpu/command_buffer/service/feature_info.h" |
| 13 #include "gpu/command_buffer/service/test_helper.h" | 12 #include "gpu/command_buffer/service/test_helper.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 15 #include "ui/gl/gl_mock.h" | 14 #include "ui/gl/gl_mock.h" |
| 16 | 15 |
| 17 using ::testing::_; | 16 using ::testing::_; |
| 18 using ::testing::InSequence; | 17 using ::testing::InSequence; |
| 19 using ::testing::Return; | 18 using ::testing::Return; |
| 20 using ::testing::SetArgumentPointee; | 19 using ::testing::SetArgumentPointee; |
| 21 | 20 |
| 22 namespace gpu { | 21 namespace gpu { |
| 23 namespace gles2 { | 22 namespace gles2 { |
| 24 | 23 |
| 25 class QueryManagerTest : public GpuServiceTest { | 24 class QueryManagerTest : public testing::Test { |
| 26 public: | 25 public: |
| 27 static const int32 kSharedMemoryId = 401; | 26 static const int32 kSharedMemoryId = 401; |
| 28 static const size_t kSharedBufferSize = 2048; | 27 static const size_t kSharedBufferSize = 2048; |
| 29 static const uint32 kSharedMemoryOffset = 132; | 28 static const uint32 kSharedMemoryOffset = 132; |
| 30 static const int32 kInvalidSharedMemoryId = 402; | 29 static const int32 kInvalidSharedMemoryId = 402; |
| 31 static const uint32 kInvalidSharedMemoryOffset = kSharedBufferSize + 1; | 30 static const uint32 kInvalidSharedMemoryOffset = kSharedBufferSize + 1; |
| 32 static const uint32 kInitialResult = 0xBDBDBDBDu; | 31 static const uint32 kInitialResult = 0xBDBDBDBDu; |
| 33 static const uint8 kInitialMemoryValue = 0xBDu; | 32 static const uint8 kInitialMemoryValue = 0xBDu; |
| 34 | 33 |
| 35 QueryManagerTest() { | 34 QueryManagerTest() { |
| 36 } | 35 } |
| 37 virtual ~QueryManagerTest() { | 36 virtual ~QueryManagerTest() { |
| 38 } | 37 } |
| 39 | 38 |
| 40 protected: | 39 protected: |
| 41 virtual void SetUp() { | 40 virtual void SetUp() { |
| 42 GpuServiceTest::SetUp(); | 41 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); |
| 42 ::gfx::MockGLInterface::SetGLInterface(gl_.get()); |
| 43 engine_.reset(new MockCommandBufferEngine()); | 43 engine_.reset(new MockCommandBufferEngine()); |
| 44 decoder_.reset(new MockGLES2Decoder()); | 44 decoder_.reset(new MockGLES2Decoder()); |
| 45 decoder_->set_engine(engine_.get()); | 45 decoder_->set_engine(engine_.get()); |
| 46 TestHelper::SetupFeatureInfoInitExpectations( | 46 TestHelper::SetupFeatureInfoInitExpectations( |
| 47 gl_.get(), | 47 gl_.get(), |
| 48 "GL_EXT_occlusion_query_boolean"); | 48 "GL_EXT_occlusion_query_boolean"); |
| 49 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); | 49 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); |
| 50 feature_info->Initialize(); | 50 feature_info->Initialize(); |
| 51 manager_.reset(new QueryManager(decoder_.get(), feature_info.get())); | 51 manager_.reset(new QueryManager(decoder_.get(), feature_info.get())); |
| 52 } | 52 } |
| 53 | 53 |
| 54 virtual void TearDown() { | 54 virtual void TearDown() { |
| 55 decoder_.reset(); | 55 decoder_.reset(); |
| 56 manager_->Destroy(false); | 56 manager_->Destroy(false); |
| 57 manager_.reset(); | 57 manager_.reset(); |
| 58 engine_.reset(); | 58 engine_.reset(); |
| 59 GpuServiceTest::TearDown(); | 59 ::gfx::MockGLInterface::SetGLInterface(NULL); |
| 60 gl_.reset(); |
| 60 } | 61 } |
| 61 | 62 |
| 62 QueryManager::Query* CreateQuery( | 63 QueryManager::Query* CreateQuery( |
| 63 GLenum target, GLuint client_id, int32 shm_id, uint32 shm_offset, | 64 GLenum target, GLuint client_id, int32 shm_id, uint32 shm_offset, |
| 64 GLuint service_id) { | 65 GLuint service_id) { |
| 65 EXPECT_CALL(*gl_, GenQueriesARB(1, _)) | 66 EXPECT_CALL(*gl_, GenQueriesARB(1, _)) |
| 66 .WillOnce(SetArgumentPointee<1>(service_id)) | 67 .WillOnce(SetArgumentPointee<1>(service_id)) |
| 67 .RetiresOnSaturation(); | 68 .RetiresOnSaturation(); |
| 68 return manager_->CreateQuery(target, client_id, shm_id, shm_offset); | 69 return manager_->CreateQuery(target, client_id, shm_id, shm_offset); |
| 69 } | 70 } |
| 70 | 71 |
| 71 void QueueQuery(QueryManager::Query* query, | 72 void QueueQuery(QueryManager::Query* query, |
| 72 GLuint service_id, | 73 GLuint service_id, |
| 73 base::subtle::Atomic32 submit_count) { | 74 base::subtle::Atomic32 submit_count) { |
| 74 EXPECT_CALL(*gl_, BeginQueryARB(query->target(), service_id)) | 75 EXPECT_CALL(*gl_, BeginQueryARB(query->target(), service_id)) |
| 75 .Times(1) | 76 .Times(1) |
| 76 .RetiresOnSaturation(); | 77 .RetiresOnSaturation(); |
| 77 EXPECT_CALL(*gl_, EndQueryARB(query->target())) | 78 EXPECT_CALL(*gl_, EndQueryARB(query->target())) |
| 78 .Times(1) | 79 .Times(1) |
| 79 .RetiresOnSaturation(); | 80 .RetiresOnSaturation(); |
| 80 EXPECT_TRUE(manager_->BeginQuery(query)); | 81 EXPECT_TRUE(manager_->BeginQuery(query)); |
| 81 EXPECT_TRUE(manager_->EndQuery(query, submit_count)); | 82 EXPECT_TRUE(manager_->EndQuery(query, submit_count)); |
| 82 } | 83 } |
| 83 | 84 |
| 85 // Use StrictMock to make 100% sure we know how GL will be called. |
| 86 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; |
| 84 scoped_ptr<MockGLES2Decoder> decoder_; | 87 scoped_ptr<MockGLES2Decoder> decoder_; |
| 85 scoped_ptr<QueryManager> manager_; | 88 scoped_ptr<QueryManager> manager_; |
| 86 | 89 |
| 87 private: | 90 private: |
| 88 class MockCommandBufferEngine : public CommandBufferEngine { | 91 class MockCommandBufferEngine : public CommandBufferEngine { |
| 89 public: | 92 public: |
| 90 MockCommandBufferEngine() { | 93 MockCommandBufferEngine() { |
| 91 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); | 94 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); |
| 92 shared_memory->CreateAndMapAnonymous(kSharedBufferSize); | 95 shared_memory->CreateAndMapAnonymous(kSharedBufferSize); |
| 93 valid_buffer_ = | 96 valid_buffer_ = |
| (...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 566 | 569 |
| 567 EXPECT_EQ(static_cast<GLuint>(GL_INVALID_ENUM), sync->result); | 570 EXPECT_EQ(static_cast<GLuint>(GL_INVALID_ENUM), sync->result); |
| 568 | 571 |
| 569 manager->Destroy(false); | 572 manager->Destroy(false); |
| 570 } | 573 } |
| 571 | 574 |
| 572 } // namespace gles2 | 575 } // namespace gles2 |
| 573 } // namespace gpu | 576 } // namespace gpu |
| 574 | 577 |
| 575 | 578 |
| OLD | NEW |