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

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

Issue 332303002: gpu: Add base class for gpu service tests (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: update gpu/build.GN Created 6 years, 6 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/program_manager.h" 5 #include "gpu/command_buffer/service/program_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
11 #include "base/strings/string_util.h" 11 #include "base/strings/string_util.h"
12 #include "gpu/command_buffer/common/gles2_cmd_format.h" 12 #include "gpu/command_buffer/common/gles2_cmd_format.h"
13 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 13 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
14 #include "gpu/command_buffer/service/common_decoder.h" 14 #include "gpu/command_buffer/service/common_decoder.h"
15 #include "gpu/command_buffer/service/feature_info.h" 15 #include "gpu/command_buffer/service/feature_info.h"
16 #include "gpu/command_buffer/service/gpu_service_test.h"
16 #include "gpu/command_buffer/service/mocks.h" 17 #include "gpu/command_buffer/service/mocks.h"
17 #include "gpu/command_buffer/service/shader_manager.h" 18 #include "gpu/command_buffer/service/shader_manager.h"
18 #include "gpu/command_buffer/service/test_helper.h" 19 #include "gpu/command_buffer/service/test_helper.h"
19 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
20 #include "ui/gl/gl_mock.h" 21 #include "ui/gl/gl_mock.h"
21 22
22 using ::gfx::MockGLInterface;
23 using ::testing::_; 23 using ::testing::_;
24 using ::testing::DoAll; 24 using ::testing::DoAll;
25 using ::testing::InSequence; 25 using ::testing::InSequence;
26 using ::testing::MatcherCast; 26 using ::testing::MatcherCast;
27 using ::testing::Pointee; 27 using ::testing::Pointee;
28 using ::testing::Return; 28 using ::testing::Return;
29 using ::testing::ReturnRef; 29 using ::testing::ReturnRef;
30 using ::testing::SetArrayArgument; 30 using ::testing::SetArrayArgument;
31 using ::testing::SetArgumentPointee; 31 using ::testing::SetArgumentPointee;
32 using ::testing::StrEq; 32 using ::testing::StrEq;
33 using ::testing::StrictMock;
34 33
35 namespace gpu { 34 namespace gpu {
36 namespace gles2 { 35 namespace gles2 {
37 36
38 namespace { 37 namespace {
39 const uint32 kMaxVaryingVectors = 8; 38 const uint32 kMaxVaryingVectors = 8;
40 39
41 void ShaderCacheCb(const std::string& key, const std::string& shader) {} 40 void ShaderCacheCb(const std::string& key, const std::string& shader) {}
42 } // namespace anonymous 41 } // namespace anonymous
43 42
44 class ProgramManagerTest : public testing::Test { 43 class ProgramManagerTest : public GpuServiceTest {
45 public: 44 public:
46 ProgramManagerTest() : manager_(NULL, kMaxVaryingVectors) { } 45 ProgramManagerTest() : manager_(NULL, kMaxVaryingVectors) { }
47 virtual ~ProgramManagerTest() { 46 virtual ~ProgramManagerTest() {
48 manager_.Destroy(false); 47 manager_.Destroy(false);
49 } 48 }
50 49
51 protected: 50 protected:
52 virtual void SetUp() {
53 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
54 ::gfx::MockGLInterface::SetGLInterface(gl_.get());
55 }
56
57 virtual void TearDown() {
58 ::gfx::MockGLInterface::SetGLInterface(NULL);
59 gl_.reset();
60 }
61
62 // Use StrictMock to make 100% sure we know how GL will be called.
63 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
64 ProgramManager manager_; 51 ProgramManager manager_;
65 }; 52 };
66 53
67 TEST_F(ProgramManagerTest, Basic) { 54 TEST_F(ProgramManagerTest, Basic) {
68 const GLuint kClient1Id = 1; 55 const GLuint kClient1Id = 1;
69 const GLuint kService1Id = 11; 56 const GLuint kService1Id = 11;
70 const GLuint kClient2Id = 2; 57 const GLuint kClient2Id = 2;
71 // Check we can create program. 58 // Check we can create program.
72 manager_.CreateProgram(kClient1Id, kService1Id); 59 manager_.CreateProgram(kClient1Id, kService1Id);
73 // Check program got created. 60 // Check program got created.
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 kClient1Id, kService1Id); 118 kClient1Id, kService1Id);
132 ASSERT_TRUE(program1); 119 ASSERT_TRUE(program1);
133 EXPECT_EQ(kService1Id, program1->service_id()); 120 EXPECT_EQ(kService1Id, program1->service_id());
134 EXPECT_FALSE(program1->InUse()); 121 EXPECT_FALSE(program1->InUse());
135 EXPECT_FALSE(program1->IsValid()); 122 EXPECT_FALSE(program1->IsValid());
136 EXPECT_FALSE(program1->IsDeleted()); 123 EXPECT_FALSE(program1->IsDeleted());
137 EXPECT_FALSE(program1->CanLink()); 124 EXPECT_FALSE(program1->CanLink());
138 EXPECT_TRUE(program1->log_info() == NULL); 125 EXPECT_TRUE(program1->log_info() == NULL);
139 } 126 }
140 127
141 class ProgramManagerWithShaderTest : public testing::Test { 128 class ProgramManagerWithShaderTest : public GpuServiceTest {
142 public: 129 public:
143 ProgramManagerWithShaderTest() 130 ProgramManagerWithShaderTest()
144 : manager_(NULL, kMaxVaryingVectors), program_(NULL) { 131 : manager_(NULL, kMaxVaryingVectors), program_(NULL) {
145 } 132 }
146 133
147 virtual ~ProgramManagerWithShaderTest() { 134 virtual ~ProgramManagerWithShaderTest() {
148 manager_.Destroy(false); 135 manager_.Destroy(false);
149 shader_manager_.Destroy(false); 136 shader_manager_.Destroy(false);
150 } 137 }
151 138
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 typedef struct { 208 typedef struct {
222 int type; 209 int type;
223 int size; 210 int size;
224 int precision; 211 int precision;
225 int static_use; 212 int static_use;
226 std::string name; 213 std::string name;
227 VarCategory category; 214 VarCategory category;
228 } VarInfo; 215 } VarInfo;
229 216
230 virtual void SetUp() { 217 virtual void SetUp() {
231 gl_.reset(new StrictMock<gfx::MockGLInterface>()); 218 GpuServiceTest::SetUp();
232 ::gfx::MockGLInterface::SetGLInterface(gl_.get());
233 219
234 SetupDefaultShaderExpectations(); 220 SetupDefaultShaderExpectations();
235 221
236 Shader* vertex_shader = shader_manager_.CreateShader( 222 Shader* vertex_shader = shader_manager_.CreateShader(
237 kVertexShaderClientId, kVertexShaderServiceId, GL_VERTEX_SHADER); 223 kVertexShaderClientId, kVertexShaderServiceId, GL_VERTEX_SHADER);
238 Shader* fragment_shader = 224 Shader* fragment_shader =
239 shader_manager_.CreateShader( 225 shader_manager_.CreateShader(
240 kFragmentShaderClientId, kFragmentShaderServiceId, 226 kFragmentShaderClientId, kFragmentShaderServiceId,
241 GL_FRAGMENT_SHADER); 227 GL_FRAGMENT_SHADER);
242 ASSERT_TRUE(vertex_shader != NULL); 228 ASSERT_TRUE(vertex_shader != NULL);
(...skipping 22 matching lines...) Expand all
265 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms, 251 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms,
266 kServiceProgramId); 252 kServiceProgramId);
267 } 253 }
268 254
269 void SetupExpectationsForClearingUniforms( 255 void SetupExpectationsForClearingUniforms(
270 UniformInfo* uniforms, size_t num_uniforms) { 256 UniformInfo* uniforms, size_t num_uniforms) {
271 TestHelper::SetupExpectationsForClearingUniforms( 257 TestHelper::SetupExpectationsForClearingUniforms(
272 gl_.get(), uniforms, num_uniforms); 258 gl_.get(), uniforms, num_uniforms);
273 } 259 }
274 260
275 virtual void TearDown() {
276 ::gfx::MockGLInterface::SetGLInterface(NULL);
277 }
278
279 // Return true if link status matches expected_link_status 261 // Return true if link status matches expected_link_status
280 bool LinkAsExpected(Program* program, 262 bool LinkAsExpected(Program* program,
281 bool expected_link_status) { 263 bool expected_link_status) {
282 GLuint service_id = program->service_id(); 264 GLuint service_id = program->service_id();
283 if (expected_link_status) { 265 if (expected_link_status) {
284 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms, 266 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms,
285 service_id); 267 service_id);
286 } 268 }
287 program->Link(NULL, NULL, NULL, Program::kCountOnlyStaticallyUsed, 269 program->Link(NULL, NULL, NULL, Program::kCountOnlyStaticallyUsed,
288 base::Bind(&ShaderCacheCb)); 270 base::Bind(&ShaderCacheCb));
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 manager_.CreateProgram(kClientProgramId, kServiceProgramId); 373 manager_.CreateProgram(kClientProgramId, kServiceProgramId);
392 EXPECT_TRUE(program != NULL); 374 EXPECT_TRUE(program != NULL);
393 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader)); 375 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader));
394 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader)); 376 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader));
395 return program; 377 return program;
396 } 378 }
397 379
398 static AttribInfo kAttribs[]; 380 static AttribInfo kAttribs[];
399 static UniformInfo kUniforms[]; 381 static UniformInfo kUniforms[];
400 382
401 scoped_ptr<StrictMock<gfx::MockGLInterface> > gl_;
402
403 ProgramManager manager_; 383 ProgramManager manager_;
404 Program* program_; 384 Program* program_;
405 ShaderManager shader_manager_; 385 ShaderManager shader_manager_;
406 }; 386 };
407 387
408 ProgramManagerWithShaderTest::AttribInfo 388 ProgramManagerWithShaderTest::AttribInfo
409 ProgramManagerWithShaderTest::kAttribs[] = { 389 ProgramManagerWithShaderTest::kAttribs[] = {
410 { kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, }, 390 { kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, },
411 { kAttrib2Name, kAttrib2Size, kAttrib2Type, kAttrib2Location, }, 391 { kAttrib2Name, kAttrib2Size, kAttrib2Type, kAttrib2Location, },
412 { kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location, }, 392 { kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location, },
(...skipping 1149 matching lines...) Expand 10 before | Expand all | Expand 10 after
1562 base::Bind(&ShaderCacheCb)); 1542 base::Bind(&ShaderCacheCb));
1563 1543
1564 EXPECT_EQ(kUniform1DesiredLocation, 1544 EXPECT_EQ(kUniform1DesiredLocation,
1565 program->GetUniformFakeLocation(kUniform1Name)); 1545 program->GetUniformFakeLocation(kUniform1Name));
1566 EXPECT_EQ(kUniform3DesiredLocation, 1546 EXPECT_EQ(kUniform3DesiredLocation,
1567 program->GetUniformFakeLocation(kUniform3BadName)); 1547 program->GetUniformFakeLocation(kUniform3BadName));
1568 EXPECT_EQ(kUniform3DesiredLocation, 1548 EXPECT_EQ(kUniform3DesiredLocation,
1569 program->GetUniformFakeLocation(kUniform3GoodName)); 1549 program->GetUniformFakeLocation(kUniform3GoodName));
1570 } 1550 }
1571 1551
1572 class ProgramManagerWithCacheTest : public testing::Test { 1552 class ProgramManagerWithCacheTest : public GpuServiceTest {
1573 public: 1553 public:
1574 static const GLuint kClientProgramId = 1; 1554 static const GLuint kClientProgramId = 1;
1575 static const GLuint kServiceProgramId = 10; 1555 static const GLuint kServiceProgramId = 10;
1576 static const GLuint kVertexShaderClientId = 2; 1556 static const GLuint kVertexShaderClientId = 2;
1577 static const GLuint kFragmentShaderClientId = 20; 1557 static const GLuint kFragmentShaderClientId = 20;
1578 static const GLuint kVertexShaderServiceId = 3; 1558 static const GLuint kVertexShaderServiceId = 3;
1579 static const GLuint kFragmentShaderServiceId = 30; 1559 static const GLuint kFragmentShaderServiceId = 30;
1580 1560
1581 ProgramManagerWithCacheTest() 1561 ProgramManagerWithCacheTest()
1582 : cache_(new MockProgramCache()), 1562 : cache_(new MockProgramCache()),
1583 manager_(cache_.get(), kMaxVaryingVectors), 1563 manager_(cache_.get(), kMaxVaryingVectors),
1584 vertex_shader_(NULL), 1564 vertex_shader_(NULL),
1585 fragment_shader_(NULL), 1565 fragment_shader_(NULL),
1586 program_(NULL) { 1566 program_(NULL) {
1587 } 1567 }
1588 virtual ~ProgramManagerWithCacheTest() { 1568 virtual ~ProgramManagerWithCacheTest() {
1589 manager_.Destroy(false); 1569 manager_.Destroy(false);
1590 shader_manager_.Destroy(false); 1570 shader_manager_.Destroy(false);
1591 } 1571 }
1592 1572
1593 protected: 1573 protected:
1594 virtual void SetUp() { 1574 virtual void SetUp() {
1595 gl_.reset(new StrictMock<gfx::MockGLInterface>()); 1575 GpuServiceTest::SetUp();
1596 ::gfx::MockGLInterface::SetGLInterface(gl_.get());
1597 1576
1598 vertex_shader_ = shader_manager_.CreateShader( 1577 vertex_shader_ = shader_manager_.CreateShader(
1599 kVertexShaderClientId, kVertexShaderServiceId, GL_VERTEX_SHADER); 1578 kVertexShaderClientId, kVertexShaderServiceId, GL_VERTEX_SHADER);
1600 fragment_shader_ = shader_manager_.CreateShader( 1579 fragment_shader_ = shader_manager_.CreateShader(
1601 kFragmentShaderClientId, kFragmentShaderServiceId, GL_FRAGMENT_SHADER); 1580 kFragmentShaderClientId, kFragmentShaderServiceId, GL_FRAGMENT_SHADER);
1602 ASSERT_TRUE(vertex_shader_ != NULL); 1581 ASSERT_TRUE(vertex_shader_ != NULL);
1603 ASSERT_TRUE(fragment_shader_ != NULL); 1582 ASSERT_TRUE(fragment_shader_ != NULL);
1604 vertex_shader_->UpdateSource("lka asjf bjajsdfj"); 1583 vertex_shader_->UpdateSource("lka asjf bjajsdfj");
1605 fragment_shader_->UpdateSource("lka asjf a fasgag 3rdsf3 bjajsdfj"); 1584 fragment_shader_->UpdateSource("lka asjf a fasgag 3rdsf3 bjajsdfj");
1606 1585
1607 program_ = manager_.CreateProgram( 1586 program_ = manager_.CreateProgram(
1608 kClientProgramId, kServiceProgramId); 1587 kClientProgramId, kServiceProgramId);
1609 ASSERT_TRUE(program_ != NULL); 1588 ASSERT_TRUE(program_ != NULL);
1610 1589
1611 program_->AttachShader(&shader_manager_, vertex_shader_); 1590 program_->AttachShader(&shader_manager_, vertex_shader_);
1612 program_->AttachShader(&shader_manager_, fragment_shader_); 1591 program_->AttachShader(&shader_manager_, fragment_shader_);
1613 } 1592 }
1614 1593
1615 virtual void TearDown() {
1616 ::gfx::MockGLInterface::SetGLInterface(NULL);
1617 }
1618
1619 void SetShadersCompiled() { 1594 void SetShadersCompiled() {
1620 vertex_shader_->SetStatus(true, NULL, NULL); 1595 vertex_shader_->SetStatus(true, NULL, NULL);
1621 fragment_shader_->SetStatus(true, NULL, NULL); 1596 fragment_shader_->SetStatus(true, NULL, NULL);
1622 } 1597 }
1623 1598
1624 void SetProgramCached() { 1599 void SetProgramCached() {
1625 cache_->LinkedProgramCacheSuccess( 1600 cache_->LinkedProgramCacheSuccess(
1626 vertex_shader_->source()->c_str(), 1601 vertex_shader_->source()->c_str(),
1627 NULL, 1602 NULL,
1628 fragment_shader_->source()->c_str(), 1603 fragment_shader_->source()->c_str(),
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
1750 ShaderSource(shader_id, 1, Pointee(src), NULL)).Times(1); 1725 ShaderSource(shader_id, 1, Pointee(src), NULL)).Times(1);
1751 EXPECT_CALL(*gl_.get(), CompileShader(shader_id)).Times(1); 1726 EXPECT_CALL(*gl_.get(), CompileShader(shader_id)).Times(1);
1752 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_COMPILE_STATUS, _)) 1727 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_COMPILE_STATUS, _))
1753 .WillOnce(SetArgumentPointee<2>(GL_FALSE)); 1728 .WillOnce(SetArgumentPointee<2>(GL_FALSE));
1754 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_INFO_LOG_LENGTH, _)) 1729 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_INFO_LOG_LENGTH, _))
1755 .WillOnce(SetArgumentPointee<2>(0)); 1730 .WillOnce(SetArgumentPointee<2>(0));
1756 EXPECT_CALL(*gl_.get(), GetShaderInfoLog(shader_id, 0, _, _)) 1731 EXPECT_CALL(*gl_.get(), GetShaderInfoLog(shader_id, 0, _, _))
1757 .Times(1); 1732 .Times(1);
1758 } 1733 }
1759 1734
1760 scoped_ptr<StrictMock<gfx::MockGLInterface> > gl_;
1761
1762 scoped_ptr<MockProgramCache> cache_; 1735 scoped_ptr<MockProgramCache> cache_;
1763 ProgramManager manager_; 1736 ProgramManager manager_;
1764 1737
1765 Shader* vertex_shader_; 1738 Shader* vertex_shader_;
1766 Shader* fragment_shader_; 1739 Shader* fragment_shader_;
1767 Program* program_; 1740 Program* program_;
1768 ShaderManager shader_manager_; 1741 ShaderManager shader_manager_;
1769 }; 1742 };
1770 1743
1771 // GCC requires these declarations, but MSVC requires they not be present 1744 // GCC requires these declarations, but MSVC requires they not be present
(...skipping 23 matching lines...) Expand all
1795 SetExpectationsForProgramLoad(ProgramCache::PROGRAM_LOAD_SUCCESS); 1768 SetExpectationsForProgramLoad(ProgramCache::PROGRAM_LOAD_SUCCESS);
1796 SetExpectationsForNotCachingProgram(); 1769 SetExpectationsForNotCachingProgram();
1797 SetExpectationsForProgramLoadSuccess(); 1770 SetExpectationsForProgramLoadSuccess();
1798 1771
1799 EXPECT_TRUE(program_->Link(NULL, NULL, NULL, 1772 EXPECT_TRUE(program_->Link(NULL, NULL, NULL,
1800 Program::kCountOnlyStaticallyUsed, base::Bind(&ShaderCacheCb))); 1773 Program::kCountOnlyStaticallyUsed, base::Bind(&ShaderCacheCb)));
1801 } 1774 }
1802 1775
1803 } // namespace gles2 1776 } // namespace gles2
1804 } // namespace gpu 1777 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/memory_program_cache_unittest.cc ('k') | gpu/command_buffer/service/query_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698