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

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

Issue 2315313003: Add a base class of Texture for interfacing with the mailbox manager. (Closed)
Patch Set: Created 4 years, 3 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "base/macros.h" 5 #include "base/macros.h"
6 #include "gpu/command_buffer/common/sync_token.h" 6 #include "gpu/command_buffer/common/sync_token.h"
7 #include "gpu/command_buffer/service/feature_info.h" 7 #include "gpu/command_buffer/service/feature_info.h"
8 #include "gpu/command_buffer/service/gpu_service_test.h" 8 #include "gpu/command_buffer/service/gpu_service_test.h"
9 #include "gpu/command_buffer/service/mailbox_manager_impl.h" 9 #include "gpu/command_buffer/service/mailbox_manager_impl.h"
10 #include "gpu/command_buffer/service/mailbox_manager_sync.h" 10 #include "gpu/command_buffer/service/mailbox_manager_sync.h"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 GLenum target, 73 GLenum target,
74 GLint level, 74 GLint level,
75 bool cleared) { 75 bool cleared) {
76 texture->SetLevelCleared(target, level, cleared); 76 texture->SetLevelCleared(target, level, cleared);
77 } 77 }
78 78
79 GLenum SetParameter(Texture* texture, GLenum pname, GLint param) { 79 GLenum SetParameter(Texture* texture, GLenum pname, GLint param) {
80 return texture->SetParameteri(feature_info_.get(), pname, param); 80 return texture->SetParameteri(feature_info_.get(), pname, param);
81 } 81 }
82 82
83 void DestroyTexture(Texture* texture) { 83 void DestroyTexture(TextureBase* texture) {
84 delete texture; 84 delete texture;
85 } 85 }
86 86
87 scoped_refptr<MailboxManager> manager_; 87 scoped_refptr<MailboxManager> manager_;
88 88
89 private: 89 private:
90 scoped_refptr<FeatureInfo> feature_info_; 90 scoped_refptr<FeatureInfo> feature_info_;
91 91
92 DISALLOW_COPY_AND_ASSIGN(MailboxManagerTest); 92 DISALLOW_COPY_AND_ASSIGN(MailboxManagerTest);
93 }; 93 };
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 EXPECT_EQ(texture, manager_->ConsumeTexture(name)); 324 EXPECT_EQ(texture, manager_->ConsumeTexture(name));
325 325
326 // Synchronize 326 // Synchronize
327 manager_->PushTextureUpdates(g_sync_token); 327 manager_->PushTextureUpdates(g_sync_token);
328 manager2_->PullTextureUpdates(g_sync_token); 328 manager2_->PullTextureUpdates(g_sync_token);
329 329
330 EXPECT_CALL(*gl_, GenTextures(1, _)) 330 EXPECT_CALL(*gl_, GenTextures(1, _))
331 .WillOnce(SetArgPointee<1>(kNewTextureId)); 331 .WillOnce(SetArgPointee<1>(kNewTextureId));
332 SetupUpdateTexParamExpectations( 332 SetupUpdateTexParamExpectations(
333 kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT); 333 kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
334 Texture* new_texture = manager2_->ConsumeTexture(name); 334 TextureBase* new_texture_base = manager2_->ConsumeTexture(name);
335 EXPECT_FALSE(new_texture == NULL); 335 EXPECT_NE(nullptr, new_texture_base);
336 Texture* new_texture = new_texture_base->AsTexture();
337 EXPECT_NE(nullptr, new_texture);
336 EXPECT_NE(texture, new_texture); 338 EXPECT_NE(texture, new_texture);
337 EXPECT_EQ(kNewTextureId, new_texture->service_id()); 339 EXPECT_EQ(kNewTextureId, new_texture->service_id());
338 340
339 // Resize original texture 341 // Resize original texture
340 SetLevelInfo(texture, GL_TEXTURE_2D, 0, GL_RGBA, 16, 32, 1, 0, GL_RGBA, 342 SetLevelInfo(texture, GL_TEXTURE_2D, 0, GL_RGBA, 16, 32, 1, 0, GL_RGBA,
341 GL_UNSIGNED_BYTE, gfx::Rect(16, 32)); 343 GL_UNSIGNED_BYTE, gfx::Rect(16, 32));
342 // Should have been orphaned 344 // Should have been orphaned
343 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); 345 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
344 346
345 // Synchronize again 347 // Synchronize again
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 // pushed in both directions, i.e. makes sure we don't clobber a shared 383 // pushed in both directions, i.e. makes sure we don't clobber a shared
382 // texture definition with an older version. 384 // texture definition with an older version.
383 TEST_F(MailboxManagerSyncTest, ProduceConsumeBidirectional) { 385 TEST_F(MailboxManagerSyncTest, ProduceConsumeBidirectional) {
384 const GLuint kNewTextureId1 = 1234; 386 const GLuint kNewTextureId1 = 1234;
385 const GLuint kNewTextureId2 = 4321; 387 const GLuint kNewTextureId2 = 4321;
386 388
387 Texture* texture1 = DefineTexture(); 389 Texture* texture1 = DefineTexture();
388 Mailbox name1 = Mailbox::Generate(); 390 Mailbox name1 = Mailbox::Generate();
389 Texture* texture2 = DefineTexture(); 391 Texture* texture2 = DefineTexture();
390 Mailbox name2 = Mailbox::Generate(); 392 Mailbox name2 = Mailbox::Generate();
391 Texture* new_texture1 = NULL; 393 TextureBase* new_texture1 = NULL;
392 Texture* new_texture2 = NULL; 394 TextureBase* new_texture2 = NULL;
393 395
394 manager_->ProduceTexture(name1, texture1); 396 manager_->ProduceTexture(name1, texture1);
395 manager2_->ProduceTexture(name2, texture2); 397 manager2_->ProduceTexture(name2, texture2);
396 398
397 // Make visible. 399 // Make visible.
398 manager_->PushTextureUpdates(g_sync_token); 400 manager_->PushTextureUpdates(g_sync_token);
399 manager2_->PushTextureUpdates(g_sync_token); 401 manager2_->PushTextureUpdates(g_sync_token);
400 402
401 // Create textures in the other manager instances for texture1 and texture2, 403 // Create textures in the other manager instances for texture1 and texture2,
402 // respectively to create a real sharing scenario. Otherwise, there would 404 // respectively to create a real sharing scenario. Otherwise, there would
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 EXPECT_EQ(texture, manager_->ConsumeTexture(name)); 466 EXPECT_EQ(texture, manager_->ConsumeTexture(name));
465 467
466 // Synchronize 468 // Synchronize
467 manager_->PushTextureUpdates(g_sync_token); 469 manager_->PushTextureUpdates(g_sync_token);
468 manager2_->PullTextureUpdates(g_sync_token); 470 manager2_->PullTextureUpdates(g_sync_token);
469 471
470 EXPECT_CALL(*gl_, GenTextures(1, _)) 472 EXPECT_CALL(*gl_, GenTextures(1, _))
471 .WillOnce(SetArgPointee<1>(kNewTextureId)); 473 .WillOnce(SetArgPointee<1>(kNewTextureId));
472 SetupUpdateTexParamExpectations( 474 SetupUpdateTexParamExpectations(
473 kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT); 475 kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
474 Texture* new_texture = manager2_->ConsumeTexture(name); 476 TextureBase* new_texture_base = manager2_->ConsumeTexture(name);
475 EXPECT_FALSE(new_texture == NULL); 477 EXPECT_NE(nullptr, new_texture_base);
478 Texture* new_texture = new_texture_base->AsTexture();
479 EXPECT_NE(nullptr, new_texture);
476 EXPECT_NE(texture, new_texture); 480 EXPECT_NE(texture, new_texture);
477 EXPECT_EQ(kNewTextureId, new_texture->service_id()); 481 EXPECT_EQ(kNewTextureId, new_texture->service_id());
478 482
479 Texture* old_texture = texture; 483 Texture* old_texture = texture;
480 texture = DefineTexture(); 484 texture = DefineTexture();
481 manager_->ProduceTexture(name, texture); 485 manager_->ProduceTexture(name, texture);
482 486
483 // Make a change to the new texture 487 // Make a change to the new texture
484 DCHECK_EQ(static_cast<GLuint>(GL_LINEAR), texture->min_filter()); 488 DCHECK_EQ(static_cast<GLuint>(GL_LINEAR), texture->min_filter());
485 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), 489 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR),
(...skipping 12 matching lines...) Expand all
498 // Synchronize and expect update 502 // Synchronize and expect update
499 manager_->PushTextureUpdates(g_sync_token); 503 manager_->PushTextureUpdates(g_sync_token);
500 SetupUpdateTexParamExpectations( 504 SetupUpdateTexParamExpectations(
501 new_texture->service_id(), GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT); 505 new_texture->service_id(), GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT);
502 manager2_->PullTextureUpdates(g_sync_token); 506 manager2_->PullTextureUpdates(g_sync_token);
503 507
504 EXPECT_CALL(*gl_, GenTextures(1, _)) 508 EXPECT_CALL(*gl_, GenTextures(1, _))
505 .WillOnce(SetArgPointee<1>(kNewTextureId)); 509 .WillOnce(SetArgPointee<1>(kNewTextureId));
506 SetupUpdateTexParamExpectations( 510 SetupUpdateTexParamExpectations(
507 kNewTextureId, GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT); 511 kNewTextureId, GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT);
508 Texture* tmp_texture = manager2_->ConsumeTexture(name); 512 TextureBase* tmp_texture = manager2_->ConsumeTexture(name);
509 EXPECT_NE(new_texture, tmp_texture); 513 EXPECT_NE(new_texture, tmp_texture);
510 DestroyTexture(tmp_texture); 514 DestroyTexture(tmp_texture);
511 515
512 DestroyTexture(old_texture); 516 DestroyTexture(old_texture);
513 DestroyTexture(texture); 517 DestroyTexture(texture);
514 DestroyTexture(new_texture); 518 DestroyTexture(new_texture);
515 519
516 EXPECT_EQ(NULL, manager_->ConsumeTexture(name)); 520 EXPECT_EQ(NULL, manager_->ConsumeTexture(name));
517 EXPECT_EQ(NULL, manager2_->ConsumeTexture(name)); 521 EXPECT_EQ(NULL, manager2_->ConsumeTexture(name));
518 } 522 }
(...skipping 10 matching lines...) Expand all
529 EXPECT_EQ(texture, manager_->ConsumeTexture(name)); 533 EXPECT_EQ(texture, manager_->ConsumeTexture(name));
530 534
531 // Synchronize 535 // Synchronize
532 manager_->PushTextureUpdates(g_sync_token); 536 manager_->PushTextureUpdates(g_sync_token);
533 manager2_->PullTextureUpdates(g_sync_token); 537 manager2_->PullTextureUpdates(g_sync_token);
534 538
535 EXPECT_CALL(*gl_, GenTextures(1, _)) 539 EXPECT_CALL(*gl_, GenTextures(1, _))
536 .WillOnce(SetArgPointee<1>(kNewTextureId)); 540 .WillOnce(SetArgPointee<1>(kNewTextureId));
537 SetupUpdateTexParamExpectations( 541 SetupUpdateTexParamExpectations(
538 kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT); 542 kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
539 Texture* new_texture = manager2_->ConsumeTexture(name); 543 TextureBase* new_texture_base = manager2_->ConsumeTexture(name);
540 EXPECT_FALSE(new_texture == NULL); 544 EXPECT_NE(nullptr, new_texture_base);
545 Texture* new_texture = new_texture_base->AsTexture();
546 EXPECT_NE(nullptr, new_texture);
541 EXPECT_NE(texture, new_texture); 547 EXPECT_NE(texture, new_texture);
542 EXPECT_EQ(kNewTextureId, new_texture->service_id()); 548 EXPECT_EQ(kNewTextureId, new_texture->service_id());
543 EXPECT_TRUE(texture->SafeToRenderFrom()); 549 EXPECT_TRUE(texture->SafeToRenderFrom());
544 550
545 // Change cleared to false. 551 // Change cleared to false.
546 SetLevelCleared(texture, texture->target(), 0, false); 552 SetLevelCleared(texture, texture->target(), 0, false);
547 EXPECT_FALSE(texture->SafeToRenderFrom()); 553 EXPECT_FALSE(texture->SafeToRenderFrom());
548 554
549 // Synchronize 555 // Synchronize
550 manager_->PushTextureUpdates(g_sync_token); 556 manager_->PushTextureUpdates(g_sync_token);
(...skipping 26 matching lines...) Expand all
577 // Synchronize 583 // Synchronize
578 manager_->PushTextureUpdates(g_sync_token); 584 manager_->PushTextureUpdates(g_sync_token);
579 manager2_->PullTextureUpdates(g_sync_token); 585 manager2_->PullTextureUpdates(g_sync_token);
580 586
581 // Should sync to new texture which is not defined. 587 // Should sync to new texture which is not defined.
582 EXPECT_CALL(*gl_, GenTextures(1, _)) 588 EXPECT_CALL(*gl_, GenTextures(1, _))
583 .WillOnce(SetArgPointee<1>(kNewTextureId)); 589 .WillOnce(SetArgPointee<1>(kNewTextureId));
584 SetupUpdateTexParamExpectations(kNewTextureId, texture->min_filter(), 590 SetupUpdateTexParamExpectations(kNewTextureId, texture->min_filter(),
585 texture->mag_filter(), texture->wrap_s(), 591 texture->mag_filter(), texture->wrap_s(),
586 texture->wrap_t()); 592 texture->wrap_t());
587 Texture* new_texture = manager2_->ConsumeTexture(name); 593 TextureBase* new_texture_base = manager2_->ConsumeTexture(name);
588 ASSERT_TRUE(new_texture); 594 EXPECT_NE(nullptr, new_texture_base);
595 Texture* new_texture = new_texture_base->AsTexture();
596 EXPECT_NE(nullptr, new_texture);
589 EXPECT_NE(texture, new_texture); 597 EXPECT_NE(texture, new_texture);
590 EXPECT_EQ(kNewTextureId, new_texture->service_id()); 598 EXPECT_EQ(kNewTextureId, new_texture->service_id());
591 EXPECT_FALSE(new_texture->IsDefined()); 599 EXPECT_FALSE(new_texture->IsDefined());
592 600
593 // Change cleared to false. 601 // Change cleared to false.
594 SetLevelInfo(texture, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, 602 SetLevelInfo(texture, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA,
595 GL_UNSIGNED_BYTE, gfx::Rect(1, 1)); 603 GL_UNSIGNED_BYTE, gfx::Rect(1, 1));
596 SetParameter(texture, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 604 SetParameter(texture, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
597 SetParameter(texture, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 605 SetParameter(texture, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
598 EXPECT_TRUE(texture->IsDefined()); 606 EXPECT_TRUE(texture->IsDefined());
(...skipping 26 matching lines...) Expand all
625 633
626 manager_->ProduceTexture(name1, texture); 634 manager_->ProduceTexture(name1, texture);
627 635
628 // Share 636 // Share
629 manager_->PushTextureUpdates(g_sync_token); 637 manager_->PushTextureUpdates(g_sync_token);
630 EXPECT_CALL(*gl_, GenTextures(1, _)) 638 EXPECT_CALL(*gl_, GenTextures(1, _))
631 .WillOnce(SetArgPointee<1>(kNewTextureId)); 639 .WillOnce(SetArgPointee<1>(kNewTextureId));
632 manager2_->PullTextureUpdates(g_sync_token); 640 manager2_->PullTextureUpdates(g_sync_token);
633 SetupUpdateTexParamExpectations( 641 SetupUpdateTexParamExpectations(
634 kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT); 642 kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
635 Texture* new_texture = manager2_->ConsumeTexture(name1); 643 TextureBase* new_texture = manager2_->ConsumeTexture(name1);
636 EXPECT_EQ(kNewTextureId, new_texture->service_id()); 644 EXPECT_EQ(kNewTextureId, new_texture->service_id());
637 645
638 manager_->ProduceTexture(name2, texture); 646 manager_->ProduceTexture(name2, texture);
639 647
640 // Synchronize 648 // Synchronize
641 manager_->PushTextureUpdates(g_sync_token); 649 manager_->PushTextureUpdates(g_sync_token);
642 manager2_->PullTextureUpdates(g_sync_token); 650 manager2_->PullTextureUpdates(g_sync_token);
643 651
644 // name2 should return the same texture 652 // name2 should return the same texture
645 EXPECT_EQ(new_texture, manager2_->ConsumeTexture(name2)); 653 EXPECT_EQ(new_texture, manager2_->ConsumeTexture(name2));
(...skipping 17 matching lines...) Expand all
663 Mailbox name = Mailbox::Generate(); 671 Mailbox name = Mailbox::Generate();
664 672
665 manager_->ProduceTexture(name, texture1); 673 manager_->ProduceTexture(name, texture1);
666 674
667 // Share 675 // Share
668 manager_->PushTextureUpdates(g_sync_token); 676 manager_->PushTextureUpdates(g_sync_token);
669 EXPECT_CALL(*gl_, GenTextures(1, _)) 677 EXPECT_CALL(*gl_, GenTextures(1, _))
670 .WillOnce(SetArgPointee<1>(kNewTextureId)); 678 .WillOnce(SetArgPointee<1>(kNewTextureId));
671 SetupUpdateTexParamExpectations( 679 SetupUpdateTexParamExpectations(
672 kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT); 680 kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
673 Texture* new_texture = manager2_->ConsumeTexture(name); 681 TextureBase* new_texture = manager2_->ConsumeTexture(name);
674 EXPECT_EQ(kNewTextureId, new_texture->service_id()); 682 EXPECT_EQ(kNewTextureId, new_texture->service_id());
675 683
676 // Clobber 684 // Clobber
677 manager2_->ProduceTexture(name, texture2); 685 manager2_->ProduceTexture(name, texture2);
678 manager_->ProduceTexture(name, texture1); 686 manager_->ProduceTexture(name, texture1);
679 687
680 // Synchronize manager -> manager2 688 // Synchronize manager -> manager2
681 manager_->PushTextureUpdates(g_sync_token); 689 manager_->PushTextureUpdates(g_sync_token);
682 manager2_->PullTextureUpdates(g_sync_token); 690 manager2_->PullTextureUpdates(g_sync_token);
683 691
684 // name should return the original texture, and not texture2 or a new one. 692 // name should return the original texture, and not texture2 or a new one.
685 EXPECT_EQ(new_texture, manager2_->ConsumeTexture(name)); 693 EXPECT_EQ(new_texture, manager2_->ConsumeTexture(name));
686 694
687 DestroyTexture(texture1); 695 DestroyTexture(texture1);
688 DestroyTexture(texture2); 696 DestroyTexture(texture2);
689 DestroyTexture(new_texture); 697 DestroyTexture(new_texture);
690 } 698 }
691 699
692 // TODO: Texture::level_infos_[][].size() 700 // TODO: Texture::level_infos_[][].size()
693 701
694 // TODO: unsupported targets and formats 702 // TODO: unsupported targets and formats
695 703
696 } // namespace gles2 704 } // namespace gles2
697 } // namespace gpu 705 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698