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

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

Issue 10534173: GPU Program Caching (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Patch Created 8 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
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/string_number_conversions.h" 10 #include "base/string_number_conversions.h"
(...skipping 17 matching lines...) Expand all
28 using ::testing::SetArrayArgument; 28 using ::testing::SetArrayArgument;
29 using ::testing::SetArgumentPointee; 29 using ::testing::SetArgumentPointee;
30 using ::testing::StrEq; 30 using ::testing::StrEq;
31 using ::testing::StrictMock; 31 using ::testing::StrictMock;
32 32
33 namespace gpu { 33 namespace gpu {
34 namespace gles2 { 34 namespace gles2 {
35 35
36 class ProgramManagerTest : public testing::Test { 36 class ProgramManagerTest : public testing::Test {
37 public: 37 public:
38 ProgramManagerTest() { } 38 ProgramManagerTest() : manager_(NULL) { }
39 ~ProgramManagerTest() { 39 ~ProgramManagerTest() {
40 manager_.Destroy(false); 40 manager_.Destroy(false);
41 } 41 }
42 42
43 protected: 43 protected:
44 virtual void SetUp() { 44 virtual void SetUp() {
45 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>()); 45 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
46 ::gfx::GLInterface::SetGLInterface(gl_.get()); 46 ::gfx::GLInterface::SetGLInterface(gl_.get());
47 } 47 }
48 48
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 EXPECT_FALSE(info1->InUse()); 127 EXPECT_FALSE(info1->InUse());
128 EXPECT_FALSE(info1->IsValid()); 128 EXPECT_FALSE(info1->IsValid());
129 EXPECT_FALSE(info1->IsDeleted()); 129 EXPECT_FALSE(info1->IsDeleted());
130 EXPECT_FALSE(info1->CanLink()); 130 EXPECT_FALSE(info1->CanLink());
131 EXPECT_TRUE(info1->log_info() == NULL); 131 EXPECT_TRUE(info1->log_info() == NULL);
132 } 132 }
133 133
134 class ProgramManagerWithShaderTest : public testing::Test { 134 class ProgramManagerWithShaderTest : public testing::Test {
135 public: 135 public:
136 ProgramManagerWithShaderTest() 136 ProgramManagerWithShaderTest()
137 : program_info_(NULL) { 137 : manager_(NULL), program_info_(NULL) {
138 } 138 }
139 139
140 ~ProgramManagerWithShaderTest() { 140 ~ProgramManagerWithShaderTest() {
141 manager_.Destroy(false); 141 manager_.Destroy(false);
142 shader_manager_.Destroy(false); 142 shader_manager_.Destroy(false);
143 } 143 }
144 144
145 static const GLint kNumVertexAttribs = 16; 145 static const GLint kNumVertexAttribs = 16;
146 146
147 static const GLuint kClientProgramId = 123; 147 static const GLuint kClientProgramId = 123;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 ASSERT_TRUE(fragment_shader != NULL); 208 ASSERT_TRUE(fragment_shader != NULL);
209 vertex_shader->SetStatus(true, NULL, NULL); 209 vertex_shader->SetStatus(true, NULL, NULL);
210 fragment_shader->SetStatus(true, NULL, NULL); 210 fragment_shader->SetStatus(true, NULL, NULL);
211 211
212 program_info_ = manager_.CreateProgramInfo( 212 program_info_ = manager_.CreateProgramInfo(
213 kClientProgramId, kServiceProgramId); 213 kClientProgramId, kServiceProgramId);
214 ASSERT_TRUE(program_info_ != NULL); 214 ASSERT_TRUE(program_info_ != NULL);
215 215
216 program_info_->AttachShader(&shader_manager_, vertex_shader); 216 program_info_->AttachShader(&shader_manager_, vertex_shader);
217 program_info_->AttachShader(&shader_manager_, fragment_shader); 217 program_info_->AttachShader(&shader_manager_, fragment_shader);
218 program_info_->Link(); 218 program_info_->Link(NULL, NULL, NULL, NULL);
219 } 219 }
220 220
221 void SetupShader(AttribInfo* attribs, size_t num_attribs, 221 void SetupShader(AttribInfo* attribs, size_t num_attribs,
222 UniformInfo* uniforms, size_t num_uniforms, 222 UniformInfo* uniforms, size_t num_uniforms,
223 GLuint service_id) { 223 GLuint service_id) {
224 TestHelper::SetupShader( 224 TestHelper::SetupShader(
225 gl_.get(), attribs, num_attribs, uniforms, num_uniforms, service_id); 225 gl_.get(), attribs, num_attribs, uniforms, num_uniforms, service_id);
226 } 226 }
227 227
228 void SetupDefaultShaderExpectations() { 228 void SetupDefaultShaderExpectations() {
(...skipping 12 matching lines...) Expand all
241 } 241 }
242 242
243 // Return true if link status matches expected_link_status 243 // Return true if link status matches expected_link_status
244 bool LinkAsExpected(ProgramManager::ProgramInfo* program_info, 244 bool LinkAsExpected(ProgramManager::ProgramInfo* program_info,
245 bool expected_link_status) { 245 bool expected_link_status) {
246 GLuint service_id = program_info->service_id(); 246 GLuint service_id = program_info->service_id();
247 if (expected_link_status) { 247 if (expected_link_status) {
248 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms, 248 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms,
249 service_id); 249 service_id);
250 } 250 }
251 program_info->Link(); 251 program_info->Link(NULL, NULL, NULL, NULL);
252 GLint link_status; 252 GLint link_status;
253 program_info->GetProgramiv(GL_LINK_STATUS, &link_status); 253 program_info->GetProgramiv(GL_LINK_STATUS, &link_status);
254 return (static_cast<bool>(link_status) == expected_link_status); 254 return (static_cast<bool>(link_status) == expected_link_status);
255 } 255 }
256 256
257 static AttribInfo kAttribs[]; 257 static AttribInfo kAttribs[];
258 static UniformInfo kUniforms[]; 258 static UniformInfo kUniforms[];
259 259
260 scoped_ptr<StrictMock<gfx::MockGLInterface> > gl_; 260 scoped_ptr<StrictMock<gfx::MockGLInterface> > gl_;
261 261
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 vshader->SetStatus(true, "", NULL); 565 vshader->SetStatus(true, "", NULL);
566 ShaderManager::ShaderInfo* fshader = shader_manager_.CreateShaderInfo( 566 ShaderManager::ShaderInfo* fshader = shader_manager_.CreateShaderInfo(
567 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); 567 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER);
568 ASSERT_TRUE(fshader != NULL); 568 ASSERT_TRUE(fshader != NULL);
569 fshader->SetStatus(true, "", NULL); 569 fshader->SetStatus(true, "", NULL);
570 ProgramManager::ProgramInfo* program_info = 570 ProgramManager::ProgramInfo* program_info =
571 manager_.CreateProgramInfo(kClientProgramId, kServiceProgramId); 571 manager_.CreateProgramInfo(kClientProgramId, kServiceProgramId);
572 ASSERT_TRUE(program_info != NULL); 572 ASSERT_TRUE(program_info != NULL);
573 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); 573 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader));
574 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); 574 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader));
575 program_info->Link(); 575 program_info->Link(NULL, NULL, NULL, NULL);
576 GLint value = 0; 576 GLint value = 0;
577 program_info->GetProgramiv(GL_ACTIVE_ATTRIBUTES, &value); 577 program_info->GetProgramiv(GL_ACTIVE_ATTRIBUTES, &value);
578 EXPECT_EQ(3, value); 578 EXPECT_EQ(3, value);
579 // Check that we skipped the "gl_" uniform. 579 // Check that we skipped the "gl_" uniform.
580 program_info->GetProgramiv(GL_ACTIVE_UNIFORMS, &value); 580 program_info->GetProgramiv(GL_ACTIVE_UNIFORMS, &value);
581 EXPECT_EQ(2, value); 581 EXPECT_EQ(2, value);
582 // Check that our max length adds room for the array spec and is not as long 582 // Check that our max length adds room for the array spec and is not as long
583 // as the "gl_" uniform we skipped. 583 // as the "gl_" uniform we skipped.
584 // +4u is to account for "gl_" and NULL terminator. 584 // +4u is to account for "gl_" and NULL terminator.
585 program_info->GetProgramiv(GL_ACTIVE_UNIFORM_MAX_LENGTH, &value); 585 program_info->GetProgramiv(GL_ACTIVE_UNIFORM_MAX_LENGTH, &value);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
656 const size_t kNumUniforms = arraysize(kUniforms); 656 const size_t kNumUniforms = arraysize(kUniforms);
657 static const GLuint kClientProgramId = 1234; 657 static const GLuint kClientProgramId = 1234;
658 static const GLuint kServiceProgramId = 5679; 658 static const GLuint kServiceProgramId = 5679;
659 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms, 659 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms,
660 kServiceProgramId); 660 kServiceProgramId);
661 ProgramManager::ProgramInfo* program_info = manager_.CreateProgramInfo( 661 ProgramManager::ProgramInfo* program_info = manager_.CreateProgramInfo(
662 kClientProgramId, kServiceProgramId); 662 kClientProgramId, kServiceProgramId);
663 ASSERT_TRUE(program_info != NULL); 663 ASSERT_TRUE(program_info != NULL);
664 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); 664 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader));
665 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); 665 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader));
666 program_info->Link(); 666 program_info->Link(NULL, NULL, NULL, NULL);
667 // Check that we got the good type, not the bad. 667 // Check that we got the good type, not the bad.
668 // Check Attribs 668 // Check Attribs
669 for (unsigned index = 0; index < kNumAttribs; ++index) { 669 for (unsigned index = 0; index < kNumAttribs; ++index) {
670 const ProgramManager::ProgramInfo::VertexAttribInfo* attrib_info = 670 const ProgramManager::ProgramInfo::VertexAttribInfo* attrib_info =
671 program_info->GetAttribInfo(index); 671 program_info->GetAttribInfo(index);
672 ASSERT_TRUE(attrib_info != NULL); 672 ASSERT_TRUE(attrib_info != NULL);
673 ShaderTranslator::VariableMap::const_iterator it = attrib_map.find( 673 ShaderTranslator::VariableMap::const_iterator it = attrib_map.find(
674 attrib_info->name); 674 attrib_info->name);
675 ASSERT_TRUE(it != attrib_map.end()); 675 ASSERT_TRUE(it != attrib_map.end());
676 EXPECT_EQ(it->first, attrib_info->name); 676 EXPECT_EQ(it->first, attrib_info->name);
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
972 kUniform3Type, 972 kUniform3Type,
973 kUniform3FakeLocation, 973 kUniform3FakeLocation,
974 kUniform3RealLocation, 974 kUniform3RealLocation,
975 kUniform3GoodName, 975 kUniform3GoodName,
976 }, 976 },
977 }; 977 };
978 const size_t kNumAttribs = arraysize(kAttribs); 978 const size_t kNumAttribs = arraysize(kAttribs);
979 const size_t kNumUniforms = arraysize(kUniforms); 979 const size_t kNumUniforms = arraysize(kUniforms);
980 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms, 980 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms,
981 kServiceProgramId); 981 kServiceProgramId);
982 program_info->Link(); 982 program_info->Link(NULL, NULL, NULL, NULL);
983 SetupExpectationsForClearingUniforms(kUniforms, kNumUniforms); 983 SetupExpectationsForClearingUniforms(kUniforms, kNumUniforms);
984 manager_.ClearUniforms(program_info); 984 manager_.ClearUniforms(program_info);
985 } 985 }
986 } 986 }
987 987
988 TEST_F(ProgramManagerWithShaderTest, UniformsAreSorted) { 988 TEST_F(ProgramManagerWithShaderTest, UniformsAreSorted) {
989 const GLuint kVShaderClientId = 2001; 989 const GLuint kVShaderClientId = 2001;
990 const GLuint kFShaderClientId = 2002; 990 const GLuint kFShaderClientId = 2002;
991 const GLuint kVShaderServiceId = 3001; 991 const GLuint kVShaderServiceId = 3001;
992 const GLuint kFShaderServiceId = 3002; 992 const GLuint kFShaderServiceId = 3002;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1030 const size_t kNumUniforms = arraysize(kUniforms); 1030 const size_t kNumUniforms = arraysize(kUniforms);
1031 static const GLuint kClientProgramId = 1234; 1031 static const GLuint kClientProgramId = 1234;
1032 static const GLuint kServiceProgramId = 5679; 1032 static const GLuint kServiceProgramId = 5679;
1033 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms, 1033 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms,
1034 kServiceProgramId); 1034 kServiceProgramId);
1035 ProgramManager::ProgramInfo* program_info = manager_.CreateProgramInfo( 1035 ProgramManager::ProgramInfo* program_info = manager_.CreateProgramInfo(
1036 kClientProgramId, kServiceProgramId); 1036 kClientProgramId, kServiceProgramId);
1037 ASSERT_TRUE(program_info != NULL); 1037 ASSERT_TRUE(program_info != NULL);
1038 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); 1038 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader));
1039 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); 1039 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader));
1040 program_info->Link(); 1040 program_info->Link(NULL, NULL, NULL, NULL);
1041 // Check Uniforms 1041 // Check Uniforms
1042 const ProgramManager::ProgramInfo::UniformInfo* uniform_info = 1042 const ProgramManager::ProgramInfo::UniformInfo* uniform_info =
1043 program_info->GetUniformInfo(0); 1043 program_info->GetUniformInfo(0);
1044 ASSERT_TRUE(uniform_info != NULL); 1044 ASSERT_TRUE(uniform_info != NULL);
1045 EXPECT_STREQ(kUniform1Name, uniform_info->name.c_str()); 1045 EXPECT_STREQ(kUniform1Name, uniform_info->name.c_str());
1046 EXPECT_EQ(0, uniform_info->fake_location_base); 1046 EXPECT_EQ(0, uniform_info->fake_location_base);
1047 uniform_info = program_info->GetUniformInfo(1); 1047 uniform_info = program_info->GetUniformInfo(1);
1048 ASSERT_TRUE(uniform_info != NULL); 1048 ASSERT_TRUE(uniform_info != NULL);
1049 EXPECT_STREQ(kUniform2Name, uniform_info->name.c_str()); 1049 EXPECT_STREQ(kUniform2Name, uniform_info->name.c_str());
1050 EXPECT_EQ(1, uniform_info->fake_location_base); 1050 EXPECT_EQ(1, uniform_info->fake_location_base);
1051 uniform_info = program_info->GetUniformInfo(2); 1051 uniform_info = program_info->GetUniformInfo(2);
1052 ASSERT_TRUE(uniform_info != NULL); 1052 ASSERT_TRUE(uniform_info != NULL);
1053 EXPECT_STREQ(kUniform3GoodName, uniform_info->name.c_str()); 1053 EXPECT_STREQ(kUniform3GoodName, uniform_info->name.c_str());
1054 EXPECT_EQ(2, uniform_info->fake_location_base); 1054 EXPECT_EQ(2, uniform_info->fake_location_base);
1055 } 1055 }
1056 1056
greggman 2012/06/26 23:00:27 You need to add a bunch of unit tests here using a
1057 } // namespace gles2 1057 } // namespace gles2
1058 } // namespace gpu 1058 } // namespace gpu
1059 1059
1060 1060
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698