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