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

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

Issue 12326146: Refactor/Rename a bunch of GPU stuff (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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 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/shader_manager.h" 5 #include "gpu/command_buffer/service/shader_manager.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "gpu/command_buffer/service/mocks.h" 8 #include "gpu/command_buffer/service/mocks.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "ui/gl/gl_mock.h" 10 #include "ui/gl/gl_mock.h"
(...skipping 28 matching lines...) Expand all
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 GLuint kClient2Id = 2; 47 const GLuint kClient2Id = 2;
48 // Check we can create shader. 48 // Check we can create shader.
49 ShaderManager::ShaderInfo* info0 = manager_.CreateShaderInfo( 49 Shader* info0 = manager_.CreateShader(
50 kClient1Id, kService1Id, kShader1Type); 50 kClient1Id, kService1Id, kShader1Type);
51 // Check shader got created. 51 // Check shader got created.
52 ASSERT_TRUE(info0 != NULL); 52 ASSERT_TRUE(info0 != NULL);
53 ShaderManager::ShaderInfo* info1 = manager_.GetShaderInfo(kClient1Id); 53 Shader* info1 = manager_.GetShader(kClient1Id);
54 ASSERT_EQ(info0, info1); 54 ASSERT_EQ(info0, info1);
55 // Check we get nothing for a non-existent shader. 55 // Check we get nothing for a non-existent shader.
56 EXPECT_TRUE(manager_.GetShaderInfo(kClient2Id) == NULL); 56 EXPECT_TRUE(manager_.GetShader(kClient2Id) == NULL);
57 // Check we can't get the shader after we remove it. 57 // Check we can't get the shader after we remove it.
58 manager_.MarkAsDeleted(info1); 58 manager_.MarkAsDeleted(info1);
59 EXPECT_TRUE(manager_.GetShaderInfo(kClient1Id) == NULL); 59 EXPECT_TRUE(manager_.GetShader(kClient1Id) == NULL);
60 } 60 }
61 61
62 TEST_F(ShaderManagerTest, Destroy) { 62 TEST_F(ShaderManagerTest, Destroy) {
63 const GLuint kClient1Id = 1; 63 const GLuint kClient1Id = 1;
64 const GLuint kService1Id = 11; 64 const GLuint kService1Id = 11;
65 const GLenum kShader1Type = GL_VERTEX_SHADER; 65 const GLenum kShader1Type = GL_VERTEX_SHADER;
66 // Check we can create shader. 66 // Check we can create shader.
67 ShaderManager::ShaderInfo* info1 = manager_.CreateShaderInfo( 67 Shader* info1 = manager_.CreateShader(
68 kClient1Id, kService1Id, kShader1Type); 68 kClient1Id, kService1Id, kShader1Type);
69 // Check shader got created. 69 // Check shader got created.
70 ASSERT_TRUE(info1 != NULL); 70 ASSERT_TRUE(info1 != NULL);
71 EXPECT_CALL(*gl_, DeleteShader(kService1Id)) 71 EXPECT_CALL(*gl_, DeleteShader(kService1Id))
72 .Times(1) 72 .Times(1)
73 .RetiresOnSaturation(); 73 .RetiresOnSaturation();
74 manager_.Destroy(true); 74 manager_.Destroy(true);
75 // Check that resources got freed. 75 // Check that resources got freed.
76 info1 = manager_.GetShaderInfo(kClient1Id); 76 info1 = manager_.GetShader(kClient1Id);
77 ASSERT_TRUE(info1 == NULL); 77 ASSERT_TRUE(info1 == NULL);
78 } 78 }
79 79
80 TEST_F(ShaderManagerTest, DeleteBug) { 80 TEST_F(ShaderManagerTest, DeleteBug) {
81 const GLuint kClient1Id = 1; 81 const GLuint kClient1Id = 1;
82 const GLuint kClient2Id = 2; 82 const GLuint kClient2Id = 2;
83 const GLuint kService1Id = 11; 83 const GLuint kService1Id = 11;
84 const GLuint kService2Id = 12; 84 const GLuint kService2Id = 12;
85 const GLenum kShaderType = GL_VERTEX_SHADER; 85 const GLenum kShaderType = GL_VERTEX_SHADER;
86 // Check we can create shader. 86 // Check we can create shader.
87 ShaderManager::ShaderInfo::Ref info1( 87 scoped_refptr<Shader> info1(
88 manager_.CreateShaderInfo(kClient1Id, kService1Id, kShaderType)); 88 manager_.CreateShader(kClient1Id, kService1Id, kShaderType));
89 ShaderManager::ShaderInfo::Ref info2( 89 scoped_refptr<Shader> info2(
90 manager_.CreateShaderInfo(kClient2Id, kService2Id, kShaderType)); 90 manager_.CreateShader(kClient2Id, kService2Id, kShaderType));
91 ASSERT_TRUE(info1); 91 ASSERT_TRUE(info1);
92 ASSERT_TRUE(info2); 92 ASSERT_TRUE(info2);
93 manager_.UseShader(info1); 93 manager_.UseShader(info1);
94 manager_.MarkAsDeleted(info1); 94 manager_.MarkAsDeleted(info1);
95 manager_.MarkAsDeleted(info2); 95 manager_.MarkAsDeleted(info2);
96 EXPECT_TRUE(manager_.IsOwned(info1)); 96 EXPECT_TRUE(manager_.IsOwned(info1));
97 EXPECT_FALSE(manager_.IsOwned(info2)); 97 EXPECT_FALSE(manager_.IsOwned(info2));
98 } 98 }
99 99
100 TEST_F(ShaderManagerTest, ShaderInfo) { 100 TEST_F(ShaderManagerTest, Shader) {
101 const GLuint kClient1Id = 1; 101 const GLuint kClient1Id = 1;
102 const GLuint kService1Id = 11; 102 const GLuint kService1Id = 11;
103 const GLenum kShader1Type = GL_VERTEX_SHADER; 103 const GLenum kShader1Type = GL_VERTEX_SHADER;
104 const char* kClient1Source = "hello world"; 104 const char* kClient1Source = "hello world";
105 // Check we can create shader. 105 // Check we can create shader.
106 ShaderManager::ShaderInfo* info1 = manager_.CreateShaderInfo( 106 Shader* info1 = manager_.CreateShader(
107 kClient1Id, kService1Id, kShader1Type); 107 kClient1Id, kService1Id, kShader1Type);
108 // Check shader got created. 108 // Check shader got created.
109 ASSERT_TRUE(info1 != NULL); 109 ASSERT_TRUE(info1 != NULL);
110 EXPECT_EQ(kService1Id, info1->service_id()); 110 EXPECT_EQ(kService1Id, info1->service_id());
111 // Check if the shader has correct type. 111 // Check if the shader has correct type.
112 EXPECT_EQ(kShader1Type, info1->shader_type()); 112 EXPECT_EQ(kShader1Type, info1->shader_type());
113 EXPECT_FALSE(info1->IsValid()); 113 EXPECT_FALSE(info1->IsValid());
114 EXPECT_FALSE(info1->InUse()); 114 EXPECT_FALSE(info1->InUse());
115 EXPECT_TRUE(info1->source() == NULL); 115 EXPECT_TRUE(info1->source() == NULL);
116 EXPECT_TRUE(info1->log_info() == NULL); 116 EXPECT_TRUE(info1->log_info() == NULL);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 uniform_map[kUniform2Name] = ShaderTranslatorInterface::VariableInfo( 156 uniform_map[kUniform2Name] = ShaderTranslatorInterface::VariableInfo(
157 kUniform2Type, kUniform2Size, kUniform2Name); 157 kUniform2Type, kUniform2Size, kUniform2Name);
158 EXPECT_CALL(shader_translator, attrib_map()) 158 EXPECT_CALL(shader_translator, attrib_map())
159 .WillRepeatedly(ReturnRef(attrib_map)); 159 .WillRepeatedly(ReturnRef(attrib_map));
160 EXPECT_CALL(shader_translator, uniform_map()) 160 EXPECT_CALL(shader_translator, uniform_map())
161 .WillRepeatedly(ReturnRef(uniform_map)); 161 .WillRepeatedly(ReturnRef(uniform_map));
162 ShaderTranslator::NameMap name_map; 162 ShaderTranslator::NameMap name_map;
163 EXPECT_CALL(shader_translator, name_map()) 163 EXPECT_CALL(shader_translator, name_map())
164 .WillRepeatedly(ReturnRef(name_map)); 164 .WillRepeatedly(ReturnRef(name_map));
165 // Check we can create shader. 165 // Check we can create shader.
166 ShaderManager::ShaderInfo* info1 = manager_.CreateShaderInfo( 166 Shader* info1 = manager_.CreateShader(
167 kClient1Id, kService1Id, kShader1Type); 167 kClient1Id, kService1Id, kShader1Type);
168 // Check shader got created. 168 // Check shader got created.
169 ASSERT_TRUE(info1 != NULL); 169 ASSERT_TRUE(info1 != NULL);
170 // Set Status 170 // Set Status
171 info1->SetStatus(true, "", &shader_translator); 171 info1->SetStatus(true, "", &shader_translator);
172 // Check attrib and uniform infos got copied. 172 // Check attrib and uniform infos got copied.
173 for (ShaderTranslator::VariableMap::const_iterator it = attrib_map.begin(); 173 for (ShaderTranslator::VariableMap::const_iterator it = attrib_map.begin();
174 it != attrib_map.end(); ++it) { 174 it != attrib_map.end(); ++it) {
175 const ShaderManager::ShaderInfo::VariableInfo* variable_info = 175 const Shader::VariableInfo* variable_info =
176 info1->GetAttribInfo(it->first); 176 info1->GetAttribInfo(it->first);
177 ASSERT_TRUE(variable_info != NULL); 177 ASSERT_TRUE(variable_info != NULL);
178 EXPECT_EQ(it->second.type, variable_info->type); 178 EXPECT_EQ(it->second.type, variable_info->type);
179 EXPECT_EQ(it->second.size, variable_info->size); 179 EXPECT_EQ(it->second.size, variable_info->size);
180 EXPECT_EQ(it->second.name, variable_info->name); 180 EXPECT_EQ(it->second.name, variable_info->name);
181 } 181 }
182 for (ShaderTranslator::VariableMap::const_iterator it = uniform_map.begin(); 182 for (ShaderTranslator::VariableMap::const_iterator it = uniform_map.begin();
183 it != uniform_map.end(); ++it) { 183 it != uniform_map.end(); ++it) {
184 const ShaderManager::ShaderInfo::VariableInfo* variable_info = 184 const Shader::VariableInfo* variable_info =
185 info1->GetUniformInfo(it->first); 185 info1->GetUniformInfo(it->first);
186 ASSERT_TRUE(variable_info != NULL); 186 ASSERT_TRUE(variable_info != NULL);
187 EXPECT_EQ(it->second.type, variable_info->type); 187 EXPECT_EQ(it->second.type, variable_info->type);
188 EXPECT_EQ(it->second.size, variable_info->size); 188 EXPECT_EQ(it->second.size, variable_info->size);
189 EXPECT_EQ(it->second.name, variable_info->name); 189 EXPECT_EQ(it->second.name, variable_info->name);
190 } 190 }
191 // Check attrib and uniform get cleared. 191 // Check attrib and uniform get cleared.
192 info1->SetStatus(true, NULL, NULL); 192 info1->SetStatus(true, NULL, NULL);
193 EXPECT_TRUE(info1->log_info() == NULL); 193 EXPECT_TRUE(info1->log_info() == NULL);
194 for (ShaderTranslator::VariableMap::const_iterator it = attrib_map.begin(); 194 for (ShaderTranslator::VariableMap::const_iterator it = attrib_map.begin();
195 it != attrib_map.end(); ++it) { 195 it != attrib_map.end(); ++it) {
196 const ShaderManager::ShaderInfo::VariableInfo* variable_info = 196 const Shader::VariableInfo* variable_info =
197 info1->GetAttribInfo(it->first); 197 info1->GetAttribInfo(it->first);
198 EXPECT_TRUE(variable_info == NULL); 198 EXPECT_TRUE(variable_info == NULL);
199 } 199 }
200 for (ShaderTranslator::VariableMap::const_iterator it = uniform_map.begin(); 200 for (ShaderTranslator::VariableMap::const_iterator it = uniform_map.begin();
201 it != uniform_map.end(); ++it) { 201 it != uniform_map.end(); ++it) {
202 const ShaderManager::ShaderInfo::VariableInfo* variable_info = 202 const Shader::VariableInfo* variable_info =
203 info1->GetUniformInfo(it->first); 203 info1->GetUniformInfo(it->first);
204 ASSERT_TRUE(variable_info == NULL); 204 ASSERT_TRUE(variable_info == NULL);
205 } 205 }
206 } 206 }
207 207
208 TEST_F(ShaderManagerTest, ShaderInfoUseCount) { 208 TEST_F(ShaderManagerTest, ShaderInfoUseCount) {
209 const GLuint kClient1Id = 1; 209 const GLuint kClient1Id = 1;
210 const GLuint kService1Id = 11; 210 const GLuint kService1Id = 11;
211 const GLenum kShader1Type = GL_VERTEX_SHADER; 211 const GLenum kShader1Type = GL_VERTEX_SHADER;
212 // Check we can create shader. 212 // Check we can create shader.
213 ShaderManager::ShaderInfo* info1 = manager_.CreateShaderInfo( 213 Shader* info1 = manager_.CreateShader(
214 kClient1Id, kService1Id, kShader1Type); 214 kClient1Id, kService1Id, kShader1Type);
215 // Check shader got created. 215 // Check shader got created.
216 ASSERT_TRUE(info1 != NULL); 216 ASSERT_TRUE(info1 != NULL);
217 EXPECT_FALSE(info1->InUse()); 217 EXPECT_FALSE(info1->InUse());
218 EXPECT_FALSE(info1->IsDeleted()); 218 EXPECT_FALSE(info1->IsDeleted());
219 manager_.UseShader(info1); 219 manager_.UseShader(info1);
220 EXPECT_TRUE(info1->InUse()); 220 EXPECT_TRUE(info1->InUse());
221 manager_.UseShader(info1); 221 manager_.UseShader(info1);
222 EXPECT_TRUE(info1->InUse()); 222 EXPECT_TRUE(info1->InUse());
223 manager_.MarkAsDeleted(info1); 223 manager_.MarkAsDeleted(info1);
224 EXPECT_TRUE(info1->IsDeleted()); 224 EXPECT_TRUE(info1->IsDeleted());
225 ShaderManager::ShaderInfo* info2 = manager_.GetShaderInfo(kClient1Id); 225 Shader* info2 = manager_.GetShader(kClient1Id);
226 EXPECT_EQ(info1, info2); 226 EXPECT_EQ(info1, info2);
227 manager_.UnuseShader(info1); 227 manager_.UnuseShader(info1);
228 EXPECT_TRUE(info1->InUse()); 228 EXPECT_TRUE(info1->InUse());
229 manager_.UnuseShader(info1); // this should delete the info. 229 manager_.UnuseShader(info1); // this should delete the info.
230 info2 = manager_.GetShaderInfo(kClient1Id); 230 info2 = manager_.GetShader(kClient1Id);
231 EXPECT_TRUE(info2 == NULL); 231 EXPECT_TRUE(info2 == NULL);
232 232
233 info1 = manager_.CreateShaderInfo(kClient1Id, kService1Id, kShader1Type); 233 info1 = manager_.CreateShader(kClient1Id, kService1Id, kShader1Type);
234 ASSERT_TRUE(info1 != NULL); 234 ASSERT_TRUE(info1 != NULL);
235 EXPECT_FALSE(info1->InUse()); 235 EXPECT_FALSE(info1->InUse());
236 manager_.UseShader(info1); 236 manager_.UseShader(info1);
237 EXPECT_TRUE(info1->InUse()); 237 EXPECT_TRUE(info1->InUse());
238 manager_.UseShader(info1); 238 manager_.UseShader(info1);
239 EXPECT_TRUE(info1->InUse()); 239 EXPECT_TRUE(info1->InUse());
240 manager_.UnuseShader(info1); 240 manager_.UnuseShader(info1);
241 EXPECT_TRUE(info1->InUse()); 241 EXPECT_TRUE(info1->InUse());
242 manager_.UnuseShader(info1); 242 manager_.UnuseShader(info1);
243 EXPECT_FALSE(info1->InUse()); 243 EXPECT_FALSE(info1->InUse());
244 info2 = manager_.GetShaderInfo(kClient1Id); 244 info2 = manager_.GetShader(kClient1Id);
245 EXPECT_EQ(info1, info2); 245 EXPECT_EQ(info1, info2);
246 manager_.MarkAsDeleted(info1); // this should delete the shader. 246 manager_.MarkAsDeleted(info1); // this should delete the shader.
247 info2 = manager_.GetShaderInfo(kClient1Id); 247 info2 = manager_.GetShader(kClient1Id);
248 EXPECT_TRUE(info2 == NULL); 248 EXPECT_TRUE(info2 == NULL);
249 } 249 }
250 250
251 TEST_F(ShaderManagerTest, ShaderInfoStoreCompilationStatus) { 251 TEST_F(ShaderManagerTest, ShaderInfoStoreCompilationStatus) {
252 const GLuint kClientId = 1; 252 const GLuint kClientId = 1;
253 const GLuint kServiceId = 11; 253 const GLuint kServiceId = 11;
254 const GLenum kShaderType = GL_VERTEX_SHADER; 254 const GLenum kShaderType = GL_VERTEX_SHADER;
255 ShaderManager::ShaderInfo* info = manager_.CreateShaderInfo( 255 Shader* info = manager_.CreateShader(
256 kClientId, kServiceId, kShaderType); 256 kClientId, kServiceId, kShaderType);
257 ASSERT_TRUE(info != NULL); 257 ASSERT_TRUE(info != NULL);
258 258
259 EXPECT_EQ(ShaderManager::ShaderInfo::NOT_COMPILED, 259 EXPECT_EQ(Shader::NOT_COMPILED,
260 info->compilation_status()); 260 info->compilation_status());
261 info->UpdateSource("original source"); 261 info->UpdateSource("original source");
262 EXPECT_EQ(ShaderManager::ShaderInfo::NOT_COMPILED, 262 EXPECT_EQ(Shader::NOT_COMPILED,
263 info->compilation_status()); 263 info->compilation_status());
264 info->FlagSourceAsCompiled(false); 264 info->FlagSourceAsCompiled(false);
265 EXPECT_EQ(ShaderManager::ShaderInfo::PENDING_DEFERRED_COMPILE, 265 EXPECT_EQ(Shader::PENDING_DEFERRED_COMPILE,
266 info->compilation_status()); 266 info->compilation_status());
267 info->FlagSourceAsCompiled(true); 267 info->FlagSourceAsCompiled(true);
268 EXPECT_EQ(ShaderManager::ShaderInfo::COMPILED, 268 EXPECT_EQ(Shader::COMPILED,
269 info->compilation_status()); 269 info->compilation_status());
270 } 270 }
271 271
272 TEST_F(ShaderManagerTest, ShaderInfoStoreDeferredSource) { 272 TEST_F(ShaderManagerTest, ShaderInfoStoreDeferredSource) {
273 const GLuint kClientId = 1; 273 const GLuint kClientId = 1;
274 const GLuint kServiceId = 11; 274 const GLuint kServiceId = 11;
275 const GLenum kShaderType = GL_VERTEX_SHADER; 275 const GLenum kShaderType = GL_VERTEX_SHADER;
276 ShaderManager::ShaderInfo* info = manager_.CreateShaderInfo( 276 Shader* info = manager_.CreateShader(
277 kClientId, kServiceId, kShaderType); 277 kClientId, kServiceId, kShaderType);
278 ASSERT_TRUE(info != NULL); 278 ASSERT_TRUE(info != NULL);
279 279
280 info->UpdateSource("original source"); 280 info->UpdateSource("original source");
281 info->FlagSourceAsCompiled(false); 281 info->FlagSourceAsCompiled(false);
282 282
283 EXPECT_EQ("original source", *info->deferred_compilation_source()); 283 EXPECT_EQ("original source", *info->deferred_compilation_source());
284 info->UpdateSource("different!"); 284 info->UpdateSource("different!");
285 EXPECT_EQ("original source", *info->deferred_compilation_source()); 285 EXPECT_EQ("original source", *info->deferred_compilation_source());
286 286
287 info->FlagSourceAsCompiled(true); 287 info->FlagSourceAsCompiled(true);
288 EXPECT_EQ("different!", *info->deferred_compilation_source()); 288 EXPECT_EQ("different!", *info->deferred_compilation_source());
289 } 289 }
290 290
291 } // namespace gles2 291 } // namespace gles2
292 } // namespace gpu 292 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/shader_manager.cc ('k') | gpu/command_buffer/service/texture_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698