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

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

Issue 10577037: Add GL_CHROMIUM_get_error_query (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 5 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
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/gles2_cmd_decoder.h"
10 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
10 #include "gpu/command_buffer/service/feature_info.h" 11 #include "gpu/command_buffer/service/feature_info.h"
11 #include "gpu/command_buffer/service/test_helper.h" 12 #include "gpu/command_buffer/service/test_helper.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 14
14 using ::testing::_; 15 using ::testing::_;
15 using ::testing::InSequence; 16 using ::testing::InSequence;
17 using ::testing::Return;
16 using ::testing::SetArgumentPointee; 18 using ::testing::SetArgumentPointee;
17 19
18 namespace gpu { 20 namespace gpu {
19 namespace gles2 { 21 namespace gles2 {
20 22
21 class MockDecoder : public CommonDecoder {
22 public:
23 virtual ~MockDecoder() { }
24 MOCK_METHOD3(DoCommand, error::Error(
25 unsigned int command,
26 unsigned int arg_count,
27 const void* cmd_data));
28 MOCK_CONST_METHOD1(GetCommandName, const char* (unsigned int command_id));
29 };
30
31 class QueryManagerTest : public testing::Test { 23 class QueryManagerTest : public testing::Test {
32 public: 24 public:
33 static const int32 kSharedMemoryId = 401; 25 static const int32 kSharedMemoryId = 401;
34 static const size_t kSharedBufferSize = 2048; 26 static const size_t kSharedBufferSize = 2048;
35 static const uint32 kSharedMemoryOffset = 132; 27 static const uint32 kSharedMemoryOffset = 132;
36 static const int32 kInvalidSharedMemoryId = 402; 28 static const int32 kInvalidSharedMemoryId = 402;
37 static const uint32 kInvalidSharedMemoryOffset = kSharedBufferSize + 1; 29 static const uint32 kInvalidSharedMemoryOffset = kSharedBufferSize + 1;
38 static const uint32 kInitialResult = 0xBDBDBDBDu; 30 static const uint32 kInitialResult = 0xBDBDBDBDu;
39 static const uint8 kInitialMemoryValue = 0xBDu; 31 static const uint8 kInitialMemoryValue = 0xBDu;
40 32
41 QueryManagerTest() { 33 QueryManagerTest() {
42 } 34 }
43 ~QueryManagerTest() { 35 ~QueryManagerTest() {
44 } 36 }
45 37
46 protected: 38 protected:
47 virtual void SetUp() { 39 virtual void SetUp() {
48 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); 40 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
49 ::gfx::GLInterface::SetGLInterface(gl_.get()); 41 ::gfx::GLInterface::SetGLInterface(gl_.get());
50 engine_.reset(new MockCommandBufferEngine()); 42 engine_.reset(new MockCommandBufferEngine());
51 decoder_.reset(new MockDecoder()); 43 decoder_.reset(new MockGLES2Decoder());
52 decoder_->set_engine(engine_.get()); 44 decoder_->set_engine(engine_.get());
53 TestHelper::SetupFeatureInfoInitExpectations( 45 TestHelper::SetupFeatureInfoInitExpectations(
54 gl_.get(), 46 gl_.get(),
55 "GL_EXT_occlusion_query_boolean"); 47 "GL_EXT_occlusion_query_boolean");
56 FeatureInfo::Ref feature_info(new FeatureInfo()); 48 FeatureInfo::Ref feature_info(new FeatureInfo());
57 feature_info->Initialize("*"); 49 feature_info->Initialize("*");
58 manager_.reset(new QueryManager(decoder_.get(), feature_info.get())); 50 manager_.reset(new QueryManager(decoder_.get(), feature_info.get()));
59 } 51 }
60 52
61 virtual void TearDown() { 53 virtual void TearDown() {
(...skipping 21 matching lines...) Expand all
83 .RetiresOnSaturation(); 75 .RetiresOnSaturation();
84 EXPECT_CALL(*gl_, EndQueryARB(query->target())) 76 EXPECT_CALL(*gl_, EndQueryARB(query->target()))
85 .Times(1) 77 .Times(1)
86 .RetiresOnSaturation(); 78 .RetiresOnSaturation();
87 EXPECT_TRUE(manager_->BeginQuery(query)); 79 EXPECT_TRUE(manager_->BeginQuery(query));
88 EXPECT_TRUE(manager_->EndQuery(query, submit_count)); 80 EXPECT_TRUE(manager_->EndQuery(query, submit_count));
89 } 81 }
90 82
91 // Use StrictMock to make 100% sure we know how GL will be called. 83 // Use StrictMock to make 100% sure we know how GL will be called.
92 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; 84 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
93 scoped_ptr<MockDecoder> decoder_; 85 scoped_ptr<MockGLES2Decoder> decoder_;
94 scoped_ptr<QueryManager> manager_; 86 scoped_ptr<QueryManager> manager_;
95 87
96 private: 88 private:
97 class MockCommandBufferEngine : public CommandBufferEngine { 89 class MockCommandBufferEngine : public CommandBufferEngine {
98 public: 90 public:
99 MockCommandBufferEngine() { 91 MockCommandBufferEngine() {
100 data_.reset(new int8[kSharedBufferSize]); 92 data_.reset(new int8[kSharedBufferSize]);
101 ClearSharedMemory(); 93 ClearSharedMemory();
102 valid_buffer_.ptr = data_.get(); 94 valid_buffer_.ptr = data_.get();
103 valid_buffer_.size = kSharedBufferSize; 95 valid_buffer_.size = kSharedBufferSize;
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 // Create Query. 454 // Create Query.
463 QueryManager::Query::Ref query( 455 QueryManager::Query::Ref query(
464 CreateQuery(kTarget, kClient1Id, 456 CreateQuery(kTarget, kClient1Id,
465 kSharedMemoryId, kSharedMemoryOffset, kService1Id)); 457 kSharedMemoryId, kSharedMemoryOffset, kService1Id));
466 ASSERT_TRUE(query.get() != NULL); 458 ASSERT_TRUE(query.get() != NULL);
467 459
468 // Queue it 460 // Queue it
469 QueueQuery(query.get(), kService1Id, kSubmitCount); 461 QueueQuery(query.get(), kService1Id, kSubmitCount);
470 } 462 }
471 463
464 // Test that when based on ARB_occlusion_query2 we use GL_ANY_SAMPLES_PASSED_ARB
465 // for GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT
472 TEST_F(QueryManagerTest, ARBOcclusionQuery2) { 466 TEST_F(QueryManagerTest, ARBOcclusionQuery2) {
473 const GLuint kClient1Id = 1; 467 const GLuint kClient1Id = 1;
474 const GLuint kService1Id = 11; 468 const GLuint kService1Id = 11;
475 const GLenum kTarget = GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT; 469 const GLenum kTarget = GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT;
476 const uint32 kSubmitCount = 123; 470 const uint32 kSubmitCount = 123;
477 471
478 TestHelper::SetupFeatureInfoInitExpectations( 472 TestHelper::SetupFeatureInfoInitExpectations(
479 gl_.get(), 473 gl_.get(),
480 "GL_ARB_occlusion_query2"); 474 "GL_ARB_occlusion_query2");
481 FeatureInfo::Ref feature_info(new FeatureInfo()); 475 FeatureInfo::Ref feature_info(new FeatureInfo());
(...skipping 12 matching lines...) Expand all
494 .Times(1) 488 .Times(1)
495 .RetiresOnSaturation(); 489 .RetiresOnSaturation();
496 EXPECT_CALL(*gl_, EndQueryARB(GL_ANY_SAMPLES_PASSED_EXT)) 490 EXPECT_CALL(*gl_, EndQueryARB(GL_ANY_SAMPLES_PASSED_EXT))
497 .Times(1) 491 .Times(1)
498 .RetiresOnSaturation(); 492 .RetiresOnSaturation();
499 EXPECT_TRUE(manager->BeginQuery(query)); 493 EXPECT_TRUE(manager->BeginQuery(query));
500 EXPECT_TRUE(manager->EndQuery(query, kSubmitCount)); 494 EXPECT_TRUE(manager->EndQuery(query, kSubmitCount));
501 manager->Destroy(false); 495 manager->Destroy(false);
502 } 496 }
503 497
498 // Test that when based on ARB_occlusion_query we use GL_SAMPLES_PASSED_ARB
499 // for GL_ANY_SAMPLES_PASSED_EXT
504 TEST_F(QueryManagerTest, ARBOcclusionQuery) { 500 TEST_F(QueryManagerTest, ARBOcclusionQuery) {
505 const GLuint kClient1Id = 1; 501 const GLuint kClient1Id = 1;
506 const GLuint kService1Id = 11; 502 const GLuint kService1Id = 11;
507 const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT; 503 const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT;
508 const uint32 kSubmitCount = 123; 504 const uint32 kSubmitCount = 123;
509 505
510 TestHelper::SetupFeatureInfoInitExpectations( 506 TestHelper::SetupFeatureInfoInitExpectations(
511 gl_.get(), 507 gl_.get(),
512 "GL_ARB_occlusion_query"); 508 "GL_ARB_occlusion_query");
513 FeatureInfo::Ref feature_info(new FeatureInfo()); 509 FeatureInfo::Ref feature_info(new FeatureInfo());
(...skipping 12 matching lines...) Expand all
526 .Times(1) 522 .Times(1)
527 .RetiresOnSaturation(); 523 .RetiresOnSaturation();
528 EXPECT_CALL(*gl_, EndQueryARB(GL_SAMPLES_PASSED_ARB)) 524 EXPECT_CALL(*gl_, EndQueryARB(GL_SAMPLES_PASSED_ARB))
529 .Times(1) 525 .Times(1)
530 .RetiresOnSaturation(); 526 .RetiresOnSaturation();
531 EXPECT_TRUE(manager->BeginQuery(query)); 527 EXPECT_TRUE(manager->BeginQuery(query));
532 EXPECT_TRUE(manager->EndQuery(query, kSubmitCount)); 528 EXPECT_TRUE(manager->EndQuery(query, kSubmitCount));
533 manager->Destroy(false); 529 manager->Destroy(false);
534 } 530 }
535 531
532 TEST_F(QueryManagerTest, GetErrorQuery) {
533 const GLuint kClient1Id = 1;
534 const GLenum kTarget = GL_GET_ERROR_QUERY_CHROMIUM;
535 const uint32 kSubmitCount = 123;
536
537 TestHelper::SetupFeatureInfoInitExpectations(gl_.get(), "");
538 FeatureInfo::Ref feature_info(new FeatureInfo());
539 feature_info->Initialize("*");
540 scoped_ptr<QueryManager> manager(
541 new QueryManager(decoder_.get(), feature_info.get()));
542
543 QueryManager::Query* query = manager->CreateQuery(
544 kTarget, kClient1Id, kSharedMemoryId, kSharedMemoryOffset);
545 ASSERT_TRUE(query != NULL);
546
547 // Setup shared memory like client would.
548 QuerySync* sync = decoder_->GetSharedMemoryAs<QuerySync*>(
549 kSharedMemoryId, kSharedMemoryOffset, sizeof(*sync));
550 ASSERT_TRUE(sync != NULL);
551 sync->Reset();
552
553 EXPECT_TRUE(manager->BeginQuery(query));
554
555 EXPECT_CALL(*decoder_.get(), GetGLError())
556 .WillOnce(Return(GL_INVALID_ENUM))
557 .RetiresOnSaturation();
558
559 EXPECT_TRUE(manager->EndQuery(query, kSubmitCount));
560 EXPECT_FALSE(query->pending());
561
562 EXPECT_EQ(static_cast<GLuint>(GL_INVALID_ENUM), sync->result);
563
564 manager->Destroy(false);
565 }
566
536 } // namespace gles2 567 } // namespace gles2
537 } // namespace gpu 568 } // namespace gpu
538 569
539 570
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/query_manager.cc ('k') | gpu/command_buffer/tests/gl_get_error_query_unittests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698