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

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

Issue 5676003: Make shader and program object lifetimes match OpenGL ES spec.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years 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
« no previous file with comments | « gpu/command_buffer/service/shader_manager.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/shader_manager.h" 5 #include "gpu/command_buffer/service/shader_manager.h"
6 6
7 #include "base/scoped_ptr.h" 7 #include "base/scoped_ptr.h"
8 #include "gpu/command_buffer/common/gl_mock.h" 8 #include "gpu/command_buffer/common/gl_mock.h"
9 #include "gpu/command_buffer/service/mocks.h" 9 #include "gpu/command_buffer/service/mocks.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 26 matching lines...) Expand all
37 37
38 // Use StrictMock to make 100% sure we know how GL will be called. 38 // Use StrictMock to make 100% sure we know how GL will be called.
39 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; 39 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
40 ShaderManager manager_; 40 ShaderManager manager_;
41 }; 41 };
42 42
43 TEST_F(ShaderManagerTest, Basic) { 43 TEST_F(ShaderManagerTest, Basic) {
44 const GLuint kClient1Id = 1; 44 const GLuint kClient1Id = 1;
45 const GLuint kService1Id = 11; 45 const GLuint kService1Id = 11;
46 const GLenum kShader1Type = GL_VERTEX_SHADER; 46 const GLenum kShader1Type = GL_VERTEX_SHADER;
47 const std::string kClient1Source("hello world");
48 const GLuint kClient2Id = 2; 47 const GLuint kClient2Id = 2;
49 // Check we can create shader. 48 // Check we can create shader.
50 manager_.CreateShaderInfo(kClient1Id, kService1Id, kShader1Type); 49 manager_.CreateShaderInfo(kClient1Id, kService1Id, kShader1Type);
51 // Check shader got created. 50 // Check shader got created.
52 ShaderManager::ShaderInfo* info1 = manager_.GetShaderInfo(kClient1Id); 51 ShaderManager::ShaderInfo* info1 = manager_.GetShaderInfo(kClient1Id);
53 ASSERT_TRUE(info1 != NULL); 52 ASSERT_TRUE(info1 != NULL);
54 EXPECT_EQ(kService1Id, info1->service_id());
55 // Check if the shader has correct type.
56 EXPECT_EQ(kShader1Type, info1->shader_type());
57 EXPECT_FALSE(info1->IsValid());
58 EXPECT_STREQ("", info1->log_info().c_str());
59 const char* kLog = "foo";
60 info1->SetStatus(true, kLog, NULL);
61 EXPECT_TRUE(info1->IsValid());
62 EXPECT_STREQ(kLog, info1->log_info().c_str());
63 // Check we can set its source.
64 info1->Update(kClient1Source);
65 EXPECT_STREQ(kClient1Source.c_str(), info1->source().c_str());
66 // Check we get nothing for a non-existent shader. 53 // Check we get nothing for a non-existent shader.
67 EXPECT_TRUE(manager_.GetShaderInfo(kClient2Id) == NULL); 54 EXPECT_TRUE(manager_.GetShaderInfo(kClient2Id) == NULL);
68 // Check trying to a remove non-existent shaders does not crash.
69 manager_.RemoveShaderInfo(kClient2Id);
70 // Check we can't get the shader after we remove it. 55 // Check we can't get the shader after we remove it.
71 manager_.RemoveShaderInfo(kClient1Id); 56 manager_.MarkAsDeleted(info1);
72 EXPECT_TRUE(manager_.GetShaderInfo(kClient1Id) == NULL); 57 EXPECT_TRUE(manager_.GetShaderInfo(kClient1Id) == NULL);
73 } 58 }
74 59
75 TEST_F(ShaderManagerTest, Destroy) { 60 TEST_F(ShaderManagerTest, Destroy) {
76 const GLuint kClient1Id = 1; 61 const GLuint kClient1Id = 1;
77 const GLuint kService1Id = 11; 62 const GLuint kService1Id = 11;
78 const GLenum kShader1Type = GL_VERTEX_SHADER; 63 const GLenum kShader1Type = GL_VERTEX_SHADER;
79 // Check we can create shader. 64 // Check we can create shader.
80 manager_.CreateShaderInfo(kClient1Id, kService1Id, kShader1Type); 65 manager_.CreateShaderInfo(kClient1Id, kService1Id, kShader1Type);
81 // Check shader got created. 66 // Check shader got created.
82 ShaderManager::ShaderInfo* info1 = manager_.GetShaderInfo(kClient1Id); 67 ShaderManager::ShaderInfo* info1 = manager_.GetShaderInfo(kClient1Id);
83 ASSERT_TRUE(info1 != NULL); 68 ASSERT_TRUE(info1 != NULL);
84 EXPECT_CALL(*gl_, DeleteShader(kService1Id)) 69 EXPECT_CALL(*gl_, DeleteShader(kService1Id))
85 .Times(1) 70 .Times(1)
86 .RetiresOnSaturation(); 71 .RetiresOnSaturation();
87 manager_.Destroy(true); 72 manager_.Destroy(true);
88 // Check that resources got freed. 73 // Check that resources got freed.
89 info1 = manager_.GetShaderInfo(kClient1Id); 74 info1 = manager_.GetShaderInfo(kClient1Id);
90 ASSERT_TRUE(info1 == NULL); 75 ASSERT_TRUE(info1 == NULL);
91 } 76 }
92 77
78 TEST_F(ShaderManagerTest, ShaderInfo) {
79 const GLuint kClient1Id = 1;
80 const GLuint kService1Id = 11;
81 const GLenum kShader1Type = GL_VERTEX_SHADER;
82 const std::string kClient1Source("hello world");
83 // Check we can create shader.
84 manager_.CreateShaderInfo(kClient1Id, kService1Id, kShader1Type);
85 // Check shader got created.
86 ShaderManager::ShaderInfo* info1 = manager_.GetShaderInfo(kClient1Id);
87 ASSERT_TRUE(info1 != NULL);
88 EXPECT_EQ(kService1Id, info1->service_id());
89 // Check if the shader has correct type.
90 EXPECT_EQ(kShader1Type, info1->shader_type());
91 EXPECT_FALSE(info1->IsValid());
92 EXPECT_FALSE(info1->InUse());
93 EXPECT_STREQ("", info1->log_info().c_str());
94 const char* kLog = "foo";
95 info1->SetStatus(true, kLog, NULL);
96 EXPECT_TRUE(info1->IsValid());
97 EXPECT_STREQ(kLog, info1->log_info().c_str());
98 // Check we can set its source.
99 info1->Update(kClient1Source);
100 EXPECT_STREQ(kClient1Source.c_str(), info1->source().c_str());
101 }
102
93 TEST_F(ShaderManagerTest, GetInfo) { 103 TEST_F(ShaderManagerTest, GetInfo) {
94 const GLuint kClient1Id = 1; 104 const GLuint kClient1Id = 1;
95 const GLuint kService1Id = 11; 105 const GLuint kService1Id = 11;
96 const GLenum kShader1Type = GL_VERTEX_SHADER; 106 const GLenum kShader1Type = GL_VERTEX_SHADER;
97 const GLenum kAttrib1Type = GL_FLOAT_VEC2; 107 const GLenum kAttrib1Type = GL_FLOAT_VEC2;
98 const GLsizei kAttrib1Size = 2; 108 const GLsizei kAttrib1Size = 2;
99 const char* kAttrib1Name = "attr1"; 109 const char* kAttrib1Name = "attr1";
100 const GLenum kAttrib2Type = GL_FLOAT_VEC3; 110 const GLenum kAttrib2Type = GL_FLOAT_VEC3;
101 const GLsizei kAttrib2Size = 4; 111 const GLsizei kAttrib2Size = 4;
102 const char* kAttrib2Name = "attr2"; 112 const char* kAttrib2Name = "attr2";
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 EXPECT_TRUE(variable_info == NULL); 163 EXPECT_TRUE(variable_info == NULL);
154 } 164 }
155 for (ShaderTranslator::VariableMap::const_iterator it = uniform_map.begin(); 165 for (ShaderTranslator::VariableMap::const_iterator it = uniform_map.begin();
156 it != uniform_map.end(); ++it) { 166 it != uniform_map.end(); ++it) {
157 const ShaderManager::ShaderInfo::VariableInfo* variable_info = 167 const ShaderManager::ShaderInfo::VariableInfo* variable_info =
158 info1->GetUniformInfo(it->first); 168 info1->GetUniformInfo(it->first);
159 ASSERT_TRUE(variable_info == NULL); 169 ASSERT_TRUE(variable_info == NULL);
160 } 170 }
161 } 171 }
162 172
173 TEST_F(ShaderManagerTest, ShaderInfoUseCount) {
174 const GLuint kClient1Id = 1;
175 const GLuint kService1Id = 11;
176 const GLenum kShader1Type = GL_VERTEX_SHADER;
177 // Check we can create shader.
178 manager_.CreateShaderInfo(kClient1Id, kService1Id, kShader1Type);
179 // Check shader got created.
180 ShaderManager::ShaderInfo* info1 = manager_.GetShaderInfo(kClient1Id);
181 ASSERT_TRUE(info1 != NULL);
182 EXPECT_FALSE(info1->InUse());
183 EXPECT_FALSE(info1->IsDeleted());
184 manager_.UseShader(info1);
185 EXPECT_TRUE(info1->InUse());
186 manager_.UseShader(info1);
187 EXPECT_TRUE(info1->InUse());
188 manager_.MarkAsDeleted(info1);
189 EXPECT_TRUE(info1->IsDeleted());
190 ShaderManager::ShaderInfo* info2 = manager_.GetShaderInfo(kClient1Id);
191 EXPECT_EQ(info1, info2);
192 manager_.UnuseShader(info1);
193 EXPECT_TRUE(info1->InUse());
194 manager_.UnuseShader(info1); // this should delete the info.
195 info2 = manager_.GetShaderInfo(kClient1Id);
196 EXPECT_TRUE(info2 == NULL);
197
198 manager_.CreateShaderInfo(kClient1Id, kService1Id, kShader1Type);
199 info1 = manager_.GetShaderInfo(kClient1Id);
200 ASSERT_TRUE(info1 != NULL);
201 EXPECT_FALSE(info1->InUse());
202 manager_.UseShader(info1);
203 EXPECT_TRUE(info1->InUse());
204 manager_.UseShader(info1);
205 EXPECT_TRUE(info1->InUse());
206 manager_.UnuseShader(info1);
207 EXPECT_TRUE(info1->InUse());
208 manager_.UnuseShader(info1);
209 EXPECT_FALSE(info1->InUse());
210 info2 = manager_.GetShaderInfo(kClient1Id);
211 EXPECT_EQ(info1, info2);
212 manager_.MarkAsDeleted(info1); // this should delete the shader.
213 info2 = manager_.GetShaderInfo(kClient1Id);
214 EXPECT_TRUE(info2 == NULL);
215 }
216
163 } // namespace gles2 217 } // namespace gles2
164 } // namespace gpu 218 } // namespace gpu
165 219
166 220
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/shader_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698