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

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

Issue 935333002: Update from https://crrev.com/316786 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « gpu/command_buffer/service/memory_program_cache.cc ('k') | gpu/command_buffer/service/mocks.h » ('j') | 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) 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/memory_program_cache.h" 5 #include "gpu/command_buffer/service/memory_program_cache.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "gpu/command_buffer/common/gles2_cmd_format.h" 8 #include "gpu/command_buffer/common/gles2_cmd_format.h"
9 #include "gpu/command_buffer/service/gl_utils.h" 9 #include "gpu/command_buffer/service/gl_utils.h"
10 #include "gpu/command_buffer/service/gpu_service_test.h" 10 #include "gpu/command_buffer/service/gpu_service_test.h"
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 const GLenum kFormat = 1; 183 const GLenum kFormat = 1;
184 const int kProgramId = 10; 184 const int kProgramId = 10;
185 const int kBinaryLength = 20; 185 const int kBinaryLength = 20;
186 char test_binary[kBinaryLength]; 186 char test_binary[kBinaryLength];
187 for (int i = 0; i < kBinaryLength; ++i) { 187 for (int i = 0; i < kBinaryLength; ++i) {
188 test_binary[i] = i; 188 test_binary[i] = i;
189 } 189 }
190 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 190 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
191 191
192 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 192 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
193 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, 193 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
194 fragment_shader_, NULL, NULL, 194 fragment_shader_, NULL,
195 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 195 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
196 base::Unretained(this))); 196 base::Unretained(this)));
197 197
198 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus( 198 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus(
199 vertex_shader_->last_compiled_source(), 199 vertex_shader_->last_compiled_signature(),
200 NULL, 200 fragment_shader_->last_compiled_signature(),
201 fragment_shader_->last_compiled_source(),
202 NULL,
203 NULL)); 201 NULL));
204 EXPECT_EQ(1, shader_cache_count()); 202 EXPECT_EQ(1, shader_cache_count());
205 } 203 }
206 204
207 TEST_F(MemoryProgramCacheTest, LoadProgram) { 205 TEST_F(MemoryProgramCacheTest, LoadProgram) {
208 const GLenum kFormat = 1; 206 const GLenum kFormat = 1;
209 const int kProgramId = 10; 207 const int kProgramId = 10;
210 const int kBinaryLength = 20; 208 const int kBinaryLength = 20;
211 char test_binary[kBinaryLength]; 209 char test_binary[kBinaryLength];
212 for (int i = 0; i < kBinaryLength; ++i) { 210 for (int i = 0; i < kBinaryLength; ++i) {
213 test_binary[i] = i; 211 test_binary[i] = i;
214 } 212 }
215 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 213 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
216 214
217 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 215 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
218 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, 216 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
219 fragment_shader_, NULL, NULL, 217 fragment_shader_, NULL,
220 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 218 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
221 base::Unretained(this))); 219 base::Unretained(this)));
222 220
223 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus( 221 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus(
224 vertex_shader_->last_compiled_source(), 222 vertex_shader_->last_compiled_signature(),
225 NULL, 223 fragment_shader_->last_compiled_signature(),
226 fragment_shader_->last_compiled_source(),
227 NULL,
228 NULL)); 224 NULL));
229 EXPECT_EQ(1, shader_cache_count()); 225 EXPECT_EQ(1, shader_cache_count());
230 226
231 cache_->Clear(); 227 cache_->Clear();
232 228
233 cache_->LoadProgram(shader_cache_shader()); 229 cache_->LoadProgram(shader_cache_shader());
234 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus( 230 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus(
235 vertex_shader_->last_compiled_source(), 231 vertex_shader_->last_compiled_signature(),
236 NULL, 232 fragment_shader_->last_compiled_signature(),
237 fragment_shader_->last_compiled_source(),
238 NULL,
239 NULL)); 233 NULL));
240 } 234 }
241 235
242 TEST_F(MemoryProgramCacheTest, CacheLoadMatchesSave) { 236 TEST_F(MemoryProgramCacheTest, CacheLoadMatchesSave) {
243 const GLenum kFormat = 1; 237 const GLenum kFormat = 1;
244 const int kProgramId = 10; 238 const int kProgramId = 10;
245 const int kBinaryLength = 20; 239 const int kBinaryLength = 20;
246 char test_binary[kBinaryLength]; 240 char test_binary[kBinaryLength];
247 for (int i = 0; i < kBinaryLength; ++i) { 241 for (int i = 0; i < kBinaryLength; ++i) {
248 test_binary[i] = i; 242 test_binary[i] = i;
249 } 243 }
250 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 244 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
251 245
252 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 246 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
253 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, 247 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
254 fragment_shader_, NULL, NULL, 248 fragment_shader_, NULL,
255 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 249 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
256 base::Unretained(this))); 250 base::Unretained(this)));
257 EXPECT_EQ(1, shader_cache_count()); 251 EXPECT_EQ(1, shader_cache_count());
258 252
259 AttributeMap vertex_attrib_map = vertex_shader_->attrib_map(); 253 AttributeMap vertex_attrib_map = vertex_shader_->attrib_map();
260 UniformMap vertex_uniform_map = vertex_shader_->uniform_map(); 254 UniformMap vertex_uniform_map = vertex_shader_->uniform_map();
261 VaryingMap vertex_varying_map = vertex_shader_->varying_map(); 255 VaryingMap vertex_varying_map = vertex_shader_->varying_map();
262 AttributeMap fragment_attrib_map = fragment_shader_->attrib_map(); 256 AttributeMap fragment_attrib_map = fragment_shader_->attrib_map();
263 UniformMap fragment_uniform_map = fragment_shader_->uniform_map(); 257 UniformMap fragment_uniform_map = fragment_shader_->uniform_map();
264 VaryingMap fragment_varying_map = fragment_shader_->varying_map(); 258 VaryingMap fragment_varying_map = fragment_shader_->varying_map();
265 259
266 vertex_shader_->set_attrib_map(AttributeMap()); 260 vertex_shader_->set_attrib_map(AttributeMap());
267 vertex_shader_->set_uniform_map(UniformMap()); 261 vertex_shader_->set_uniform_map(UniformMap());
268 vertex_shader_->set_varying_map(VaryingMap()); 262 vertex_shader_->set_varying_map(VaryingMap());
269 fragment_shader_->set_attrib_map(AttributeMap()); 263 fragment_shader_->set_attrib_map(AttributeMap());
270 fragment_shader_->set_uniform_map(UniformMap()); 264 fragment_shader_->set_uniform_map(UniformMap());
271 fragment_shader_->set_varying_map(VaryingMap()); 265 fragment_shader_->set_varying_map(VaryingMap());
272 266
273 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); 267 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator);
274 268
275 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( 269 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram(
276 kProgramId, 270 kProgramId,
277 vertex_shader_, 271 vertex_shader_,
278 NULL,
279 fragment_shader_, 272 fragment_shader_,
280 NULL, 273 NULL,
281 NULL,
282 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 274 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
283 base::Unretained(this)))); 275 base::Unretained(this))));
284 276
285 // apparently the hash_map implementation on android doesn't have the 277 // apparently the hash_map implementation on android doesn't have the
286 // equality operator 278 // equality operator
287 #if !defined(OS_ANDROID) 279 #if !defined(OS_ANDROID)
288 EXPECT_EQ(vertex_attrib_map, vertex_shader_->attrib_map()); 280 EXPECT_EQ(vertex_attrib_map, vertex_shader_->attrib_map());
289 EXPECT_EQ(vertex_uniform_map, vertex_shader_->uniform_map()); 281 EXPECT_EQ(vertex_uniform_map, vertex_shader_->uniform_map());
290 EXPECT_EQ(vertex_varying_map, vertex_shader_->varying_map()); 282 EXPECT_EQ(vertex_varying_map, vertex_shader_->varying_map());
291 EXPECT_EQ(fragment_attrib_map, fragment_shader_->attrib_map()); 283 EXPECT_EQ(fragment_attrib_map, fragment_shader_->attrib_map());
292 EXPECT_EQ(fragment_uniform_map, fragment_shader_->uniform_map()); 284 EXPECT_EQ(fragment_uniform_map, fragment_shader_->uniform_map());
293 EXPECT_EQ(fragment_varying_map, fragment_shader_->varying_map()); 285 EXPECT_EQ(fragment_varying_map, fragment_shader_->varying_map());
294 #endif 286 #endif
295 } 287 }
296 288
297 TEST_F(MemoryProgramCacheTest, LoadProgramMatchesSave) { 289 TEST_F(MemoryProgramCacheTest, LoadProgramMatchesSave) {
298 const GLenum kFormat = 1; 290 const GLenum kFormat = 1;
299 const int kProgramId = 10; 291 const int kProgramId = 10;
300 const int kBinaryLength = 20; 292 const int kBinaryLength = 20;
301 char test_binary[kBinaryLength]; 293 char test_binary[kBinaryLength];
302 for (int i = 0; i < kBinaryLength; ++i) { 294 for (int i = 0; i < kBinaryLength; ++i) {
303 test_binary[i] = i; 295 test_binary[i] = i;
304 } 296 }
305 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 297 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
306 298
307 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 299 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
308 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, 300 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
309 fragment_shader_, NULL, NULL, 301 fragment_shader_, NULL,
310 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 302 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
311 base::Unretained(this))); 303 base::Unretained(this)));
312 EXPECT_EQ(1, shader_cache_count()); 304 EXPECT_EQ(1, shader_cache_count());
313 305
314 AttributeMap vertex_attrib_map = vertex_shader_->attrib_map(); 306 AttributeMap vertex_attrib_map = vertex_shader_->attrib_map();
315 UniformMap vertex_uniform_map = vertex_shader_->uniform_map(); 307 UniformMap vertex_uniform_map = vertex_shader_->uniform_map();
316 VaryingMap vertex_varying_map = vertex_shader_->varying_map(); 308 VaryingMap vertex_varying_map = vertex_shader_->varying_map();
317 AttributeMap fragment_attrib_map = fragment_shader_->attrib_map(); 309 AttributeMap fragment_attrib_map = fragment_shader_->attrib_map();
318 UniformMap fragment_uniform_map = fragment_shader_->uniform_map(); 310 UniformMap fragment_uniform_map = fragment_shader_->uniform_map();
319 VaryingMap fragment_varying_map = fragment_shader_->varying_map(); 311 VaryingMap fragment_varying_map = fragment_shader_->varying_map();
320 312
321 vertex_shader_->set_attrib_map(AttributeMap()); 313 vertex_shader_->set_attrib_map(AttributeMap());
322 vertex_shader_->set_uniform_map(UniformMap()); 314 vertex_shader_->set_uniform_map(UniformMap());
323 vertex_shader_->set_varying_map(VaryingMap()); 315 vertex_shader_->set_varying_map(VaryingMap());
324 fragment_shader_->set_attrib_map(AttributeMap()); 316 fragment_shader_->set_attrib_map(AttributeMap());
325 fragment_shader_->set_uniform_map(UniformMap()); 317 fragment_shader_->set_uniform_map(UniformMap());
326 fragment_shader_->set_varying_map(VaryingMap()); 318 fragment_shader_->set_varying_map(VaryingMap());
327 319
328 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); 320 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator);
329 321
330 cache_->Clear(); 322 cache_->Clear();
331 cache_->LoadProgram(shader_cache_shader()); 323 cache_->LoadProgram(shader_cache_shader());
332 324
333 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( 325 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram(
334 kProgramId, 326 kProgramId,
335 vertex_shader_, 327 vertex_shader_,
336 NULL,
337 fragment_shader_, 328 fragment_shader_,
338 NULL, 329 NULL,
339 NULL,
340 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 330 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
341 base::Unretained(this)))); 331 base::Unretained(this))));
342 332
343 // apparently the hash_map implementation on android doesn't have the 333 // apparently the hash_map implementation on android doesn't have the
344 // equality operator 334 // equality operator
345 #if !defined(OS_ANDROID) 335 #if !defined(OS_ANDROID)
346 EXPECT_EQ(vertex_attrib_map, vertex_shader_->attrib_map()); 336 EXPECT_EQ(vertex_attrib_map, vertex_shader_->attrib_map());
347 EXPECT_EQ(vertex_uniform_map, vertex_shader_->uniform_map()); 337 EXPECT_EQ(vertex_uniform_map, vertex_shader_->uniform_map());
348 EXPECT_EQ(vertex_varying_map, vertex_shader_->varying_map()); 338 EXPECT_EQ(vertex_varying_map, vertex_shader_->varying_map());
349 EXPECT_EQ(fragment_attrib_map, fragment_shader_->attrib_map()); 339 EXPECT_EQ(fragment_attrib_map, fragment_shader_->attrib_map());
350 EXPECT_EQ(fragment_uniform_map, fragment_shader_->uniform_map()); 340 EXPECT_EQ(fragment_uniform_map, fragment_shader_->uniform_map());
351 EXPECT_EQ(fragment_varying_map, fragment_shader_->varying_map()); 341 EXPECT_EQ(fragment_varying_map, fragment_shader_->varying_map());
352 #endif 342 #endif
353 } 343 }
354 344
355 TEST_F(MemoryProgramCacheTest, LoadFailOnLinkFalse) { 345 TEST_F(MemoryProgramCacheTest, LoadFailOnLinkFalse) {
356 const GLenum kFormat = 1; 346 const GLenum kFormat = 1;
357 const int kProgramId = 10; 347 const int kProgramId = 10;
358 const int kBinaryLength = 20; 348 const int kBinaryLength = 20;
359 char test_binary[kBinaryLength]; 349 char test_binary[kBinaryLength];
360 for (int i = 0; i < kBinaryLength; ++i) { 350 for (int i = 0; i < kBinaryLength; ++i) {
361 test_binary[i] = i; 351 test_binary[i] = i;
362 } 352 }
363 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 353 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
364 354
365 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 355 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
366 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, 356 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
367 fragment_shader_, NULL, NULL, 357 fragment_shader_, NULL,
368 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 358 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
369 base::Unretained(this))); 359 base::Unretained(this)));
370 360
371 SetExpectationsForLoadLinkedProgramFailure(kProgramId, &emulator); 361 SetExpectationsForLoadLinkedProgramFailure(kProgramId, &emulator);
372 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram( 362 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram(
373 kProgramId, 363 kProgramId,
374 vertex_shader_, 364 vertex_shader_,
375 NULL,
376 fragment_shader_, 365 fragment_shader_,
377 NULL, 366 NULL,
378 NULL,
379 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 367 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
380 base::Unretained(this)))); 368 base::Unretained(this))));
381 } 369 }
382 370
383 TEST_F(MemoryProgramCacheTest, LoadFailOnDifferentSource) { 371 TEST_F(MemoryProgramCacheTest, LoadFailOnDifferentSource) {
384 const GLenum kFormat = 1; 372 const GLenum kFormat = 1;
385 const int kProgramId = 10; 373 const int kProgramId = 10;
386 const int kBinaryLength = 20; 374 const int kBinaryLength = 20;
387 char test_binary[kBinaryLength]; 375 char test_binary[kBinaryLength];
388 for (int i = 0; i < kBinaryLength; ++i) { 376 for (int i = 0; i < kBinaryLength; ++i) {
389 test_binary[i] = i; 377 test_binary[i] = i;
390 } 378 }
391 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 379 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
392 380
393 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 381 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
394 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, 382 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
395 fragment_shader_, NULL, NULL, 383 fragment_shader_, NULL,
396 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 384 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
397 base::Unretained(this))); 385 base::Unretained(this)));
398 386
399 const std::string vertex_orig_source = vertex_shader_->last_compiled_source(); 387 const std::string vertex_orig_source = vertex_shader_->last_compiled_source();
400 vertex_shader_->set_source("different!"); 388 vertex_shader_->set_source("different!");
401 TestHelper::SetShaderStates(gl_.get(), vertex_shader_, true); 389 TestHelper::SetShaderStates(gl_.get(), vertex_shader_, true);
402 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram( 390 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram(
403 kProgramId, 391 kProgramId,
404 vertex_shader_, 392 vertex_shader_,
405 NULL,
406 fragment_shader_, 393 fragment_shader_,
407 NULL, 394 NULL,
408 NULL,
409 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 395 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
410 base::Unretained(this)))); 396 base::Unretained(this))));
411 397
412 vertex_shader_->set_source(vertex_orig_source); 398 vertex_shader_->set_source(vertex_orig_source);
413 TestHelper::SetShaderStates(gl_.get(), vertex_shader_, true); 399 TestHelper::SetShaderStates(gl_.get(), vertex_shader_, true);
414 fragment_shader_->set_source("different!"); 400 fragment_shader_->set_source("different!");
415 TestHelper::SetShaderStates(gl_.get(), fragment_shader_, true); 401 TestHelper::SetShaderStates(gl_.get(), fragment_shader_, true);
416 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram( 402 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram(
417 kProgramId, 403 kProgramId,
418 vertex_shader_, 404 vertex_shader_,
419 NULL,
420 fragment_shader_, 405 fragment_shader_,
421 NULL, 406 NULL,
422 NULL,
423 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 407 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
424 base::Unretained(this)))); 408 base::Unretained(this))));
425 } 409 }
426 410
427 TEST_F(MemoryProgramCacheTest, LoadFailOnDifferentMap) { 411 TEST_F(MemoryProgramCacheTest, LoadFailOnDifferentMap) {
428 const GLenum kFormat = 1; 412 const GLenum kFormat = 1;
429 const int kProgramId = 10; 413 const int kProgramId = 10;
430 const int kBinaryLength = 20; 414 const int kBinaryLength = 20;
431 char test_binary[kBinaryLength]; 415 char test_binary[kBinaryLength];
432 for (int i = 0; i < kBinaryLength; ++i) { 416 for (int i = 0; i < kBinaryLength; ++i) {
433 test_binary[i] = i; 417 test_binary[i] = i;
434 } 418 }
435 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 419 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
436 420
437 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 421 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
438 ProgramCache::LocationMap binding_map; 422 ProgramCache::LocationMap binding_map;
439 binding_map["test"] = 512; 423 binding_map["test"] = 512;
440 cache_->SaveLinkedProgram(kProgramId, 424 cache_->SaveLinkedProgram(kProgramId,
441 vertex_shader_, 425 vertex_shader_,
442 NULL,
443 fragment_shader_, 426 fragment_shader_,
444 NULL,
445 &binding_map, 427 &binding_map,
446 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 428 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
447 base::Unretained(this))); 429 base::Unretained(this)));
448 430
449 binding_map["different!"] = 59; 431 binding_map["different!"] = 59;
450 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram( 432 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram(
451 kProgramId, 433 kProgramId,
452 vertex_shader_, 434 vertex_shader_,
453 NULL,
454 fragment_shader_, 435 fragment_shader_,
455 NULL,
456 &binding_map, 436 &binding_map,
457 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 437 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
458 base::Unretained(this)))); 438 base::Unretained(this))));
459 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram( 439 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_FAILURE, cache_->LoadLinkedProgram(
460 kProgramId, 440 kProgramId,
461 vertex_shader_, 441 vertex_shader_,
462 NULL,
463 fragment_shader_, 442 fragment_shader_,
464 NULL, 443 NULL,
465 NULL,
466 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 444 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
467 base::Unretained(this)))); 445 base::Unretained(this))));
468 } 446 }
469 447
470 TEST_F(MemoryProgramCacheTest, MemoryProgramCacheEviction) { 448 TEST_F(MemoryProgramCacheTest, MemoryProgramCacheEviction) {
471 const GLenum kFormat = 1; 449 const GLenum kFormat = 1;
472 const int kProgramId = 10; 450 const int kProgramId = 10;
473 const int kBinaryLength = 20; 451 const int kBinaryLength = 20;
474 char test_binary[kBinaryLength]; 452 char test_binary[kBinaryLength];
475 for (int i = 0; i < kBinaryLength; ++i) { 453 for (int i = 0; i < kBinaryLength; ++i) {
476 test_binary[i] = i; 454 test_binary[i] = i;
477 } 455 }
478 ProgramBinaryEmulator emulator1(kBinaryLength, kFormat, test_binary); 456 ProgramBinaryEmulator emulator1(kBinaryLength, kFormat, test_binary);
479 457
480 458
481 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator1); 459 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator1);
482 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, 460 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
483 fragment_shader_, NULL, NULL, 461 fragment_shader_, NULL,
484 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 462 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
485 base::Unretained(this))); 463 base::Unretained(this)));
486 464
487 const int kEvictingProgramId = 11; 465 const int kEvictingProgramId = 11;
488 const GLuint kEvictingBinaryLength = kCacheSizeBytes - kBinaryLength + 1; 466 const GLuint kEvictingBinaryLength = kCacheSizeBytes - kBinaryLength + 1;
489 467
490 // save old source and modify for new program 468 // save old source and modify for new program
491 const std::string& old_source = fragment_shader_->last_compiled_source(); 469 const std::string& old_sig = fragment_shader_->last_compiled_signature();
492 fragment_shader_->set_source("al sdfkjdk"); 470 fragment_shader_->set_source("al sdfkjdk");
493 TestHelper::SetShaderStates(gl_.get(), fragment_shader_, true); 471 TestHelper::SetShaderStates(gl_.get(), fragment_shader_, true);
494 472
495 scoped_ptr<char[]> bigTestBinary = 473 scoped_ptr<char[]> bigTestBinary =
496 scoped_ptr<char[]>(new char[kEvictingBinaryLength]); 474 scoped_ptr<char[]>(new char[kEvictingBinaryLength]);
497 for (size_t i = 0; i < kEvictingBinaryLength; ++i) { 475 for (size_t i = 0; i < kEvictingBinaryLength; ++i) {
498 bigTestBinary[i] = i % 250; 476 bigTestBinary[i] = i % 250;
499 } 477 }
500 ProgramBinaryEmulator emulator2(kEvictingBinaryLength, 478 ProgramBinaryEmulator emulator2(kEvictingBinaryLength,
501 kFormat, 479 kFormat,
502 bigTestBinary.get()); 480 bigTestBinary.get());
503 481
504 SetExpectationsForSaveLinkedProgram(kEvictingProgramId, &emulator2); 482 SetExpectationsForSaveLinkedProgram(kEvictingProgramId, &emulator2);
505 cache_->SaveLinkedProgram(kEvictingProgramId, 483 cache_->SaveLinkedProgram(kEvictingProgramId,
506 vertex_shader_, 484 vertex_shader_,
507 NULL,
508 fragment_shader_, 485 fragment_shader_,
509 NULL, 486 NULL,
510 NULL,
511 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 487 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
512 base::Unretained(this))); 488 base::Unretained(this)));
513 489
514 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus( 490 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus(
515 vertex_shader_->last_compiled_source(), 491 vertex_shader_->last_compiled_signature(),
516 NULL, 492 fragment_shader_->last_compiled_signature(),
517 fragment_shader_->last_compiled_source(),
518 NULL,
519 NULL)); 493 NULL));
520 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, cache_->GetLinkedProgramStatus( 494 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, cache_->GetLinkedProgramStatus(
521 old_source, 495 old_sig,
522 NULL, 496 fragment_shader_->last_compiled_signature(),
523 fragment_shader_->last_compiled_source(),
524 NULL,
525 NULL)); 497 NULL));
526 } 498 }
527 499
528 TEST_F(MemoryProgramCacheTest, SaveCorrectProgram) { 500 TEST_F(MemoryProgramCacheTest, SaveCorrectProgram) {
529 const GLenum kFormat = 1; 501 const GLenum kFormat = 1;
530 const int kProgramId = 10; 502 const int kProgramId = 10;
531 const int kBinaryLength = 20; 503 const int kBinaryLength = 20;
532 char test_binary[kBinaryLength]; 504 char test_binary[kBinaryLength];
533 for (int i = 0; i < kBinaryLength; ++i) { 505 for (int i = 0; i < kBinaryLength; ++i) {
534 test_binary[i] = i; 506 test_binary[i] = i;
535 } 507 }
536 ProgramBinaryEmulator emulator1(kBinaryLength, kFormat, test_binary); 508 ProgramBinaryEmulator emulator1(kBinaryLength, kFormat, test_binary);
537 509
538 vertex_shader_->set_source("different!"); 510 vertex_shader_->set_source("different!");
539 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator1); 511 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator1);
540 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, 512 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
541 fragment_shader_, NULL, NULL, 513 fragment_shader_, NULL,
542 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 514 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
543 base::Unretained(this))); 515 base::Unretained(this)));
544 516
545 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus( 517 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus(
546 vertex_shader_->last_compiled_source(), 518 vertex_shader_->last_compiled_signature(),
547 NULL, 519 fragment_shader_->last_compiled_signature(),
548 fragment_shader_->last_compiled_source(),
549 NULL,
550 NULL)); 520 NULL));
551 } 521 }
552 522
553 TEST_F(MemoryProgramCacheTest, LoadCorrectProgram) { 523 TEST_F(MemoryProgramCacheTest, LoadCorrectProgram) {
554 const GLenum kFormat = 1; 524 const GLenum kFormat = 1;
555 const int kProgramId = 10; 525 const int kProgramId = 10;
556 const int kBinaryLength = 20; 526 const int kBinaryLength = 20;
557 char test_binary[kBinaryLength]; 527 char test_binary[kBinaryLength];
558 for (int i = 0; i < kBinaryLength; ++i) { 528 for (int i = 0; i < kBinaryLength; ++i) {
559 test_binary[i] = i; 529 test_binary[i] = i;
560 } 530 }
561 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 531 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
562 532
563 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 533 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
564 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, 534 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
565 fragment_shader_, NULL, NULL, 535 fragment_shader_, NULL,
566 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 536 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
567 base::Unretained(this))); 537 base::Unretained(this)));
568 538
569 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus( 539 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus(
570 vertex_shader_->last_compiled_source(), 540 vertex_shader_->last_compiled_signature(),
571 NULL, 541 fragment_shader_->last_compiled_signature(),
572 fragment_shader_->last_compiled_source(),
573 NULL,
574 NULL)); 542 NULL));
575 543
576 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); 544 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator);
577 545
578 fragment_shader_->set_source("different!"); 546 fragment_shader_->set_source("different!");
579 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( 547 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram(
580 kProgramId, 548 kProgramId,
581 vertex_shader_, 549 vertex_shader_,
582 NULL,
583 fragment_shader_, 550 fragment_shader_,
584 NULL, 551 NULL,
585 NULL,
586 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 552 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
587 base::Unretained(this)))); 553 base::Unretained(this))));
588 } 554 }
589 555
590 TEST_F(MemoryProgramCacheTest, OverwriteOnNewSave) { 556 TEST_F(MemoryProgramCacheTest, OverwriteOnNewSave) {
591 const GLenum kFormat = 1; 557 const GLenum kFormat = 1;
592 const int kProgramId = 10; 558 const int kProgramId = 10;
593 const int kBinaryLength = 20; 559 const int kBinaryLength = 20;
594 char test_binary[kBinaryLength]; 560 char test_binary[kBinaryLength];
595 for (int i = 0; i < kBinaryLength; ++i) { 561 for (int i = 0; i < kBinaryLength; ++i) {
596 test_binary[i] = i; 562 test_binary[i] = i;
597 } 563 }
598 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 564 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
599 565
600 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 566 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
601 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, 567 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
602 fragment_shader_, NULL, NULL, 568 fragment_shader_, NULL,
603 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 569 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
604 base::Unretained(this))); 570 base::Unretained(this)));
605 571
606 572
607 char test_binary2[kBinaryLength]; 573 char test_binary2[kBinaryLength];
608 for (int i = 0; i < kBinaryLength; ++i) { 574 for (int i = 0; i < kBinaryLength; ++i) {
609 test_binary2[i] = (i*2) % 250; 575 test_binary2[i] = (i*2) % 250;
610 } 576 }
611 ProgramBinaryEmulator emulator2(kBinaryLength, kFormat, test_binary2); 577 ProgramBinaryEmulator emulator2(kBinaryLength, kFormat, test_binary2);
612 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator2); 578 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator2);
613 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, 579 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
614 fragment_shader_, NULL, NULL, 580 fragment_shader_, NULL,
615 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 581 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
616 base::Unretained(this))); 582 base::Unretained(this)));
617 583
618 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator2); 584 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator2);
619 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( 585 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram(
620 kProgramId, 586 kProgramId,
621 vertex_shader_, 587 vertex_shader_,
622 NULL,
623 fragment_shader_, 588 fragment_shader_,
624 NULL, 589 NULL,
625 NULL,
626 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 590 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
627 base::Unretained(this)))); 591 base::Unretained(this))));
628 } 592 }
629 593
630 } // namespace gles2 594 } // namespace gles2
631 } // namespace gpu 595 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/memory_program_cache.cc ('k') | gpu/command_buffer/service/mocks.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698