Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(841)

Side by Side Diff: gpu/command_buffer/service/query_manager_unittest.cc

Issue 9694025: Add support for GL_COMMANDS_ISSUED_CHROMIUM fence like query. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add cast for std::min Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « gpu/command_buffer/service/query_manager.cc ('k') | third_party/khronos/GLES2/gl2ext.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/gl_mock.h" 6 #include "gpu/command_buffer/common/gl_mock.h"
7 #include "gpu/command_buffer/common/gles2_cmd_format.h" 7 #include "gpu/command_buffer/common/gles2_cmd_format.h"
8 #include "gpu/command_buffer/service/cmd_buffer_engine.h" 8 #include "gpu/command_buffer/service/cmd_buffer_engine.h"
9 #include "gpu/command_buffer/service/common_decoder.h" 9 #include "gpu/command_buffer/service/common_decoder.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 30 matching lines...) Expand all
41 ~QueryManagerTest() { 41 ~QueryManagerTest() {
42 } 42 }
43 43
44 protected: 44 protected:
45 virtual void SetUp() { 45 virtual void SetUp() {
46 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); 46 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
47 ::gfx::GLInterface::SetGLInterface(gl_.get()); 47 ::gfx::GLInterface::SetGLInterface(gl_.get());
48 engine_.reset(new MockCommandBufferEngine()); 48 engine_.reset(new MockCommandBufferEngine());
49 decoder_.reset(new MockDecoder()); 49 decoder_.reset(new MockDecoder());
50 decoder_->set_engine(engine_.get()); 50 decoder_->set_engine(engine_.get());
51 manager_.reset(new QueryManager()); 51 manager_.reset(new QueryManager(decoder_.get(), false));
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::GLInterface::SetGLInterface(NULL); 59 ::gfx::GLInterface::SetGLInterface(NULL);
60 gl_.reset(); 60 gl_.reset();
61 } 61 }
62 62
63 QueryManager::Query* CreateQuery(
64 GLenum target, GLuint client_id, int32 shm_id, uint32 shm_offset,
65 GLuint service_id) {
66 EXPECT_CALL(*gl_, GenQueriesARB(1, _))
67 .WillOnce(SetArgumentPointee<1>(service_id))
68 .RetiresOnSaturation();
69 return manager_->CreateQuery(target, client_id, shm_id, shm_offset);
70 }
71
72 void QueueQuery(
73 QueryManager::Query* query, GLuint service_id, uint32 submit_count) {
74 EXPECT_CALL(*gl_, BeginQueryARB(query->target(), service_id))
75 .Times(1)
76 .RetiresOnSaturation();
77 EXPECT_CALL(*gl_, EndQueryARB(query->target()))
78 .Times(1)
79 .RetiresOnSaturation();
80 EXPECT_TRUE(manager_->BeginQuery(query));
81 EXPECT_TRUE(manager_->EndQuery(query, submit_count));
82 }
83
63 // Use StrictMock to make 100% sure we know how GL will be called. 84 // Use StrictMock to make 100% sure we know how GL will be called.
64 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; 85 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
65 scoped_ptr<MockDecoder> decoder_; 86 scoped_ptr<MockDecoder> decoder_;
66 scoped_ptr<QueryManager> manager_; 87 scoped_ptr<QueryManager> manager_;
67 88
68 private: 89 private:
69 class MockCommandBufferEngine : public CommandBufferEngine { 90 class MockCommandBufferEngine : public CommandBufferEngine {
70 public: 91 public:
71 MockCommandBufferEngine() { 92 MockCommandBufferEngine() {
72 data_.reset(new int8[kSharedBufferSize]); 93 data_.reset(new int8[kSharedBufferSize]);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 #endif 149 #endif
129 150
130 TEST_F(QueryManagerTest, Basic) { 151 TEST_F(QueryManagerTest, Basic) {
131 const GLuint kClient1Id = 1; 152 const GLuint kClient1Id = 1;
132 const GLuint kService1Id = 11; 153 const GLuint kService1Id = 11;
133 const GLuint kClient2Id = 2; 154 const GLuint kClient2Id = 2;
134 155
135 EXPECT_FALSE(manager_->HavePendingQueries()); 156 EXPECT_FALSE(manager_->HavePendingQueries());
136 // Check we can create a Query. 157 // Check we can create a Query.
137 QueryManager::Query::Ref query( 158 QueryManager::Query::Ref query(
138 manager_->CreateQuery(kClient1Id, kService1Id)); 159 CreateQuery(GL_ANY_SAMPLES_PASSED_EXT, kClient1Id,
160 kSharedMemoryId, kSharedMemoryOffset, kService1Id));
139 ASSERT_TRUE(query.get() != NULL); 161 ASSERT_TRUE(query.get() != NULL);
140 // Check we can get the same Query. 162 // Check we can get the same Query.
141 EXPECT_EQ(query.get(), manager_->GetQuery(kClient1Id)); 163 EXPECT_EQ(query.get(), manager_->GetQuery(kClient1Id));
142 // Check we can get the client id.
143 GLuint client_id = -1;
144 EXPECT_TRUE(manager_->GetClientId(kService1Id, &client_id));
145 EXPECT_EQ(kClient1Id, client_id);
146 EXPECT_FALSE(manager_->HavePendingQueries());
147 // Check we get nothing for a non-existent query. 164 // Check we get nothing for a non-existent query.
148 EXPECT_TRUE(manager_->GetQuery(kClient2Id) == NULL); 165 EXPECT_TRUE(manager_->GetQuery(kClient2Id) == NULL);
149 // Check we can delete the query. 166 // Check we can delete the query.
150 manager_->RemoveQuery(kClient1Id); 167 manager_->RemoveQuery(kClient1Id);
151 // Check we get nothing for a non-existent query. 168 // Check we get nothing for a non-existent query.
152 EXPECT_TRUE(manager_->GetQuery(kClient1Id) == NULL); 169 EXPECT_TRUE(manager_->GetQuery(kClient1Id) == NULL);
153 // Check query is deleted 170 // Check query is deleted
154 EXPECT_TRUE(query->IsDeleted()); 171 EXPECT_TRUE(query->IsDeleted());
155 EXPECT_FALSE(manager_->HavePendingQueries()); 172 EXPECT_FALSE(manager_->HavePendingQueries());
156 } 173 }
157 174
158 TEST_F(QueryManagerTest, Destroy) { 175 TEST_F(QueryManagerTest, Destroy) {
159 const GLuint kClient1Id = 1; 176 const GLuint kClient1Id = 1;
160 const GLuint kService1Id = 11; 177 const GLuint kService1Id = 11;
161 178
162 // Create Query. 179 // Create Query.
163 QueryManager::Query::Ref query( 180 QueryManager::Query::Ref query(
164 manager_->CreateQuery(kClient1Id, kService1Id)); 181 CreateQuery(GL_ANY_SAMPLES_PASSED_EXT, kClient1Id,
182 kSharedMemoryId, kSharedMemoryOffset, kService1Id));
165 ASSERT_TRUE(query.get() != NULL); 183 ASSERT_TRUE(query.get() != NULL);
166 EXPECT_CALL(*gl_, DeleteQueriesARB(1, ::testing::Pointee(kService1Id))) 184 EXPECT_CALL(*gl_, DeleteQueriesARB(1, ::testing::Pointee(kService1Id)))
167 .Times(1) 185 .Times(1)
168 .RetiresOnSaturation(); 186 .RetiresOnSaturation();
169 manager_->Destroy(true); 187 manager_->Destroy(true);
170 // Check we get nothing for a non-existent query. 188 // Check we get nothing for a non-existent query.
171 EXPECT_TRUE(manager_->GetQuery(kClient1Id) == NULL); 189 EXPECT_TRUE(manager_->GetQuery(kClient1Id) == NULL);
172 // Check query is deleted 190 // Check query is deleted
173 EXPECT_TRUE(query->IsDeleted()); 191 EXPECT_TRUE(query->IsDeleted());
174 } 192 }
175 193
176 TEST_F(QueryManagerTest, QueryBasic) { 194 TEST_F(QueryManagerTest, QueryBasic) {
177 const GLuint kClient1Id = 1; 195 const GLuint kClient1Id = 1;
178 const GLuint kService1Id = 11; 196 const GLuint kService1Id = 11;
179
180 // Create Query.
181 QueryManager::Query::Ref query(
182 manager_->CreateQuery(kClient1Id, kService1Id));
183 ASSERT_TRUE(query.get() != NULL);
184
185 EXPECT_FALSE(query->IsValid());
186 EXPECT_FALSE(query->IsDeleted());
187 EXPECT_FALSE(query->IsInitialized());
188 EXPECT_FALSE(query->pending());
189 }
190
191 TEST_F(QueryManagerTest, QueryInitialize) {
192 const GLuint kClient1Id = 1;
193 const GLuint kService1Id = 11;
194 const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT; 197 const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT;
195 198
196 // Create Query. 199 // Create Query.
197 QueryManager::Query::Ref query( 200 QueryManager::Query::Ref query(
198 manager_->CreateQuery(kClient1Id, kService1Id)); 201 CreateQuery(kTarget, kClient1Id,
202 kSharedMemoryId, kSharedMemoryOffset, kService1Id));
199 ASSERT_TRUE(query.get() != NULL); 203 ASSERT_TRUE(query.get() != NULL);
200 204
201 query->Initialize(kTarget, kSharedMemoryId, kSharedMemoryOffset); 205 EXPECT_TRUE(query->IsValid());
206 EXPECT_FALSE(query->IsDeleted());
207 EXPECT_FALSE(query->pending());
202 EXPECT_EQ(kTarget, query->target()); 208 EXPECT_EQ(kTarget, query->target());
203 EXPECT_EQ(kSharedMemoryId, query->shm_id()); 209 EXPECT_EQ(kSharedMemoryId, query->shm_id());
204 EXPECT_EQ(kSharedMemoryOffset, query->shm_offset()); 210 EXPECT_EQ(kSharedMemoryOffset, query->shm_offset());
205
206 EXPECT_TRUE(query->IsValid());
207 EXPECT_FALSE(query->IsDeleted());
208 EXPECT_TRUE(query->IsInitialized());
209 EXPECT_FALSE(query->pending());
210 } 211 }
211 212
212 TEST_F(QueryManagerTest, ProcessPendingQuery) { 213 TEST_F(QueryManagerTest, ProcessPendingQuery) {
213 const GLuint kClient1Id = 1; 214 const GLuint kClient1Id = 1;
214 const GLuint kService1Id = 11; 215 const GLuint kService1Id = 11;
215 const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT; 216 const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT;
216 const uint32 kSubmitCount = 123; 217 const uint32 kSubmitCount = 123;
217 const GLuint kResult = 456; 218 const GLuint kResult = 456;
218 219
219 // Check nothing happens if there are no pending queries. 220 // Check nothing happens if there are no pending queries.
220 EXPECT_TRUE(manager_->ProcessPendingQueries(decoder_.get())); 221 EXPECT_TRUE(manager_->ProcessPendingQueries());
221 222
222 // Create Query. 223 // Create Query.
223 QueryManager::Query::Ref query( 224 QueryManager::Query::Ref query(
224 manager_->CreateQuery(kClient1Id, kService1Id)); 225 CreateQuery(kTarget, kClient1Id,
226 kSharedMemoryId, kSharedMemoryOffset, kService1Id));
225 ASSERT_TRUE(query.get() != NULL); 227 ASSERT_TRUE(query.get() != NULL);
226 query->Initialize(kTarget, kSharedMemoryId, kSharedMemoryOffset);
227 228
228 // Setup shared memory like client would. 229 // Setup shared memory like client would.
229 QuerySync* sync = decoder_->GetSharedMemoryAs<QuerySync*>( 230 QuerySync* sync = decoder_->GetSharedMemoryAs<QuerySync*>(
230 kSharedMemoryId, kSharedMemoryOffset, sizeof(*sync)); 231 kSharedMemoryId, kSharedMemoryOffset, sizeof(*sync));
231 ASSERT_TRUE(sync != NULL); 232 ASSERT_TRUE(sync != NULL);
232 sync->Reset(); 233 sync->Reset();
233 234
234 // Queue it 235 // Queue it
235 manager_->AddPendingQuery(query.get(), kSubmitCount); 236 QueueQuery(query.get(), kService1Id, kSubmitCount);
236 EXPECT_TRUE(query->pending()); 237 EXPECT_TRUE(query->pending());
237 EXPECT_TRUE(manager_->HavePendingQueries()); 238 EXPECT_TRUE(manager_->HavePendingQueries());
238 239
239 // Process with return not available. 240 // Process with return not available.
240 // Expect 1 GL command. 241 // Expect 1 GL command.
241 EXPECT_CALL(*gl_, 242 EXPECT_CALL(*gl_,
242 GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_AVAILABLE_EXT, _)) 243 GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_AVAILABLE_EXT, _))
243 .WillOnce(SetArgumentPointee<2>(0)) 244 .WillOnce(SetArgumentPointee<2>(0))
244 .RetiresOnSaturation(); 245 .RetiresOnSaturation();
245 EXPECT_TRUE(manager_->ProcessPendingQueries(decoder_.get())); 246 EXPECT_TRUE(manager_->ProcessPendingQueries());
246 EXPECT_TRUE(query->pending()); 247 EXPECT_TRUE(query->pending());
247 EXPECT_EQ(0u, sync->process_count); 248 EXPECT_EQ(0u, sync->process_count);
248 EXPECT_EQ(0u, sync->result); 249 EXPECT_EQ(0u, sync->result);
249 250
250 // Process with return available. 251 // Process with return available.
251 // Expect 2 GL commands. 252 // Expect 2 GL commands.
252 EXPECT_CALL(*gl_, 253 EXPECT_CALL(*gl_,
253 GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_AVAILABLE_EXT, _)) 254 GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_AVAILABLE_EXT, _))
254 .WillOnce(SetArgumentPointee<2>(1)) 255 .WillOnce(SetArgumentPointee<2>(1))
255 .RetiresOnSaturation(); 256 .RetiresOnSaturation();
256 EXPECT_CALL(*gl_, 257 EXPECT_CALL(*gl_,
257 GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_EXT, _)) 258 GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_EXT, _))
258 .WillOnce(SetArgumentPointee<2>(kResult)) 259 .WillOnce(SetArgumentPointee<2>(kResult))
259 .RetiresOnSaturation(); 260 .RetiresOnSaturation();
260 EXPECT_TRUE(manager_->ProcessPendingQueries(decoder_.get())); 261 EXPECT_TRUE(manager_->ProcessPendingQueries());
261 EXPECT_FALSE(query->pending()); 262 EXPECT_FALSE(query->pending());
262 EXPECT_EQ(kSubmitCount, sync->process_count); 263 EXPECT_EQ(kSubmitCount, sync->process_count);
263 EXPECT_EQ(kResult, sync->result); 264 EXPECT_EQ(kResult, sync->result);
264 EXPECT_FALSE(manager_->HavePendingQueries()); 265 EXPECT_FALSE(manager_->HavePendingQueries());
265 266
266 // Process with no queries. 267 // Process with no queries.
267 // Expect no GL commands/ 268 // Expect no GL commands/
268 EXPECT_TRUE(manager_->ProcessPendingQueries(decoder_.get())); 269 EXPECT_TRUE(manager_->ProcessPendingQueries());
269 } 270 }
270 271
271 TEST_F(QueryManagerTest, ProcessPendingQueries) { 272 TEST_F(QueryManagerTest, ProcessPendingQueries) {
272 const GLuint kClient1Id = 1; 273 const GLuint kClient1Id = 1;
273 const GLuint kService1Id = 11; 274 const GLuint kService1Id = 11;
274 const GLuint kClient2Id = 2; 275 const GLuint kClient2Id = 2;
275 const GLuint kService2Id = 12; 276 const GLuint kService2Id = 12;
276 const GLuint kClient3Id = 3; 277 const GLuint kClient3Id = 3;
277 const GLuint kService3Id = 13; 278 const GLuint kService3Id = 13;
278 const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT; 279 const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT;
279 const uint32 kSubmitCount1 = 123; 280 const uint32 kSubmitCount1 = 123;
280 const uint32 kSubmitCount2 = 123; 281 const uint32 kSubmitCount2 = 123;
281 const uint32 kSubmitCount3 = 123; 282 const uint32 kSubmitCount3 = 123;
282 const GLuint kResult1 = 456; 283 const GLuint kResult1 = 456;
283 const GLuint kResult2 = 457; 284 const GLuint kResult2 = 457;
284 const GLuint kResult3 = 458; 285 const GLuint kResult3 = 458;
285 286
286 // Create Queries.
287 QueryManager::Query::Ref query1(
288 manager_->CreateQuery(kClient1Id, kService1Id));
289 QueryManager::Query::Ref query2(
290 manager_->CreateQuery(kClient2Id, kService2Id));
291 QueryManager::Query::Ref query3(
292 manager_->CreateQuery(kClient3Id, kService3Id));
293 ASSERT_TRUE(query1.get() != NULL);
294 ASSERT_TRUE(query2.get() != NULL);
295 ASSERT_TRUE(query3.get() != NULL);
296 EXPECT_FALSE(manager_->HavePendingQueries());
297
298 // Setup shared memory like client would. 287 // Setup shared memory like client would.
299 QuerySync* sync1 = decoder_->GetSharedMemoryAs<QuerySync*>( 288 QuerySync* sync1 = decoder_->GetSharedMemoryAs<QuerySync*>(
300 kSharedMemoryId, kSharedMemoryOffset, sizeof(*sync1) * 3); 289 kSharedMemoryId, kSharedMemoryOffset, sizeof(*sync1) * 3);
301 ASSERT_TRUE(sync1 != NULL); 290 ASSERT_TRUE(sync1 != NULL);
302 QuerySync* sync2 = sync1 + 1; 291 QuerySync* sync2 = sync1 + 1;
303 QuerySync* sync3 = sync2 + 1; 292 QuerySync* sync3 = sync2 + 1;
304 293
294 // Create Queries.
295 QueryManager::Query::Ref query1(
296 CreateQuery(kTarget, kClient1Id,
297 kSharedMemoryId, kSharedMemoryOffset + sizeof(*sync1) * 0,
298 kService1Id));
299 QueryManager::Query::Ref query2(
300 CreateQuery(kTarget, kClient2Id,
301 kSharedMemoryId, kSharedMemoryOffset + sizeof(*sync1) * 1,
302 kService2Id));
303 QueryManager::Query::Ref query3(
304 CreateQuery(kTarget, kClient3Id,
305 kSharedMemoryId, kSharedMemoryOffset + sizeof(*sync1) * 2,
306 kService3Id));
307 ASSERT_TRUE(query1.get() != NULL);
308 ASSERT_TRUE(query2.get() != NULL);
309 ASSERT_TRUE(query3.get() != NULL);
310 EXPECT_FALSE(manager_->HavePendingQueries());
311
305 sync1->Reset(); 312 sync1->Reset();
306 sync2->Reset(); 313 sync2->Reset();
307 sync3->Reset(); 314 sync3->Reset();
308 315
309 query1->Initialize(kTarget, kSharedMemoryId, kSharedMemoryOffset);
310 query2->Initialize(kTarget, kSharedMemoryId,
311 kSharedMemoryOffset + sizeof(*sync1));
312 query3->Initialize(kTarget, kSharedMemoryId,
313 kSharedMemoryOffset + sizeof(*sync1) * 2);
314
315 // Queue them 316 // Queue them
316 manager_->AddPendingQuery(query1.get(), kSubmitCount1); 317 QueueQuery(query1.get(), kService1Id, kSubmitCount1);
317 manager_->AddPendingQuery(query2.get(), kSubmitCount2); 318 QueueQuery(query2.get(), kService2Id, kSubmitCount2);
318 manager_->AddPendingQuery(query3.get(), kSubmitCount3); 319 QueueQuery(query3.get(), kService3Id, kSubmitCount3);
319 EXPECT_TRUE(query1->pending()); 320 EXPECT_TRUE(query1->pending());
320 EXPECT_TRUE(query2->pending()); 321 EXPECT_TRUE(query2->pending());
321 EXPECT_TRUE(query3->pending()); 322 EXPECT_TRUE(query3->pending());
322 EXPECT_TRUE(manager_->HavePendingQueries()); 323 EXPECT_TRUE(manager_->HavePendingQueries());
323 324
324 // Process with return available for first 2 queries. 325 // Process with return available for first 2 queries.
325 // Expect 4 GL commands. 326 // Expect 4 GL commands.
326 { 327 {
327 InSequence s; 328 InSequence s;
328 EXPECT_CALL(*gl_, 329 EXPECT_CALL(*gl_,
329 GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_AVAILABLE_EXT, _)) 330 GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_AVAILABLE_EXT, _))
330 .WillOnce(SetArgumentPointee<2>(1)) 331 .WillOnce(SetArgumentPointee<2>(1))
331 .RetiresOnSaturation(); 332 .RetiresOnSaturation();
332 EXPECT_CALL(*gl_, 333 EXPECT_CALL(*gl_,
333 GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_EXT, _)) 334 GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_EXT, _))
334 .WillOnce(SetArgumentPointee<2>(kResult1)) 335 .WillOnce(SetArgumentPointee<2>(kResult1))
335 .RetiresOnSaturation(); 336 .RetiresOnSaturation();
336 EXPECT_CALL(*gl_, 337 EXPECT_CALL(*gl_,
337 GetQueryObjectuivARB(kService2Id, GL_QUERY_RESULT_AVAILABLE_EXT, _)) 338 GetQueryObjectuivARB(kService2Id, GL_QUERY_RESULT_AVAILABLE_EXT, _))
338 .WillOnce(SetArgumentPointee<2>(1)) 339 .WillOnce(SetArgumentPointee<2>(1))
339 .RetiresOnSaturation(); 340 .RetiresOnSaturation();
340 EXPECT_CALL(*gl_, 341 EXPECT_CALL(*gl_,
341 GetQueryObjectuivARB(kService2Id, GL_QUERY_RESULT_EXT, _)) 342 GetQueryObjectuivARB(kService2Id, GL_QUERY_RESULT_EXT, _))
342 .WillOnce(SetArgumentPointee<2>(kResult2)) 343 .WillOnce(SetArgumentPointee<2>(kResult2))
343 .RetiresOnSaturation(); 344 .RetiresOnSaturation();
344 EXPECT_CALL(*gl_, 345 EXPECT_CALL(*gl_,
345 GetQueryObjectuivARB(kService3Id, GL_QUERY_RESULT_AVAILABLE_EXT, _)) 346 GetQueryObjectuivARB(kService3Id, GL_QUERY_RESULT_AVAILABLE_EXT, _))
346 .WillOnce(SetArgumentPointee<2>(0)) 347 .WillOnce(SetArgumentPointee<2>(0))
347 .RetiresOnSaturation(); 348 .RetiresOnSaturation();
348 EXPECT_TRUE(manager_->ProcessPendingQueries(decoder_.get())); 349 EXPECT_TRUE(manager_->ProcessPendingQueries());
349 } 350 }
350 EXPECT_FALSE(query1->pending()); 351 EXPECT_FALSE(query1->pending());
351 EXPECT_FALSE(query2->pending()); 352 EXPECT_FALSE(query2->pending());
352 EXPECT_TRUE(query3->pending()); 353 EXPECT_TRUE(query3->pending());
353 EXPECT_EQ(kSubmitCount1, sync1->process_count); 354 EXPECT_EQ(kSubmitCount1, sync1->process_count);
354 EXPECT_EQ(kSubmitCount2, sync2->process_count); 355 EXPECT_EQ(kSubmitCount2, sync2->process_count);
355 EXPECT_EQ(kResult1, sync1->result); 356 EXPECT_EQ(kResult1, sync1->result);
356 EXPECT_EQ(kResult2, sync2->result); 357 EXPECT_EQ(kResult2, sync2->result);
357 EXPECT_EQ(0u, sync3->process_count); 358 EXPECT_EQ(0u, sync3->process_count);
358 EXPECT_EQ(0u, sync3->result); 359 EXPECT_EQ(0u, sync3->result);
359 EXPECT_TRUE(manager_->HavePendingQueries()); 360 EXPECT_TRUE(manager_->HavePendingQueries());
360 361
361 // Process with renaming query. No result. 362 // Process with renaming query. No result.
362 // Expect 1 GL commands. 363 // Expect 1 GL commands.
363 EXPECT_CALL(*gl_, 364 EXPECT_CALL(*gl_,
364 GetQueryObjectuivARB(kService3Id, GL_QUERY_RESULT_AVAILABLE_EXT, _)) 365 GetQueryObjectuivARB(kService3Id, GL_QUERY_RESULT_AVAILABLE_EXT, _))
365 .WillOnce(SetArgumentPointee<2>(0)) 366 .WillOnce(SetArgumentPointee<2>(0))
366 .RetiresOnSaturation(); 367 .RetiresOnSaturation();
367 EXPECT_TRUE(manager_->ProcessPendingQueries(decoder_.get())); 368 EXPECT_TRUE(manager_->ProcessPendingQueries());
368 EXPECT_TRUE(query3->pending()); 369 EXPECT_TRUE(query3->pending());
369 EXPECT_EQ(0u, sync3->process_count); 370 EXPECT_EQ(0u, sync3->process_count);
370 EXPECT_EQ(0u, sync3->result); 371 EXPECT_EQ(0u, sync3->result);
371 EXPECT_TRUE(manager_->HavePendingQueries()); 372 EXPECT_TRUE(manager_->HavePendingQueries());
372 373
373 // Process with renaming query. With result. 374 // Process with renaming query. With result.
374 // Expect 2 GL commands. 375 // Expect 2 GL commands.
375 EXPECT_CALL(*gl_, 376 EXPECT_CALL(*gl_,
376 GetQueryObjectuivARB(kService3Id, GL_QUERY_RESULT_AVAILABLE_EXT, _)) 377 GetQueryObjectuivARB(kService3Id, GL_QUERY_RESULT_AVAILABLE_EXT, _))
377 .WillOnce(SetArgumentPointee<2>(1)) 378 .WillOnce(SetArgumentPointee<2>(1))
378 .RetiresOnSaturation(); 379 .RetiresOnSaturation();
379 EXPECT_CALL(*gl_, 380 EXPECT_CALL(*gl_,
380 GetQueryObjectuivARB(kService3Id, GL_QUERY_RESULT_EXT, _)) 381 GetQueryObjectuivARB(kService3Id, GL_QUERY_RESULT_EXT, _))
381 .WillOnce(SetArgumentPointee<2>(kResult3)) 382 .WillOnce(SetArgumentPointee<2>(kResult3))
382 .RetiresOnSaturation(); 383 .RetiresOnSaturation();
383 EXPECT_TRUE(manager_->ProcessPendingQueries(decoder_.get())); 384 EXPECT_TRUE(manager_->ProcessPendingQueries());
384 EXPECT_FALSE(query3->pending()); 385 EXPECT_FALSE(query3->pending());
385 EXPECT_EQ(kSubmitCount3, sync3->process_count); 386 EXPECT_EQ(kSubmitCount3, sync3->process_count);
386 EXPECT_EQ(kResult3, sync3->result); 387 EXPECT_EQ(kResult3, sync3->result);
387 EXPECT_FALSE(manager_->HavePendingQueries()); 388 EXPECT_FALSE(manager_->HavePendingQueries());
388 } 389 }
389 390
390 TEST_F(QueryManagerTest, ProcessPendingBadSharedMemoryId) { 391 TEST_F(QueryManagerTest, ProcessPendingBadSharedMemoryId) {
391 const GLuint kClient1Id = 1; 392 const GLuint kClient1Id = 1;
392 const GLuint kService1Id = 11; 393 const GLuint kService1Id = 11;
393 const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT; 394 const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT;
394 const uint32 kSubmitCount = 123; 395 const uint32 kSubmitCount = 123;
395 const GLuint kResult = 456; 396 const GLuint kResult = 456;
396 397
397 // Create Query. 398 // Create Query.
398 QueryManager::Query::Ref query( 399 QueryManager::Query::Ref query(
399 manager_->CreateQuery(kClient1Id, kService1Id)); 400 CreateQuery(kTarget, kClient1Id,
401 kInvalidSharedMemoryId, kSharedMemoryOffset, kService1Id));
400 ASSERT_TRUE(query.get() != NULL); 402 ASSERT_TRUE(query.get() != NULL);
401 query->Initialize(kTarget, kInvalidSharedMemoryId, kSharedMemoryOffset);
402 403
403 // Queue it 404 // Queue it
404 manager_->AddPendingQuery(query.get(), kSubmitCount); 405 QueueQuery(query.get(), kService1Id, kSubmitCount);
405 406
406 // Process with return available. 407 // Process with return available.
407 // Expect 2 GL commands. 408 // Expect 2 GL commands.
408 EXPECT_CALL(*gl_, 409 EXPECT_CALL(*gl_,
409 GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_AVAILABLE_EXT, _)) 410 GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_AVAILABLE_EXT, _))
410 .WillOnce(SetArgumentPointee<2>(1)) 411 .WillOnce(SetArgumentPointee<2>(1))
411 .RetiresOnSaturation(); 412 .RetiresOnSaturation();
412 EXPECT_CALL(*gl_, 413 EXPECT_CALL(*gl_,
413 GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_EXT, _)) 414 GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_EXT, _))
414 .WillOnce(SetArgumentPointee<2>(kResult)) 415 .WillOnce(SetArgumentPointee<2>(kResult))
415 .RetiresOnSaturation(); 416 .RetiresOnSaturation();
416 EXPECT_FALSE(manager_->ProcessPendingQueries(decoder_.get())); 417 EXPECT_FALSE(manager_->ProcessPendingQueries());
417 } 418 }
418 419
419 TEST_F(QueryManagerTest, ProcessPendingBadSharedMemoryOffset) { 420 TEST_F(QueryManagerTest, ProcessPendingBadSharedMemoryOffset) {
420 const GLuint kClient1Id = 1; 421 const GLuint kClient1Id = 1;
421 const GLuint kService1Id = 11; 422 const GLuint kService1Id = 11;
422 const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT; 423 const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT;
423 const uint32 kSubmitCount = 123; 424 const uint32 kSubmitCount = 123;
424 const GLuint kResult = 456; 425 const GLuint kResult = 456;
425 426
426 // Create Query. 427 // Create Query.
427 QueryManager::Query::Ref query( 428 QueryManager::Query::Ref query(
428 manager_->CreateQuery(kClient1Id, kService1Id)); 429 CreateQuery(kTarget, kClient1Id,
430 kSharedMemoryId, kInvalidSharedMemoryOffset, kService1Id));
429 ASSERT_TRUE(query.get() != NULL); 431 ASSERT_TRUE(query.get() != NULL);
430 query->Initialize(kTarget, kSharedMemoryId, kInvalidSharedMemoryOffset);
431 432
432 // Queue it 433 // Queue it
433 manager_->AddPendingQuery(query.get(), kSubmitCount); 434 QueueQuery(query.get(), kService1Id, kSubmitCount);
434 435
435 // Process with return available. 436 // Process with return available.
436 // Expect 2 GL commands. 437 // Expect 2 GL commands.
437 EXPECT_CALL(*gl_, 438 EXPECT_CALL(*gl_,
438 GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_AVAILABLE_EXT, _)) 439 GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_AVAILABLE_EXT, _))
439 .WillOnce(SetArgumentPointee<2>(1)) 440 .WillOnce(SetArgumentPointee<2>(1))
440 .RetiresOnSaturation(); 441 .RetiresOnSaturation();
441 EXPECT_CALL(*gl_, 442 EXPECT_CALL(*gl_,
442 GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_EXT, _)) 443 GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_EXT, _))
443 .WillOnce(SetArgumentPointee<2>(kResult)) 444 .WillOnce(SetArgumentPointee<2>(kResult))
444 .RetiresOnSaturation(); 445 .RetiresOnSaturation();
445 EXPECT_FALSE(manager_->ProcessPendingQueries(decoder_.get())); 446 EXPECT_FALSE(manager_->ProcessPendingQueries());
446 } 447 }
447 448
448 TEST_F(QueryManagerTest, ExitWithPendingQuery) { 449 TEST_F(QueryManagerTest, ExitWithPendingQuery) {
449 const GLuint kClient1Id = 1; 450 const GLuint kClient1Id = 1;
450 const GLuint kService1Id = 11; 451 const GLuint kService1Id = 11;
451 const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT; 452 const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT;
452 const uint32 kSubmitCount = 123; 453 const uint32 kSubmitCount = 123;
453 454
454 // Create Query. 455 // Create Query.
455 QueryManager::Query::Ref query( 456 QueryManager::Query::Ref query(
456 manager_->CreateQuery(kClient1Id, kService1Id)); 457 CreateQuery(kTarget, kClient1Id,
458 kSharedMemoryId, kSharedMemoryOffset, kService1Id));
457 ASSERT_TRUE(query.get() != NULL); 459 ASSERT_TRUE(query.get() != NULL);
458 query->Initialize(kTarget, kSharedMemoryId, kSharedMemoryOffset);
459 460
460 // Queue it 461 // Queue it
461 manager_->AddPendingQuery(query.get(), kSubmitCount); 462 QueueQuery(query.get(), kService1Id, kSubmitCount);
463 }
464
465 TEST_F(QueryManagerTest, ARBOcclusionQuery2) {
466 const GLuint kClient1Id = 1;
467 const GLuint kService1Id = 11;
468 const GLenum kTarget = GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT;
469 const uint32 kSubmitCount = 123;
470
471 scoped_ptr<QueryManager> manager(new QueryManager(decoder_.get(), true));
472
473 EXPECT_CALL(*gl_, GenQueriesARB(1, _))
474 .WillOnce(SetArgumentPointee<1>(kService1Id))
475 .RetiresOnSaturation();
476 QueryManager::Query* query = manager->CreateQuery(
477 kTarget, kClient1Id, kSharedMemoryId, kSharedMemoryOffset);
478 ASSERT_TRUE(query != NULL);
479
480 EXPECT_CALL(*gl_, BeginQueryARB(GL_ANY_SAMPLES_PASSED_EXT, kService1Id))
481 .Times(1)
482 .RetiresOnSaturation();
483 EXPECT_CALL(*gl_, EndQueryARB(GL_ANY_SAMPLES_PASSED_EXT))
484 .Times(1)
485 .RetiresOnSaturation();
486 EXPECT_TRUE(manager->BeginQuery(query));
487 EXPECT_TRUE(manager->EndQuery(query, kSubmitCount));
488 manager->Destroy(false);
462 } 489 }
463 490
464 } // namespace gles2 491 } // namespace gles2
465 } // namespace gpu 492 } // namespace gpu
466 493
467 494
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/query_manager.cc ('k') | third_party/khronos/GLES2/gl2ext.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698