Index: gpu/command_buffer/service/query_manager_unittest.cc |
diff --git a/gpu/command_buffer/service/query_manager_unittest.cc b/gpu/command_buffer/service/query_manager_unittest.cc |
index 17e03ce320f8af9d68c5e816ae6de0902b31e9e2..38eea14693d0fd07718a33cf0749d04599a36562 100644 |
--- a/gpu/command_buffer/service/query_manager_unittest.cc |
+++ b/gpu/command_buffer/service/query_manager_unittest.cc |
@@ -48,7 +48,7 @@ class QueryManagerTest : public testing::Test { |
engine_.reset(new MockCommandBufferEngine()); |
decoder_.reset(new MockDecoder()); |
decoder_->set_engine(engine_.get()); |
- manager_.reset(new QueryManager()); |
+ manager_.reset(new QueryManager(decoder_.get(), false)); |
} |
virtual void TearDown() { |
@@ -60,6 +60,27 @@ class QueryManagerTest : public testing::Test { |
gl_.reset(); |
} |
+ QueryManager::Query* CreateQuery( |
+ GLenum target, GLuint client_id, int32 shm_id, uint32 shm_offset, |
+ GLuint service_id) { |
+ EXPECT_CALL(*gl_, GenQueriesARB(1, _)) |
+ .WillOnce(SetArgumentPointee<1>(service_id)) |
+ .RetiresOnSaturation(); |
+ return manager_->CreateQuery(target, client_id, shm_id, shm_offset); |
+ } |
+ |
+ void QueueQuery( |
+ QueryManager::Query* query, GLuint service_id, uint32 submit_count) { |
+ EXPECT_CALL(*gl_, BeginQueryARB(query->target(), service_id)) |
+ .Times(1) |
+ .RetiresOnSaturation(); |
+ EXPECT_CALL(*gl_, EndQueryARB(query->target())) |
+ .Times(1) |
+ .RetiresOnSaturation(); |
+ EXPECT_TRUE(manager_->BeginQuery(query)); |
+ EXPECT_TRUE(manager_->EndQuery(query, submit_count)); |
+ } |
+ |
// Use StrictMock to make 100% sure we know how GL will be called. |
scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; |
scoped_ptr<MockDecoder> decoder_; |
@@ -135,15 +156,11 @@ TEST_F(QueryManagerTest, Basic) { |
EXPECT_FALSE(manager_->HavePendingQueries()); |
// Check we can create a Query. |
QueryManager::Query::Ref query( |
- manager_->CreateQuery(kClient1Id, kService1Id)); |
+ CreateQuery(GL_ANY_SAMPLES_PASSED_EXT, kClient1Id, |
+ kSharedMemoryId, kSharedMemoryOffset, kService1Id)); |
ASSERT_TRUE(query.get() != NULL); |
// Check we can get the same Query. |
EXPECT_EQ(query.get(), manager_->GetQuery(kClient1Id)); |
- // Check we can get the client id. |
- GLuint client_id = -1; |
- EXPECT_TRUE(manager_->GetClientId(kService1Id, &client_id)); |
- EXPECT_EQ(kClient1Id, client_id); |
- EXPECT_FALSE(manager_->HavePendingQueries()); |
// Check we get nothing for a non-existent query. |
EXPECT_TRUE(manager_->GetQuery(kClient2Id) == NULL); |
// Check we can delete the query. |
@@ -161,7 +178,8 @@ TEST_F(QueryManagerTest, Destroy) { |
// Create Query. |
QueryManager::Query::Ref query( |
- manager_->CreateQuery(kClient1Id, kService1Id)); |
+ CreateQuery(GL_ANY_SAMPLES_PASSED_EXT, kClient1Id, |
+ kSharedMemoryId, kSharedMemoryOffset, kService1Id)); |
ASSERT_TRUE(query.get() != NULL); |
EXPECT_CALL(*gl_, DeleteQueriesARB(1, ::testing::Pointee(kService1Id))) |
.Times(1) |
@@ -176,37 +194,20 @@ TEST_F(QueryManagerTest, Destroy) { |
TEST_F(QueryManagerTest, QueryBasic) { |
const GLuint kClient1Id = 1; |
const GLuint kService1Id = 11; |
+ const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT; |
// Create Query. |
QueryManager::Query::Ref query( |
- manager_->CreateQuery(kClient1Id, kService1Id)); |
+ CreateQuery(kTarget, kClient1Id, |
+ kSharedMemoryId, kSharedMemoryOffset, kService1Id)); |
ASSERT_TRUE(query.get() != NULL); |
- EXPECT_FALSE(query->IsValid()); |
+ EXPECT_TRUE(query->IsValid()); |
EXPECT_FALSE(query->IsDeleted()); |
- EXPECT_FALSE(query->IsInitialized()); |
EXPECT_FALSE(query->pending()); |
-} |
- |
-TEST_F(QueryManagerTest, QueryInitialize) { |
- const GLuint kClient1Id = 1; |
- const GLuint kService1Id = 11; |
- const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT; |
- |
- // Create Query. |
- QueryManager::Query::Ref query( |
- manager_->CreateQuery(kClient1Id, kService1Id)); |
- ASSERT_TRUE(query.get() != NULL); |
- |
- query->Initialize(kTarget, kSharedMemoryId, kSharedMemoryOffset); |
EXPECT_EQ(kTarget, query->target()); |
EXPECT_EQ(kSharedMemoryId, query->shm_id()); |
EXPECT_EQ(kSharedMemoryOffset, query->shm_offset()); |
- |
- EXPECT_TRUE(query->IsValid()); |
- EXPECT_FALSE(query->IsDeleted()); |
- EXPECT_TRUE(query->IsInitialized()); |
- EXPECT_FALSE(query->pending()); |
} |
TEST_F(QueryManagerTest, ProcessPendingQuery) { |
@@ -217,13 +218,13 @@ TEST_F(QueryManagerTest, ProcessPendingQuery) { |
const GLuint kResult = 456; |
// Check nothing happens if there are no pending queries. |
- EXPECT_TRUE(manager_->ProcessPendingQueries(decoder_.get())); |
+ EXPECT_TRUE(manager_->ProcessPendingQueries()); |
// Create Query. |
QueryManager::Query::Ref query( |
- manager_->CreateQuery(kClient1Id, kService1Id)); |
+ CreateQuery(kTarget, kClient1Id, |
+ kSharedMemoryId, kSharedMemoryOffset, kService1Id)); |
ASSERT_TRUE(query.get() != NULL); |
- query->Initialize(kTarget, kSharedMemoryId, kSharedMemoryOffset); |
// Setup shared memory like client would. |
QuerySync* sync = decoder_->GetSharedMemoryAs<QuerySync*>( |
@@ -232,7 +233,7 @@ TEST_F(QueryManagerTest, ProcessPendingQuery) { |
sync->Reset(); |
// Queue it |
- manager_->AddPendingQuery(query.get(), kSubmitCount); |
+ QueueQuery(query.get(), kService1Id, kSubmitCount); |
EXPECT_TRUE(query->pending()); |
EXPECT_TRUE(manager_->HavePendingQueries()); |
@@ -242,7 +243,7 @@ TEST_F(QueryManagerTest, ProcessPendingQuery) { |
GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_AVAILABLE_EXT, _)) |
.WillOnce(SetArgumentPointee<2>(0)) |
.RetiresOnSaturation(); |
- EXPECT_TRUE(manager_->ProcessPendingQueries(decoder_.get())); |
+ EXPECT_TRUE(manager_->ProcessPendingQueries()); |
EXPECT_TRUE(query->pending()); |
EXPECT_EQ(0u, sync->process_count); |
EXPECT_EQ(0u, sync->result); |
@@ -257,7 +258,7 @@ TEST_F(QueryManagerTest, ProcessPendingQuery) { |
GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_EXT, _)) |
.WillOnce(SetArgumentPointee<2>(kResult)) |
.RetiresOnSaturation(); |
- EXPECT_TRUE(manager_->ProcessPendingQueries(decoder_.get())); |
+ EXPECT_TRUE(manager_->ProcessPendingQueries()); |
EXPECT_FALSE(query->pending()); |
EXPECT_EQ(kSubmitCount, sync->process_count); |
EXPECT_EQ(kResult, sync->result); |
@@ -265,7 +266,7 @@ TEST_F(QueryManagerTest, ProcessPendingQuery) { |
// Process with no queries. |
// Expect no GL commands/ |
- EXPECT_TRUE(manager_->ProcessPendingQueries(decoder_.get())); |
+ EXPECT_TRUE(manager_->ProcessPendingQueries()); |
} |
TEST_F(QueryManagerTest, ProcessPendingQueries) { |
@@ -283,39 +284,39 @@ TEST_F(QueryManagerTest, ProcessPendingQueries) { |
const GLuint kResult2 = 457; |
const GLuint kResult3 = 458; |
+ // Setup shared memory like client would. |
+ QuerySync* sync1 = decoder_->GetSharedMemoryAs<QuerySync*>( |
+ kSharedMemoryId, kSharedMemoryOffset, sizeof(*sync1) * 3); |
+ ASSERT_TRUE(sync1 != NULL); |
+ QuerySync* sync2 = sync1 + 1; |
+ QuerySync* sync3 = sync2 + 1; |
+ |
// Create Queries. |
QueryManager::Query::Ref query1( |
- manager_->CreateQuery(kClient1Id, kService1Id)); |
+ CreateQuery(kTarget, kClient1Id, |
+ kSharedMemoryId, kSharedMemoryOffset + sizeof(*sync1) * 0, |
+ kService1Id)); |
QueryManager::Query::Ref query2( |
- manager_->CreateQuery(kClient2Id, kService2Id)); |
+ CreateQuery(kTarget, kClient2Id, |
+ kSharedMemoryId, kSharedMemoryOffset + sizeof(*sync1) * 1, |
+ kService2Id)); |
QueryManager::Query::Ref query3( |
- manager_->CreateQuery(kClient3Id, kService3Id)); |
+ CreateQuery(kTarget, kClient3Id, |
+ kSharedMemoryId, kSharedMemoryOffset + sizeof(*sync1) * 2, |
+ kService3Id)); |
ASSERT_TRUE(query1.get() != NULL); |
ASSERT_TRUE(query2.get() != NULL); |
ASSERT_TRUE(query3.get() != NULL); |
EXPECT_FALSE(manager_->HavePendingQueries()); |
- // Setup shared memory like client would. |
- QuerySync* sync1 = decoder_->GetSharedMemoryAs<QuerySync*>( |
- kSharedMemoryId, kSharedMemoryOffset, sizeof(*sync1) * 3); |
- ASSERT_TRUE(sync1 != NULL); |
- QuerySync* sync2 = sync1 + 1; |
- QuerySync* sync3 = sync2 + 1; |
- |
sync1->Reset(); |
sync2->Reset(); |
sync3->Reset(); |
- query1->Initialize(kTarget, kSharedMemoryId, kSharedMemoryOffset); |
- query2->Initialize(kTarget, kSharedMemoryId, |
- kSharedMemoryOffset + sizeof(*sync1)); |
- query3->Initialize(kTarget, kSharedMemoryId, |
- kSharedMemoryOffset + sizeof(*sync1) * 2); |
- |
// Queue them |
- manager_->AddPendingQuery(query1.get(), kSubmitCount1); |
- manager_->AddPendingQuery(query2.get(), kSubmitCount2); |
- manager_->AddPendingQuery(query3.get(), kSubmitCount3); |
+ QueueQuery(query1.get(), kService1Id, kSubmitCount1); |
+ QueueQuery(query2.get(), kService2Id, kSubmitCount2); |
+ QueueQuery(query3.get(), kService3Id, kSubmitCount3); |
EXPECT_TRUE(query1->pending()); |
EXPECT_TRUE(query2->pending()); |
EXPECT_TRUE(query3->pending()); |
@@ -345,7 +346,7 @@ TEST_F(QueryManagerTest, ProcessPendingQueries) { |
GetQueryObjectuivARB(kService3Id, GL_QUERY_RESULT_AVAILABLE_EXT, _)) |
.WillOnce(SetArgumentPointee<2>(0)) |
.RetiresOnSaturation(); |
- EXPECT_TRUE(manager_->ProcessPendingQueries(decoder_.get())); |
+ EXPECT_TRUE(manager_->ProcessPendingQueries()); |
} |
EXPECT_FALSE(query1->pending()); |
EXPECT_FALSE(query2->pending()); |
@@ -364,7 +365,7 @@ TEST_F(QueryManagerTest, ProcessPendingQueries) { |
GetQueryObjectuivARB(kService3Id, GL_QUERY_RESULT_AVAILABLE_EXT, _)) |
.WillOnce(SetArgumentPointee<2>(0)) |
.RetiresOnSaturation(); |
- EXPECT_TRUE(manager_->ProcessPendingQueries(decoder_.get())); |
+ EXPECT_TRUE(manager_->ProcessPendingQueries()); |
EXPECT_TRUE(query3->pending()); |
EXPECT_EQ(0u, sync3->process_count); |
EXPECT_EQ(0u, sync3->result); |
@@ -380,7 +381,7 @@ TEST_F(QueryManagerTest, ProcessPendingQueries) { |
GetQueryObjectuivARB(kService3Id, GL_QUERY_RESULT_EXT, _)) |
.WillOnce(SetArgumentPointee<2>(kResult3)) |
.RetiresOnSaturation(); |
- EXPECT_TRUE(manager_->ProcessPendingQueries(decoder_.get())); |
+ EXPECT_TRUE(manager_->ProcessPendingQueries()); |
EXPECT_FALSE(query3->pending()); |
EXPECT_EQ(kSubmitCount3, sync3->process_count); |
EXPECT_EQ(kResult3, sync3->result); |
@@ -396,12 +397,12 @@ TEST_F(QueryManagerTest, ProcessPendingBadSharedMemoryId) { |
// Create Query. |
QueryManager::Query::Ref query( |
- manager_->CreateQuery(kClient1Id, kService1Id)); |
+ CreateQuery(kTarget, kClient1Id, |
+ kInvalidSharedMemoryId, kSharedMemoryOffset, kService1Id)); |
ASSERT_TRUE(query.get() != NULL); |
- query->Initialize(kTarget, kInvalidSharedMemoryId, kSharedMemoryOffset); |
// Queue it |
- manager_->AddPendingQuery(query.get(), kSubmitCount); |
+ QueueQuery(query.get(), kService1Id, kSubmitCount); |
// Process with return available. |
// Expect 2 GL commands. |
@@ -413,7 +414,7 @@ TEST_F(QueryManagerTest, ProcessPendingBadSharedMemoryId) { |
GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_EXT, _)) |
.WillOnce(SetArgumentPointee<2>(kResult)) |
.RetiresOnSaturation(); |
- EXPECT_FALSE(manager_->ProcessPendingQueries(decoder_.get())); |
+ EXPECT_FALSE(manager_->ProcessPendingQueries()); |
} |
TEST_F(QueryManagerTest, ProcessPendingBadSharedMemoryOffset) { |
@@ -425,12 +426,12 @@ TEST_F(QueryManagerTest, ProcessPendingBadSharedMemoryOffset) { |
// Create Query. |
QueryManager::Query::Ref query( |
- manager_->CreateQuery(kClient1Id, kService1Id)); |
+ CreateQuery(kTarget, kClient1Id, |
+ kSharedMemoryId, kInvalidSharedMemoryOffset, kService1Id)); |
ASSERT_TRUE(query.get() != NULL); |
- query->Initialize(kTarget, kSharedMemoryId, kInvalidSharedMemoryOffset); |
// Queue it |
- manager_->AddPendingQuery(query.get(), kSubmitCount); |
+ QueueQuery(query.get(), kService1Id, kSubmitCount); |
// Process with return available. |
// Expect 2 GL commands. |
@@ -442,7 +443,7 @@ TEST_F(QueryManagerTest, ProcessPendingBadSharedMemoryOffset) { |
GetQueryObjectuivARB(kService1Id, GL_QUERY_RESULT_EXT, _)) |
.WillOnce(SetArgumentPointee<2>(kResult)) |
.RetiresOnSaturation(); |
- EXPECT_FALSE(manager_->ProcessPendingQueries(decoder_.get())); |
+ EXPECT_FALSE(manager_->ProcessPendingQueries()); |
} |
TEST_F(QueryManagerTest, ExitWithPendingQuery) { |
@@ -453,12 +454,38 @@ TEST_F(QueryManagerTest, ExitWithPendingQuery) { |
// Create Query. |
QueryManager::Query::Ref query( |
- manager_->CreateQuery(kClient1Id, kService1Id)); |
+ CreateQuery(kTarget, kClient1Id, |
+ kSharedMemoryId, kSharedMemoryOffset, kService1Id)); |
ASSERT_TRUE(query.get() != NULL); |
- query->Initialize(kTarget, kSharedMemoryId, kSharedMemoryOffset); |
// Queue it |
- manager_->AddPendingQuery(query.get(), kSubmitCount); |
+ QueueQuery(query.get(), kService1Id, kSubmitCount); |
+} |
+ |
+TEST_F(QueryManagerTest, ARBOcclusionQuery2) { |
+ const GLuint kClient1Id = 1; |
+ const GLuint kService1Id = 11; |
+ const GLenum kTarget = GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT; |
+ const uint32 kSubmitCount = 123; |
+ |
+ scoped_ptr<QueryManager> manager(new QueryManager(decoder_.get(), true)); |
+ |
+ EXPECT_CALL(*gl_, GenQueriesARB(1, _)) |
+ .WillOnce(SetArgumentPointee<1>(kService1Id)) |
+ .RetiresOnSaturation(); |
+ QueryManager::Query* query = manager->CreateQuery( |
+ kTarget, kClient1Id, kSharedMemoryId, kSharedMemoryOffset); |
+ ASSERT_TRUE(query != NULL); |
+ |
+ EXPECT_CALL(*gl_, BeginQueryARB(GL_ANY_SAMPLES_PASSED_EXT, kService1Id)) |
+ .Times(1) |
+ .RetiresOnSaturation(); |
+ EXPECT_CALL(*gl_, EndQueryARB(GL_ANY_SAMPLES_PASSED_EXT)) |
+ .Times(1) |
+ .RetiresOnSaturation(); |
+ EXPECT_TRUE(manager->BeginQuery(query)); |
+ EXPECT_TRUE(manager->EndQuery(query, kSubmitCount)); |
+ manager->Destroy(false); |
} |
} // namespace gles2 |