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 |