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

Unified 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 side-by-side diff with in-line comments
Download patch
« 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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« 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