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

Side by Side Diff: cc/resources/resource_provider_unittest.cc

Issue 1144523003: Rename cc::ResourceProvider::ResourceId to cc::ResourceId and move it to its own file. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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 | « cc/resources/resource_provider.cc ('k') | cc/resources/returned_resource.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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 "cc/resources/resource_provider.h" 5 #include "cc/resources/resource_provider.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <set> 9 #include <set>
10 10
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 scoped_refptr<TestTexture> texture; 343 scoped_refptr<TestTexture> texture;
344 }; 344 };
345 typedef ScopedPtrDeque<PendingProduceTexture> PendingProduceTextureList; 345 typedef ScopedPtrDeque<PendingProduceTexture> PendingProduceTextureList;
346 ContextSharedData* shared_data_; 346 ContextSharedData* shared_data_;
347 GLuint last_waited_sync_point_; 347 GLuint last_waited_sync_point_;
348 PendingProduceTextureList pending_produce_textures_; 348 PendingProduceTextureList pending_produce_textures_;
349 }; 349 };
350 350
351 void GetResourcePixels(ResourceProvider* resource_provider, 351 void GetResourcePixels(ResourceProvider* resource_provider,
352 ResourceProviderContext* context, 352 ResourceProviderContext* context,
353 ResourceProvider::ResourceId id, 353 ResourceId id,
354 const gfx::Size& size, 354 const gfx::Size& size,
355 ResourceFormat format, 355 ResourceFormat format,
356 uint8_t* pixels) { 356 uint8_t* pixels) {
357 resource_provider->WaitSyncPointIfNeeded(id); 357 resource_provider->WaitSyncPointIfNeeded(id);
358 switch (resource_provider->default_resource_type()) { 358 switch (resource_provider->default_resource_type()) {
359 case ResourceProvider::RESOURCE_TYPE_GL_TEXTURE: { 359 case ResourceProvider::RESOURCE_TYPE_GL_TEXTURE: {
360 ResourceProvider::ScopedReadLockGL lock_gl(resource_provider, id); 360 ResourceProvider::ScopedReadLockGL lock_gl(resource_provider, id);
361 ASSERT_NE(0U, lock_gl.texture_id()); 361 ASSERT_NE(0U, lock_gl.texture_id());
362 context->bindTexture(GL_TEXTURE_2D, lock_gl.texture_id()); 362 context->bindTexture(GL_TEXTURE_2D, lock_gl.texture_id());
363 context->GetPixels(size, format, pixels); 363 context->GetPixels(size, format, pixels);
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 const ReturnedResourceArray& returned, 442 const ReturnedResourceArray& returned,
443 BlockingTaskRunner* main_thread_task_runner) { 443 BlockingTaskRunner* main_thread_task_runner) {
444 array->insert(array->end(), returned.begin(), returned.end()); 444 array->insert(array->end(), returned.begin(), returned.end());
445 } 445 }
446 446
447 static ReturnCallback GetReturnCallback(ReturnedResourceArray* array) { 447 static ReturnCallback GetReturnCallback(ReturnedResourceArray* array) {
448 return base::Bind(&ResourceProviderTest::CollectResources, array); 448 return base::Bind(&ResourceProviderTest::CollectResources, array);
449 } 449 }
450 450
451 static void SetResourceFilter(ResourceProvider* resource_provider, 451 static void SetResourceFilter(ResourceProvider* resource_provider,
452 ResourceProvider::ResourceId id, 452 ResourceId id,
453 GLenum filter) { 453 GLenum filter) {
454 ResourceProvider::ScopedSamplerGL sampler( 454 ResourceProvider::ScopedSamplerGL sampler(
455 resource_provider, id, GL_TEXTURE_2D, filter); 455 resource_provider, id, GL_TEXTURE_2D, filter);
456 } 456 }
457 457
458 ResourceProviderContext* context() { return context3d_; } 458 ResourceProviderContext* context() { return context3d_; }
459 459
460 ResourceProvider::ResourceId CreateChildMailbox(uint32* release_sync_point, 460 ResourceId CreateChildMailbox(uint32* release_sync_point,
461 bool* lost_resource, 461 bool* lost_resource,
462 bool* release_called, 462 bool* release_called,
463 uint32* sync_point) { 463 uint32* sync_point) {
464 if (GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) { 464 if (GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) {
465 unsigned texture = child_context_->createTexture(); 465 unsigned texture = child_context_->createTexture();
466 gpu::Mailbox gpu_mailbox; 466 gpu::Mailbox gpu_mailbox;
467 child_context_->genMailboxCHROMIUM(gpu_mailbox.name); 467 child_context_->genMailboxCHROMIUM(gpu_mailbox.name);
468 child_context_->produceTextureDirectCHROMIUM(texture, GL_TEXTURE_2D, 468 child_context_->produceTextureDirectCHROMIUM(texture, GL_TEXTURE_2D,
469 gpu_mailbox.name); 469 gpu_mailbox.name);
470 *sync_point = child_context_->insertSyncPoint(); 470 *sync_point = child_context_->insertSyncPoint();
471 EXPECT_LT(0u, *sync_point); 471 EXPECT_LT(0u, *sync_point);
472 472
473 scoped_ptr<SharedBitmap> shared_bitmap; 473 scoped_ptr<SharedBitmap> shared_bitmap;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 void CheckCreateResource(ResourceProvider::ResourceType expected_default_type, 511 void CheckCreateResource(ResourceProvider::ResourceType expected_default_type,
512 ResourceProvider* resource_provider, 512 ResourceProvider* resource_provider,
513 ResourceProviderContext* context) { 513 ResourceProviderContext* context) {
514 DCHECK_EQ(expected_default_type, resource_provider->default_resource_type()); 514 DCHECK_EQ(expected_default_type, resource_provider->default_resource_type());
515 515
516 gfx::Size size(1, 1); 516 gfx::Size size(1, 1);
517 ResourceFormat format = RGBA_8888; 517 ResourceFormat format = RGBA_8888;
518 size_t pixel_size = TextureSizeBytes(size, format); 518 size_t pixel_size = TextureSizeBytes(size, format);
519 ASSERT_EQ(4U, pixel_size); 519 ASSERT_EQ(4U, pixel_size);
520 520
521 ResourceProvider::ResourceId id = resource_provider->CreateResource( 521 ResourceId id = resource_provider->CreateResource(
522 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 522 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
523 EXPECT_EQ(1, static_cast<int>(resource_provider->num_resources())); 523 EXPECT_EQ(1, static_cast<int>(resource_provider->num_resources()));
524 if (expected_default_type == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) 524 if (expected_default_type == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE)
525 EXPECT_EQ(0u, context->NumTextures()); 525 EXPECT_EQ(0u, context->NumTextures());
526 526
527 uint8_t data[4] = { 1, 2, 3, 4 }; 527 uint8_t data[4] = { 1, 2, 3, 4 };
528 resource_provider->CopyToResource(id, data, size); 528 resource_provider->CopyToResource(id, data, size);
529 if (expected_default_type == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) 529 if (expected_default_type == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE)
530 EXPECT_EQ(1u, context->NumTextures()); 530 EXPECT_EQ(1u, context->NumTextures());
531 531
(...skipping 10 matching lines...) Expand all
542 TEST_P(ResourceProviderTest, Basic) { 542 TEST_P(ResourceProviderTest, Basic) {
543 CheckCreateResource(GetParam(), resource_provider_.get(), context()); 543 CheckCreateResource(GetParam(), resource_provider_.get(), context());
544 } 544 }
545 545
546 TEST_P(ResourceProviderTest, Upload) { 546 TEST_P(ResourceProviderTest, Upload) {
547 gfx::Size size(2, 2); 547 gfx::Size size(2, 2);
548 ResourceFormat format = RGBA_8888; 548 ResourceFormat format = RGBA_8888;
549 size_t pixel_size = TextureSizeBytes(size, format); 549 size_t pixel_size = TextureSizeBytes(size, format);
550 ASSERT_EQ(16U, pixel_size); 550 ASSERT_EQ(16U, pixel_size);
551 551
552 ResourceProvider::ResourceId id = resource_provider_->CreateResource( 552 ResourceId id = resource_provider_->CreateResource(
553 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 553 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
554 554
555 uint8_t image[16] = { 0 }; 555 uint8_t image[16] = { 0 };
556 gfx::Rect image_rect(size); 556 gfx::Rect image_rect(size);
557 resource_provider_->SetPixels( 557 resource_provider_->SetPixels(
558 id, image, image_rect, image_rect, gfx::Vector2d()); 558 id, image, image_rect, image_rect, gfx::Vector2d());
559 559
560 for (uint8_t i = 0; i < pixel_size; ++i) 560 for (uint8_t i = 0; i < pixel_size; ++i)
561 image[i] = i; 561 image[i] = i;
562 562
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
609 609
610 resource_provider_->DeleteResource(id); 610 resource_provider_->DeleteResource(id);
611 } 611 }
612 612
613 TEST_P(ResourceProviderTest, SimpleUpload) { 613 TEST_P(ResourceProviderTest, SimpleUpload) {
614 gfx::Size size(2, 2); 614 gfx::Size size(2, 2);
615 ResourceFormat format = RGBA_8888; 615 ResourceFormat format = RGBA_8888;
616 size_t pixel_size = TextureSizeBytes(size, format); 616 size_t pixel_size = TextureSizeBytes(size, format);
617 ASSERT_EQ(16U, pixel_size); 617 ASSERT_EQ(16U, pixel_size);
618 618
619 ResourceProvider::ResourceId id = resource_provider_->CreateResource( 619 ResourceId id = resource_provider_->CreateResource(
620 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 620 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
621 621
622 uint8_t image[16] = {0}; 622 uint8_t image[16] = {0};
623 resource_provider_->CopyToResource(id, image, size); 623 resource_provider_->CopyToResource(id, image, size);
624 { 624 {
625 uint8_t result[16] = {0}; 625 uint8_t result[16] = {0};
626 uint8_t expected[16] = {0}; 626 uint8_t expected[16] = {0};
627 GetResourcePixels(resource_provider_.get(), context(), id, size, format, 627 GetResourcePixels(resource_provider_.get(), context(), id, size, format,
628 result); 628 result);
629 EXPECT_EQ(0, memcmp(expected, result, pixel_size)); 629 EXPECT_EQ(0, memcmp(expected, result, pixel_size));
(...skipping 13 matching lines...) Expand all
643 } 643 }
644 644
645 TEST_P(ResourceProviderTest, TransferGLResources) { 645 TEST_P(ResourceProviderTest, TransferGLResources) {
646 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) 646 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE)
647 return; 647 return;
648 gfx::Size size(1, 1); 648 gfx::Size size(1, 1);
649 ResourceFormat format = RGBA_8888; 649 ResourceFormat format = RGBA_8888;
650 size_t pixel_size = TextureSizeBytes(size, format); 650 size_t pixel_size = TextureSizeBytes(size, format);
651 ASSERT_EQ(4U, pixel_size); 651 ASSERT_EQ(4U, pixel_size);
652 652
653 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( 653 ResourceId id1 = child_resource_provider_->CreateResource(
654 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 654 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
655 uint8_t data1[4] = { 1, 2, 3, 4 }; 655 uint8_t data1[4] = { 1, 2, 3, 4 };
656 child_resource_provider_->CopyToResource(id1, data1, size); 656 child_resource_provider_->CopyToResource(id1, data1, size);
657 657
658 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( 658 ResourceId id2 = child_resource_provider_->CreateResource(
659 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 659 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
660 uint8_t data2[4] = { 5, 5, 5, 5 }; 660 uint8_t data2[4] = { 5, 5, 5, 5 };
661 child_resource_provider_->CopyToResource(id2, data2, size); 661 child_resource_provider_->CopyToResource(id2, data2, size);
662 662
663 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource( 663 ResourceId id3 = child_resource_provider_->CreateResource(
664 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 664 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
665 { 665 {
666 ResourceProvider::ScopedWriteLockGpuMemoryBuffer lock( 666 ResourceProvider::ScopedWriteLockGpuMemoryBuffer lock(
667 child_resource_provider_.get(), id3); 667 child_resource_provider_.get(), id3);
668 EXPECT_TRUE(lock.GetGpuMemoryBuffer()); 668 EXPECT_TRUE(lock.GetGpuMemoryBuffer());
669 } 669 }
670 670
671 GLuint external_texture_id = child_context_->createExternalTexture(); 671 GLuint external_texture_id = child_context_->createExternalTexture();
672 672
673 gpu::Mailbox external_mailbox; 673 gpu::Mailbox external_mailbox;
674 child_context_->genMailboxCHROMIUM(external_mailbox.name); 674 child_context_->genMailboxCHROMIUM(external_mailbox.name);
675 child_context_->produceTextureDirectCHROMIUM( 675 child_context_->produceTextureDirectCHROMIUM(
676 external_texture_id, GL_TEXTURE_EXTERNAL_OES, external_mailbox.name); 676 external_texture_id, GL_TEXTURE_EXTERNAL_OES, external_mailbox.name);
677 const GLuint external_sync_point = child_context_->insertSyncPoint(); 677 const GLuint external_sync_point = child_context_->insertSyncPoint();
678 ResourceProvider::ResourceId id4 = 678 ResourceId id4 = child_resource_provider_->CreateResourceFromTextureMailbox(
679 child_resource_provider_->CreateResourceFromTextureMailbox( 679 TextureMailbox(external_mailbox, GL_TEXTURE_EXTERNAL_OES,
680 TextureMailbox( 680 external_sync_point),
681 external_mailbox, GL_TEXTURE_EXTERNAL_OES, external_sync_point), 681 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)));
682 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)));
683 682
684 ReturnedResourceArray returned_to_child; 683 ReturnedResourceArray returned_to_child;
685 int child_id = 684 int child_id =
686 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 685 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
687 { 686 {
688 // Transfer some resources to the parent. 687 // Transfer some resources to the parent.
689 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 688 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
690 resource_ids_to_transfer.push_back(id1); 689 resource_ids_to_transfer.push_back(id1);
691 resource_ids_to_transfer.push_back(id2); 690 resource_ids_to_transfer.push_back(id2);
692 resource_ids_to_transfer.push_back(id3); 691 resource_ids_to_transfer.push_back(id3);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
730 resource_ids_to_receive.insert(id2); 729 resource_ids_to_receive.insert(id2);
731 resource_ids_to_receive.insert(id3); 730 resource_ids_to_receive.insert(id3);
732 resource_ids_to_receive.insert(id4); 731 resource_ids_to_receive.insert(id4);
733 resource_provider_->DeclareUsedResourcesFromChild(child_id, 732 resource_provider_->DeclareUsedResourcesFromChild(child_id,
734 resource_ids_to_receive); 733 resource_ids_to_receive);
735 } 734 }
736 735
737 EXPECT_EQ(4u, resource_provider_->num_resources()); 736 EXPECT_EQ(4u, resource_provider_->num_resources());
738 ResourceProvider::ResourceIdMap resource_map = 737 ResourceProvider::ResourceIdMap resource_map =
739 resource_provider_->GetChildToParentMap(child_id); 738 resource_provider_->GetChildToParentMap(child_id);
740 ResourceProvider::ResourceId mapped_id1 = resource_map[id1]; 739 ResourceId mapped_id1 = resource_map[id1];
741 ResourceProvider::ResourceId mapped_id2 = resource_map[id2]; 740 ResourceId mapped_id2 = resource_map[id2];
742 ResourceProvider::ResourceId mapped_id3 = resource_map[id3]; 741 ResourceId mapped_id3 = resource_map[id3];
743 ResourceProvider::ResourceId mapped_id4 = resource_map[id4]; 742 ResourceId mapped_id4 = resource_map[id4];
744 EXPECT_NE(0u, mapped_id1); 743 EXPECT_NE(0u, mapped_id1);
745 EXPECT_NE(0u, mapped_id2); 744 EXPECT_NE(0u, mapped_id2);
746 EXPECT_NE(0u, mapped_id3); 745 EXPECT_NE(0u, mapped_id3);
747 EXPECT_NE(0u, mapped_id4); 746 EXPECT_NE(0u, mapped_id4);
748 EXPECT_FALSE(resource_provider_->InUseByConsumer(id1)); 747 EXPECT_FALSE(resource_provider_->InUseByConsumer(id1));
749 EXPECT_FALSE(resource_provider_->InUseByConsumer(id2)); 748 EXPECT_FALSE(resource_provider_->InUseByConsumer(id2));
750 EXPECT_FALSE(resource_provider_->InUseByConsumer(id3)); 749 EXPECT_FALSE(resource_provider_->InUseByConsumer(id3));
751 EXPECT_FALSE(resource_provider_->InUseByConsumer(id4)); 750 EXPECT_FALSE(resource_provider_->InUseByConsumer(id4));
752 751
753 uint8_t result[4] = { 0 }; 752 uint8_t result[4] = { 0 };
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
902 EXPECT_EQ(ResourceProvider::RESOURCE_TYPE_GL_TEXTURE, GetParam()); 901 EXPECT_EQ(ResourceProvider::RESOURCE_TYPE_GL_TEXTURE, GetParam());
903 } 902 }
904 }; 903 };
905 904
906 TEST_P(ResourceProviderTestNoSyncPoint, TransferGLResources) { 905 TEST_P(ResourceProviderTestNoSyncPoint, TransferGLResources) {
907 gfx::Size size(1, 1); 906 gfx::Size size(1, 1);
908 ResourceFormat format = RGBA_8888; 907 ResourceFormat format = RGBA_8888;
909 size_t pixel_size = TextureSizeBytes(size, format); 908 size_t pixel_size = TextureSizeBytes(size, format);
910 ASSERT_EQ(4U, pixel_size); 909 ASSERT_EQ(4U, pixel_size);
911 910
912 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( 911 ResourceId id1 = child_resource_provider_->CreateResource(
913 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 912 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
914 uint8_t data1[4] = {1, 2, 3, 4}; 913 uint8_t data1[4] = {1, 2, 3, 4};
915 child_resource_provider_->CopyToResource(id1, data1, size); 914 child_resource_provider_->CopyToResource(id1, data1, size);
916 915
917 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( 916 ResourceId id2 = child_resource_provider_->CreateResource(
918 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 917 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
919 { 918 {
920 // Ensure locking the memory buffer doesn't create an unnecessary sync 919 // Ensure locking the memory buffer doesn't create an unnecessary sync
921 // point. 920 // point.
922 ResourceProvider::ScopedWriteLockGpuMemoryBuffer lock( 921 ResourceProvider::ScopedWriteLockGpuMemoryBuffer lock(
923 child_resource_provider_.get(), id2); 922 child_resource_provider_.get(), id2);
924 EXPECT_TRUE(lock.GetGpuMemoryBuffer()); 923 EXPECT_TRUE(lock.GetGpuMemoryBuffer());
925 } 924 }
926 925
927 GLuint external_texture_id = child_context_->createExternalTexture(); 926 GLuint external_texture_id = child_context_->createExternalTexture();
928 927
929 // A sync point is specified directly and should be used. 928 // A sync point is specified directly and should be used.
930 gpu::Mailbox external_mailbox; 929 gpu::Mailbox external_mailbox;
931 child_context_->genMailboxCHROMIUM(external_mailbox.name); 930 child_context_->genMailboxCHROMIUM(external_mailbox.name);
932 child_context_->produceTextureDirectCHROMIUM( 931 child_context_->produceTextureDirectCHROMIUM(
933 external_texture_id, GL_TEXTURE_EXTERNAL_OES, external_mailbox.name); 932 external_texture_id, GL_TEXTURE_EXTERNAL_OES, external_mailbox.name);
934 const GLuint external_sync_point = child_context_->insertSyncPoint(); 933 const GLuint external_sync_point = child_context_->insertSyncPoint();
935 ResourceProvider::ResourceId id3 = 934 ResourceId id3 = child_resource_provider_->CreateResourceFromTextureMailbox(
936 child_resource_provider_->CreateResourceFromTextureMailbox( 935 TextureMailbox(external_mailbox, GL_TEXTURE_EXTERNAL_OES,
937 TextureMailbox(external_mailbox, GL_TEXTURE_EXTERNAL_OES, 936 external_sync_point),
938 external_sync_point), 937 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)));
939 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)));
940 938
941 ReturnedResourceArray returned_to_child; 939 ReturnedResourceArray returned_to_child;
942 int child_id = 940 int child_id =
943 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 941 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
944 resource_provider_->SetChildNeedsSyncPoints(child_id, false); 942 resource_provider_->SetChildNeedsSyncPoints(child_id, false);
945 { 943 {
946 // Transfer some resources to the parent. 944 // Transfer some resources to the parent.
947 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 945 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
948 resource_ids_to_transfer.push_back(id1); 946 resource_ids_to_transfer.push_back(id1);
949 resource_ids_to_transfer.push_back(id2); 947 resource_ids_to_transfer.push_back(id2);
(...skipping 19 matching lines...) Expand all
969 967
970 { 968 {
971 EXPECT_EQ(0u, returned_to_child.size()); 969 EXPECT_EQ(0u, returned_to_child.size());
972 970
973 // Transfer resources back from the parent to the child. Set no resources as 971 // Transfer resources back from the parent to the child. Set no resources as
974 // being in use. 972 // being in use.
975 ResourceProvider::ResourceIdSet no_resources; 973 ResourceProvider::ResourceIdSet no_resources;
976 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources); 974 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
977 975
978 ASSERT_EQ(3u, returned_to_child.size()); 976 ASSERT_EQ(3u, returned_to_child.size());
979 std::map<ResourceProvider::ResourceId, unsigned int> returned_sync_points; 977 std::map<ResourceId, unsigned int> returned_sync_points;
980 for (const auto& returned : returned_to_child) 978 for (const auto& returned : returned_to_child)
981 returned_sync_points[returned.id] = returned.sync_point; 979 returned_sync_points[returned.id] = returned.sync_point;
982 980
983 EXPECT_TRUE(returned_sync_points.find(id1) != returned_sync_points.end()); 981 EXPECT_TRUE(returned_sync_points.find(id1) != returned_sync_points.end());
984 // No new sync point should be created transferring back. 982 // No new sync point should be created transferring back.
985 EXPECT_TRUE(returned_sync_points.find(id1) != returned_sync_points.end()); 983 EXPECT_TRUE(returned_sync_points.find(id1) != returned_sync_points.end());
986 EXPECT_EQ(0u, returned_sync_points[id1]); 984 EXPECT_EQ(0u, returned_sync_points[id1]);
987 EXPECT_TRUE(returned_sync_points.find(id2) != returned_sync_points.end()); 985 EXPECT_TRUE(returned_sync_points.find(id2) != returned_sync_points.end());
988 EXPECT_EQ(0u, returned_sync_points[id2]); 986 EXPECT_EQ(0u, returned_sync_points[id2]);
989 // Original sync point given should be returned. 987 // Original sync point given should be returned.
(...skipping 13 matching lines...) Expand all
1003 ResourceProviderTests, 1001 ResourceProviderTests,
1004 ResourceProviderTestNoSyncPoint, 1002 ResourceProviderTestNoSyncPoint,
1005 ::testing::Values(ResourceProvider::RESOURCE_TYPE_GL_TEXTURE)); 1003 ::testing::Values(ResourceProvider::RESOURCE_TYPE_GL_TEXTURE));
1006 1004
1007 TEST_P(ResourceProviderTest, ReadLockCountStopsReturnToChildOrDelete) { 1005 TEST_P(ResourceProviderTest, ReadLockCountStopsReturnToChildOrDelete) {
1008 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) 1006 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE)
1009 return; 1007 return;
1010 gfx::Size size(1, 1); 1008 gfx::Size size(1, 1);
1011 ResourceFormat format = RGBA_8888; 1009 ResourceFormat format = RGBA_8888;
1012 1010
1013 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( 1011 ResourceId id1 = child_resource_provider_->CreateResource(
1014 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1012 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1015 uint8_t data1[4] = {1, 2, 3, 4}; 1013 uint8_t data1[4] = {1, 2, 3, 4};
1016 child_resource_provider_->CopyToResource(id1, data1, size); 1014 child_resource_provider_->CopyToResource(id1, data1, size);
1017 1015
1018 ReturnedResourceArray returned_to_child; 1016 ReturnedResourceArray returned_to_child;
1019 int child_id = 1017 int child_id =
1020 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1018 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
1021 { 1019 {
1022 // Transfer some resources to the parent. 1020 // Transfer some resources to the parent.
1023 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1021 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1058 TEST_P(ResourceProviderTest, AllowOverlayTransfersToParent) { 1056 TEST_P(ResourceProviderTest, AllowOverlayTransfersToParent) {
1059 // Overlays only supported on the GL path. 1057 // Overlays only supported on the GL path.
1060 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) 1058 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE)
1061 return; 1059 return;
1062 1060
1063 uint32 sync_point = 0; 1061 uint32 sync_point = 0;
1064 TextureMailbox mailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point); 1062 TextureMailbox mailbox(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point);
1065 mailbox.set_allow_overlay(true); 1063 mailbox.set_allow_overlay(true);
1066 scoped_ptr<SingleReleaseCallbackImpl> release_callback = 1064 scoped_ptr<SingleReleaseCallbackImpl> release_callback =
1067 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)); 1065 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback));
1068 ResourceProvider::ResourceId id1 = 1066 ResourceId id1 = child_resource_provider_->CreateResourceFromTextureMailbox(
1069 child_resource_provider_->CreateResourceFromTextureMailbox( 1067 mailbox, release_callback.Pass());
1070 mailbox, release_callback.Pass());
1071 1068
1072 TextureMailbox mailbox2(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point); 1069 TextureMailbox mailbox2(gpu::Mailbox::Generate(), GL_TEXTURE_2D, sync_point);
1073 mailbox2.set_allow_overlay(false); 1070 mailbox2.set_allow_overlay(false);
1074 scoped_ptr<SingleReleaseCallbackImpl> release_callback2 = 1071 scoped_ptr<SingleReleaseCallbackImpl> release_callback2 =
1075 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)); 1072 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback));
1076 ResourceProvider::ResourceId id2 = 1073 ResourceId id2 = child_resource_provider_->CreateResourceFromTextureMailbox(
1077 child_resource_provider_->CreateResourceFromTextureMailbox( 1074 mailbox2, release_callback2.Pass());
1078 mailbox2, release_callback2.Pass());
1079 1075
1080 ReturnedResourceArray returned_to_child; 1076 ReturnedResourceArray returned_to_child;
1081 int child_id = 1077 int child_id =
1082 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1078 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
1083 1079
1084 // Transfer some resources to the parent. 1080 // Transfer some resources to the parent.
1085 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1081 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1086 resource_ids_to_transfer.push_back(id1); 1082 resource_ids_to_transfer.push_back(id1);
1087 resource_ids_to_transfer.push_back(id2); 1083 resource_ids_to_transfer.push_back(id2);
1088 TransferableResourceArray list; 1084 TransferableResourceArray list;
(...skipping 19 matching lines...) Expand all
1108 1104
1109 TEST_P(ResourceProviderTest, TransferSoftwareResources) { 1105 TEST_P(ResourceProviderTest, TransferSoftwareResources) {
1110 if (GetParam() != ResourceProvider::RESOURCE_TYPE_BITMAP) 1106 if (GetParam() != ResourceProvider::RESOURCE_TYPE_BITMAP)
1111 return; 1107 return;
1112 1108
1113 gfx::Size size(1, 1); 1109 gfx::Size size(1, 1);
1114 ResourceFormat format = RGBA_8888; 1110 ResourceFormat format = RGBA_8888;
1115 size_t pixel_size = TextureSizeBytes(size, format); 1111 size_t pixel_size = TextureSizeBytes(size, format);
1116 ASSERT_EQ(4U, pixel_size); 1112 ASSERT_EQ(4U, pixel_size);
1117 1113
1118 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( 1114 ResourceId id1 = child_resource_provider_->CreateResource(
1119 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1115 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1120 uint8_t data1[4] = { 1, 2, 3, 4 }; 1116 uint8_t data1[4] = { 1, 2, 3, 4 };
1121 child_resource_provider_->CopyToResource(id1, data1, size); 1117 child_resource_provider_->CopyToResource(id1, data1, size);
1122 1118
1123 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( 1119 ResourceId id2 = child_resource_provider_->CreateResource(
1124 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1120 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1125 uint8_t data2[4] = { 5, 5, 5, 5 }; 1121 uint8_t data2[4] = { 5, 5, 5, 5 };
1126 child_resource_provider_->CopyToResource(id2, data2, size); 1122 child_resource_provider_->CopyToResource(id2, data2, size);
1127 1123
1128 scoped_ptr<SharedBitmap> shared_bitmap(CreateAndFillSharedBitmap( 1124 scoped_ptr<SharedBitmap> shared_bitmap(CreateAndFillSharedBitmap(
1129 shared_bitmap_manager_.get(), gfx::Size(1, 1), 0)); 1125 shared_bitmap_manager_.get(), gfx::Size(1, 1), 0));
1130 SharedBitmap* shared_bitmap_ptr = shared_bitmap.get(); 1126 SharedBitmap* shared_bitmap_ptr = shared_bitmap.get();
1131 ResourceProvider::ResourceId id3 = 1127 ResourceId id3 = child_resource_provider_->CreateResourceFromTextureMailbox(
1132 child_resource_provider_->CreateResourceFromTextureMailbox( 1128 TextureMailbox(shared_bitmap_ptr, gfx::Size(1, 1)),
1133 TextureMailbox(shared_bitmap_ptr, gfx::Size(1, 1)), 1129 SingleReleaseCallbackImpl::Create(base::Bind(
1134 SingleReleaseCallbackImpl::Create(base::Bind( 1130 &SharedBitmapReleaseCallback, base::Passed(&shared_bitmap))));
1135 &SharedBitmapReleaseCallback, base::Passed(&shared_bitmap))));
1136 1131
1137 ReturnedResourceArray returned_to_child; 1132 ReturnedResourceArray returned_to_child;
1138 int child_id = 1133 int child_id =
1139 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1134 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
1140 { 1135 {
1141 // Transfer some resources to the parent. 1136 // Transfer some resources to the parent.
1142 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1137 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1143 resource_ids_to_transfer.push_back(id1); 1138 resource_ids_to_transfer.push_back(id1);
1144 resource_ids_to_transfer.push_back(id2); 1139 resource_ids_to_transfer.push_back(id2);
1145 resource_ids_to_transfer.push_back(id3); 1140 resource_ids_to_transfer.push_back(id3);
(...skipping 12 matching lines...) Expand all
1158 resource_ids_to_receive.insert(id1); 1153 resource_ids_to_receive.insert(id1);
1159 resource_ids_to_receive.insert(id2); 1154 resource_ids_to_receive.insert(id2);
1160 resource_ids_to_receive.insert(id3); 1155 resource_ids_to_receive.insert(id3);
1161 resource_provider_->DeclareUsedResourcesFromChild(child_id, 1156 resource_provider_->DeclareUsedResourcesFromChild(child_id,
1162 resource_ids_to_receive); 1157 resource_ids_to_receive);
1163 } 1158 }
1164 1159
1165 EXPECT_EQ(3u, resource_provider_->num_resources()); 1160 EXPECT_EQ(3u, resource_provider_->num_resources());
1166 ResourceProvider::ResourceIdMap resource_map = 1161 ResourceProvider::ResourceIdMap resource_map =
1167 resource_provider_->GetChildToParentMap(child_id); 1162 resource_provider_->GetChildToParentMap(child_id);
1168 ResourceProvider::ResourceId mapped_id1 = resource_map[id1]; 1163 ResourceId mapped_id1 = resource_map[id1];
1169 ResourceProvider::ResourceId mapped_id2 = resource_map[id2]; 1164 ResourceId mapped_id2 = resource_map[id2];
1170 ResourceProvider::ResourceId mapped_id3 = resource_map[id3]; 1165 ResourceId mapped_id3 = resource_map[id3];
1171 EXPECT_NE(0u, mapped_id1); 1166 EXPECT_NE(0u, mapped_id1);
1172 EXPECT_NE(0u, mapped_id2); 1167 EXPECT_NE(0u, mapped_id2);
1173 EXPECT_NE(0u, mapped_id3); 1168 EXPECT_NE(0u, mapped_id3);
1174 EXPECT_FALSE(resource_provider_->InUseByConsumer(id1)); 1169 EXPECT_FALSE(resource_provider_->InUseByConsumer(id1));
1175 EXPECT_FALSE(resource_provider_->InUseByConsumer(id2)); 1170 EXPECT_FALSE(resource_provider_->InUseByConsumer(id2));
1176 EXPECT_FALSE(resource_provider_->InUseByConsumer(id3)); 1171 EXPECT_FALSE(resource_provider_->InUseByConsumer(id3));
1177 1172
1178 uint8_t result[4] = { 0 }; 1173 uint8_t result[4] = { 0 };
1179 GetResourcePixels( 1174 GetResourcePixels(
1180 resource_provider_.get(), context(), mapped_id1, size, format, result); 1175 resource_provider_.get(), context(), mapped_id1, size, format, result);
(...skipping 28 matching lines...) Expand all
1209 1204
1210 // Transfer resources back from the parent to the child. Set no resources as 1205 // Transfer resources back from the parent to the child. Set no resources as
1211 // being in use. 1206 // being in use.
1212 ResourceProvider::ResourceIdSet no_resources; 1207 ResourceProvider::ResourceIdSet no_resources;
1213 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources); 1208 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
1214 1209
1215 ASSERT_EQ(3u, returned_to_child.size()); 1210 ASSERT_EQ(3u, returned_to_child.size());
1216 EXPECT_EQ(0u, returned_to_child[0].sync_point); 1211 EXPECT_EQ(0u, returned_to_child[0].sync_point);
1217 EXPECT_EQ(0u, returned_to_child[1].sync_point); 1212 EXPECT_EQ(0u, returned_to_child[1].sync_point);
1218 EXPECT_EQ(0u, returned_to_child[2].sync_point); 1213 EXPECT_EQ(0u, returned_to_child[2].sync_point);
1219 std::set<ResourceProvider::ResourceId> expected_ids; 1214 std::set<ResourceId> expected_ids;
1220 expected_ids.insert(id1); 1215 expected_ids.insert(id1);
1221 expected_ids.insert(id2); 1216 expected_ids.insert(id2);
1222 expected_ids.insert(id3); 1217 expected_ids.insert(id3);
1223 std::set<ResourceProvider::ResourceId> returned_ids; 1218 std::set<ResourceId> returned_ids;
1224 for (unsigned i = 0; i < 3; i++) 1219 for (unsigned i = 0; i < 3; i++)
1225 returned_ids.insert(returned_to_child[i].id); 1220 returned_ids.insert(returned_to_child[i].id);
1226 EXPECT_EQ(expected_ids, returned_ids); 1221 EXPECT_EQ(expected_ids, returned_ids);
1227 EXPECT_FALSE(returned_to_child[0].lost); 1222 EXPECT_FALSE(returned_to_child[0].lost);
1228 EXPECT_FALSE(returned_to_child[1].lost); 1223 EXPECT_FALSE(returned_to_child[1].lost);
1229 EXPECT_FALSE(returned_to_child[2].lost); 1224 EXPECT_FALSE(returned_to_child[2].lost);
1230 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child); 1225 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child);
1231 returned_to_child.clear(); 1226 returned_to_child.clear();
1232 } 1227 }
1233 EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id1)); 1228 EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id1));
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1278 EXPECT_EQ(0u, returned_to_child.size()); 1273 EXPECT_EQ(0u, returned_to_child.size());
1279 1274
1280 EXPECT_EQ(3u, resource_provider_->num_resources()); 1275 EXPECT_EQ(3u, resource_provider_->num_resources());
1281 resource_provider_->DestroyChild(child_id); 1276 resource_provider_->DestroyChild(child_id);
1282 EXPECT_EQ(0u, resource_provider_->num_resources()); 1277 EXPECT_EQ(0u, resource_provider_->num_resources());
1283 1278
1284 ASSERT_EQ(3u, returned_to_child.size()); 1279 ASSERT_EQ(3u, returned_to_child.size());
1285 EXPECT_EQ(0u, returned_to_child[0].sync_point); 1280 EXPECT_EQ(0u, returned_to_child[0].sync_point);
1286 EXPECT_EQ(0u, returned_to_child[1].sync_point); 1281 EXPECT_EQ(0u, returned_to_child[1].sync_point);
1287 EXPECT_EQ(0u, returned_to_child[2].sync_point); 1282 EXPECT_EQ(0u, returned_to_child[2].sync_point);
1288 std::set<ResourceProvider::ResourceId> expected_ids; 1283 std::set<ResourceId> expected_ids;
1289 expected_ids.insert(id1); 1284 expected_ids.insert(id1);
1290 expected_ids.insert(id2); 1285 expected_ids.insert(id2);
1291 expected_ids.insert(id3); 1286 expected_ids.insert(id3);
1292 std::set<ResourceProvider::ResourceId> returned_ids; 1287 std::set<ResourceId> returned_ids;
1293 for (unsigned i = 0; i < 3; i++) 1288 for (unsigned i = 0; i < 3; i++)
1294 returned_ids.insert(returned_to_child[i].id); 1289 returned_ids.insert(returned_to_child[i].id);
1295 EXPECT_EQ(expected_ids, returned_ids); 1290 EXPECT_EQ(expected_ids, returned_ids);
1296 EXPECT_FALSE(returned_to_child[0].lost); 1291 EXPECT_FALSE(returned_to_child[0].lost);
1297 EXPECT_FALSE(returned_to_child[1].lost); 1292 EXPECT_FALSE(returned_to_child[1].lost);
1298 EXPECT_FALSE(returned_to_child[2].lost); 1293 EXPECT_FALSE(returned_to_child[2].lost);
1299 } 1294 }
1300 1295
1301 TEST_P(ResourceProviderTest, TransferGLToSoftware) { 1296 TEST_P(ResourceProviderTest, TransferGLToSoftware) {
1302 if (GetParam() != ResourceProvider::RESOURCE_TYPE_BITMAP) 1297 if (GetParam() != ResourceProvider::RESOURCE_TYPE_BITMAP)
(...skipping 14 matching lines...) Expand all
1317 NULL, 1312 NULL,
1318 0, 1313 0,
1319 false, 1314 false,
1320 1)); 1315 1));
1321 1316
1322 gfx::Size size(1, 1); 1317 gfx::Size size(1, 1);
1323 ResourceFormat format = RGBA_8888; 1318 ResourceFormat format = RGBA_8888;
1324 size_t pixel_size = TextureSizeBytes(size, format); 1319 size_t pixel_size = TextureSizeBytes(size, format);
1325 ASSERT_EQ(4U, pixel_size); 1320 ASSERT_EQ(4U, pixel_size);
1326 1321
1327 ResourceProvider::ResourceId id1 = child_resource_provider->CreateResource( 1322 ResourceId id1 = child_resource_provider->CreateResource(
1328 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1323 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1329 uint8_t data1[4] = { 1, 2, 3, 4 }; 1324 uint8_t data1[4] = { 1, 2, 3, 4 };
1330 child_resource_provider->CopyToResource(id1, data1, size); 1325 child_resource_provider->CopyToResource(id1, data1, size);
1331 1326
1332 ReturnedResourceArray returned_to_child; 1327 ReturnedResourceArray returned_to_child;
1333 int child_id = 1328 int child_id =
1334 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1329 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
1335 { 1330 {
1336 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1331 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1337 resource_ids_to_transfer.push_back(id1); 1332 resource_ids_to_transfer.push_back(id1);
1338 TransferableResourceArray list; 1333 TransferableResourceArray list;
1339 child_resource_provider->PrepareSendToParent(resource_ids_to_transfer, 1334 child_resource_provider->PrepareSendToParent(resource_ids_to_transfer,
1340 &list); 1335 &list);
1341 ASSERT_EQ(1u, list.size()); 1336 ASSERT_EQ(1u, list.size());
1342 EXPECT_NE(0u, list[0].mailbox_holder.sync_point); 1337 EXPECT_NE(0u, list[0].mailbox_holder.sync_point);
1343 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), 1338 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D),
1344 list[0].mailbox_holder.texture_target); 1339 list[0].mailbox_holder.texture_target);
1345 EXPECT_TRUE(child_resource_provider->InUseByConsumer(id1)); 1340 EXPECT_TRUE(child_resource_provider->InUseByConsumer(id1));
1346 resource_provider_->ReceiveFromChild(child_id, list); 1341 resource_provider_->ReceiveFromChild(child_id, list);
1347 } 1342 }
1348 1343
1349 EXPECT_EQ(0u, resource_provider_->num_resources()); 1344 EXPECT_EQ(0u, resource_provider_->num_resources());
1350 ASSERT_EQ(1u, returned_to_child.size()); 1345 ASSERT_EQ(1u, returned_to_child.size());
1351 EXPECT_EQ(returned_to_child[0].id, id1); 1346 EXPECT_EQ(returned_to_child[0].id, id1);
1352 ResourceProvider::ResourceIdMap resource_map = 1347 ResourceProvider::ResourceIdMap resource_map =
1353 resource_provider_->GetChildToParentMap(child_id); 1348 resource_provider_->GetChildToParentMap(child_id);
1354 ResourceProvider::ResourceId mapped_id1 = resource_map[id1]; 1349 ResourceId mapped_id1 = resource_map[id1];
1355 EXPECT_EQ(0u, mapped_id1); 1350 EXPECT_EQ(0u, mapped_id1);
1356 1351
1357 resource_provider_->DestroyChild(child_id); 1352 resource_provider_->DestroyChild(child_id);
1358 EXPECT_EQ(0u, resource_provider_->num_resources()); 1353 EXPECT_EQ(0u, resource_provider_->num_resources());
1359 1354
1360 ASSERT_EQ(1u, returned_to_child.size()); 1355 ASSERT_EQ(1u, returned_to_child.size());
1361 EXPECT_FALSE(returned_to_child[0].lost); 1356 EXPECT_FALSE(returned_to_child[0].lost);
1362 } 1357 }
1363 1358
1364 TEST_P(ResourceProviderTest, TransferInvalidSoftware) { 1359 TEST_P(ResourceProviderTest, TransferInvalidSoftware) {
1365 if (GetParam() != ResourceProvider::RESOURCE_TYPE_BITMAP) 1360 if (GetParam() != ResourceProvider::RESOURCE_TYPE_BITMAP)
1366 return; 1361 return;
1367 1362
1368 gfx::Size size(1, 1); 1363 gfx::Size size(1, 1);
1369 ResourceFormat format = RGBA_8888; 1364 ResourceFormat format = RGBA_8888;
1370 size_t pixel_size = TextureSizeBytes(size, format); 1365 size_t pixel_size = TextureSizeBytes(size, format);
1371 ASSERT_EQ(4U, pixel_size); 1366 ASSERT_EQ(4U, pixel_size);
1372 1367
1373 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( 1368 ResourceId id1 = child_resource_provider_->CreateResource(
1374 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1369 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1375 uint8_t data1[4] = { 1, 2, 3, 4 }; 1370 uint8_t data1[4] = { 1, 2, 3, 4 };
1376 child_resource_provider_->CopyToResource(id1, data1, size); 1371 child_resource_provider_->CopyToResource(id1, data1, size);
1377 1372
1378 ReturnedResourceArray returned_to_child; 1373 ReturnedResourceArray returned_to_child;
1379 int child_id = 1374 int child_id =
1380 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1375 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
1381 { 1376 {
1382 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1377 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1383 resource_ids_to_transfer.push_back(id1); 1378 resource_ids_to_transfer.push_back(id1);
1384 TransferableResourceArray list; 1379 TransferableResourceArray list;
1385 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1380 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
1386 &list); 1381 &list);
1387 ASSERT_EQ(1u, list.size()); 1382 ASSERT_EQ(1u, list.size());
1388 // Make invalid. 1383 // Make invalid.
1389 list[0].mailbox_holder.mailbox.name[1] = 5; 1384 list[0].mailbox_holder.mailbox.name[1] = 5;
1390 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); 1385 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
1391 resource_provider_->ReceiveFromChild(child_id, list); 1386 resource_provider_->ReceiveFromChild(child_id, list);
1392 } 1387 }
1393 1388
1394 EXPECT_EQ(1u, resource_provider_->num_resources()); 1389 EXPECT_EQ(1u, resource_provider_->num_resources());
1395 EXPECT_EQ(0u, returned_to_child.size()); 1390 EXPECT_EQ(0u, returned_to_child.size());
1396 1391
1397 ResourceProvider::ResourceIdMap resource_map = 1392 ResourceProvider::ResourceIdMap resource_map =
1398 resource_provider_->GetChildToParentMap(child_id); 1393 resource_provider_->GetChildToParentMap(child_id);
1399 ResourceProvider::ResourceId mapped_id1 = resource_map[id1]; 1394 ResourceId mapped_id1 = resource_map[id1];
1400 EXPECT_NE(0u, mapped_id1); 1395 EXPECT_NE(0u, mapped_id1);
1401 { 1396 {
1402 ResourceProvider::ScopedReadLockSoftware lock(resource_provider_.get(), 1397 ResourceProvider::ScopedReadLockSoftware lock(resource_provider_.get(),
1403 mapped_id1); 1398 mapped_id1);
1404 EXPECT_FALSE(lock.valid()); 1399 EXPECT_FALSE(lock.valid());
1405 } 1400 }
1406 1401
1407 resource_provider_->DestroyChild(child_id); 1402 resource_provider_->DestroyChild(child_id);
1408 EXPECT_EQ(0u, resource_provider_->num_resources()); 1403 EXPECT_EQ(0u, resource_provider_->num_resources());
1409 1404
1410 ASSERT_EQ(1u, returned_to_child.size()); 1405 ASSERT_EQ(1u, returned_to_child.size());
1411 EXPECT_FALSE(returned_to_child[0].lost); 1406 EXPECT_FALSE(returned_to_child[0].lost);
1412 } 1407 }
1413 1408
1414 TEST_P(ResourceProviderTest, DeleteExportedResources) { 1409 TEST_P(ResourceProviderTest, DeleteExportedResources) {
1415 gfx::Size size(1, 1); 1410 gfx::Size size(1, 1);
1416 ResourceFormat format = RGBA_8888; 1411 ResourceFormat format = RGBA_8888;
1417 size_t pixel_size = TextureSizeBytes(size, format); 1412 size_t pixel_size = TextureSizeBytes(size, format);
1418 ASSERT_EQ(4U, pixel_size); 1413 ASSERT_EQ(4U, pixel_size);
1419 1414
1420 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( 1415 ResourceId id1 = child_resource_provider_->CreateResource(
1421 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1416 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1422 uint8_t data1[4] = { 1, 2, 3, 4 }; 1417 uint8_t data1[4] = { 1, 2, 3, 4 };
1423 child_resource_provider_->CopyToResource(id1, data1, size); 1418 child_resource_provider_->CopyToResource(id1, data1, size);
1424 1419
1425 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( 1420 ResourceId id2 = child_resource_provider_->CreateResource(
1426 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1421 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1427 uint8_t data2[4] = {5, 5, 5, 5}; 1422 uint8_t data2[4] = {5, 5, 5, 5};
1428 child_resource_provider_->CopyToResource(id2, data2, size); 1423 child_resource_provider_->CopyToResource(id2, data2, size);
1429 1424
1430 ReturnedResourceArray returned_to_child; 1425 ReturnedResourceArray returned_to_child;
1431 int child_id = 1426 int child_id =
1432 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1427 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
1433 { 1428 {
1434 // Transfer some resources to the parent. 1429 // Transfer some resources to the parent.
1435 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1430 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
(...skipping 13 matching lines...) Expand all
1449 ResourceProvider::ResourceIdSet resource_ids_to_receive; 1444 ResourceProvider::ResourceIdSet resource_ids_to_receive;
1450 resource_ids_to_receive.insert(id1); 1445 resource_ids_to_receive.insert(id1);
1451 resource_ids_to_receive.insert(id2); 1446 resource_ids_to_receive.insert(id2);
1452 resource_provider_->DeclareUsedResourcesFromChild(child_id, 1447 resource_provider_->DeclareUsedResourcesFromChild(child_id,
1453 resource_ids_to_receive); 1448 resource_ids_to_receive);
1454 } 1449 }
1455 1450
1456 EXPECT_EQ(2u, resource_provider_->num_resources()); 1451 EXPECT_EQ(2u, resource_provider_->num_resources());
1457 ResourceProvider::ResourceIdMap resource_map = 1452 ResourceProvider::ResourceIdMap resource_map =
1458 resource_provider_->GetChildToParentMap(child_id); 1453 resource_provider_->GetChildToParentMap(child_id);
1459 ResourceProvider::ResourceId mapped_id1 = resource_map[id1]; 1454 ResourceId mapped_id1 = resource_map[id1];
1460 ResourceProvider::ResourceId mapped_id2 = resource_map[id2]; 1455 ResourceId mapped_id2 = resource_map[id2];
1461 EXPECT_NE(0u, mapped_id1); 1456 EXPECT_NE(0u, mapped_id1);
1462 EXPECT_NE(0u, mapped_id2); 1457 EXPECT_NE(0u, mapped_id2);
1463 EXPECT_FALSE(resource_provider_->InUseByConsumer(id1)); 1458 EXPECT_FALSE(resource_provider_->InUseByConsumer(id1));
1464 EXPECT_FALSE(resource_provider_->InUseByConsumer(id2)); 1459 EXPECT_FALSE(resource_provider_->InUseByConsumer(id2));
1465 1460
1466 { 1461 {
1467 // The parent transfers the resources to the grandparent. 1462 // The parent transfers the resources to the grandparent.
1468 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1463 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1469 resource_ids_to_transfer.push_back(mapped_id1); 1464 resource_ids_to_transfer.push_back(mapped_id1);
1470 resource_ids_to_transfer.push_back(mapped_id2); 1465 resource_ids_to_transfer.push_back(mapped_id2);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1506 EXPECT_FALSE(returned_to_child[1].lost); 1501 EXPECT_FALSE(returned_to_child[1].lost);
1507 } 1502 }
1508 } 1503 }
1509 1504
1510 TEST_P(ResourceProviderTest, DestroyChildWithExportedResources) { 1505 TEST_P(ResourceProviderTest, DestroyChildWithExportedResources) {
1511 gfx::Size size(1, 1); 1506 gfx::Size size(1, 1);
1512 ResourceFormat format = RGBA_8888; 1507 ResourceFormat format = RGBA_8888;
1513 size_t pixel_size = TextureSizeBytes(size, format); 1508 size_t pixel_size = TextureSizeBytes(size, format);
1514 ASSERT_EQ(4U, pixel_size); 1509 ASSERT_EQ(4U, pixel_size);
1515 1510
1516 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( 1511 ResourceId id1 = child_resource_provider_->CreateResource(
1517 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1512 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1518 uint8_t data1[4] = {1, 2, 3, 4}; 1513 uint8_t data1[4] = {1, 2, 3, 4};
1519 child_resource_provider_->CopyToResource(id1, data1, size); 1514 child_resource_provider_->CopyToResource(id1, data1, size);
1520 1515
1521 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( 1516 ResourceId id2 = child_resource_provider_->CreateResource(
1522 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1517 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1523 uint8_t data2[4] = {5, 5, 5, 5}; 1518 uint8_t data2[4] = {5, 5, 5, 5};
1524 child_resource_provider_->CopyToResource(id2, data2, size); 1519 child_resource_provider_->CopyToResource(id2, data2, size);
1525 1520
1526 ReturnedResourceArray returned_to_child; 1521 ReturnedResourceArray returned_to_child;
1527 int child_id = 1522 int child_id =
1528 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1523 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
1529 { 1524 {
1530 // Transfer some resources to the parent. 1525 // Transfer some resources to the parent.
1531 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1526 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
(...skipping 13 matching lines...) Expand all
1545 ResourceProvider::ResourceIdSet resource_ids_to_receive; 1540 ResourceProvider::ResourceIdSet resource_ids_to_receive;
1546 resource_ids_to_receive.insert(id1); 1541 resource_ids_to_receive.insert(id1);
1547 resource_ids_to_receive.insert(id2); 1542 resource_ids_to_receive.insert(id2);
1548 resource_provider_->DeclareUsedResourcesFromChild(child_id, 1543 resource_provider_->DeclareUsedResourcesFromChild(child_id,
1549 resource_ids_to_receive); 1544 resource_ids_to_receive);
1550 } 1545 }
1551 1546
1552 EXPECT_EQ(2u, resource_provider_->num_resources()); 1547 EXPECT_EQ(2u, resource_provider_->num_resources());
1553 ResourceProvider::ResourceIdMap resource_map = 1548 ResourceProvider::ResourceIdMap resource_map =
1554 resource_provider_->GetChildToParentMap(child_id); 1549 resource_provider_->GetChildToParentMap(child_id);
1555 ResourceProvider::ResourceId mapped_id1 = resource_map[id1]; 1550 ResourceId mapped_id1 = resource_map[id1];
1556 ResourceProvider::ResourceId mapped_id2 = resource_map[id2]; 1551 ResourceId mapped_id2 = resource_map[id2];
1557 EXPECT_NE(0u, mapped_id1); 1552 EXPECT_NE(0u, mapped_id1);
1558 EXPECT_NE(0u, mapped_id2); 1553 EXPECT_NE(0u, mapped_id2);
1559 EXPECT_FALSE(resource_provider_->InUseByConsumer(id1)); 1554 EXPECT_FALSE(resource_provider_->InUseByConsumer(id1));
1560 EXPECT_FALSE(resource_provider_->InUseByConsumer(id2)); 1555 EXPECT_FALSE(resource_provider_->InUseByConsumer(id2));
1561 1556
1562 { 1557 {
1563 // The parent transfers the resources to the grandparent. 1558 // The parent transfers the resources to the grandparent.
1564 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1559 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1565 resource_ids_to_transfer.push_back(mapped_id1); 1560 resource_ids_to_transfer.push_back(mapped_id1);
1566 resource_ids_to_transfer.push_back(mapped_id2); 1561 resource_ids_to_transfer.push_back(mapped_id2);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1619 EXPECT_TRUE(returned_to_child[0].lost); 1614 EXPECT_TRUE(returned_to_child[0].lost);
1620 } 1615 }
1621 } 1616 }
1622 1617
1623 TEST_P(ResourceProviderTest, DeleteTransferredResources) { 1618 TEST_P(ResourceProviderTest, DeleteTransferredResources) {
1624 gfx::Size size(1, 1); 1619 gfx::Size size(1, 1);
1625 ResourceFormat format = RGBA_8888; 1620 ResourceFormat format = RGBA_8888;
1626 size_t pixel_size = TextureSizeBytes(size, format); 1621 size_t pixel_size = TextureSizeBytes(size, format);
1627 ASSERT_EQ(4U, pixel_size); 1622 ASSERT_EQ(4U, pixel_size);
1628 1623
1629 ResourceProvider::ResourceId id = child_resource_provider_->CreateResource( 1624 ResourceId id = child_resource_provider_->CreateResource(
1630 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1625 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1631 uint8_t data[4] = { 1, 2, 3, 4 }; 1626 uint8_t data[4] = { 1, 2, 3, 4 };
1632 child_resource_provider_->CopyToResource(id, data, size); 1627 child_resource_provider_->CopyToResource(id, data, size);
1633 1628
1634 ReturnedResourceArray returned_to_child; 1629 ReturnedResourceArray returned_to_child;
1635 int child_id = 1630 int child_id =
1636 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1631 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
1637 { 1632 {
1638 // Transfer some resource to the parent. 1633 // Transfer some resource to the parent.
1639 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1634 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
(...skipping 30 matching lines...) Expand all
1670 } 1665 }
1671 EXPECT_EQ(0u, child_resource_provider_->num_resources()); 1666 EXPECT_EQ(0u, child_resource_provider_->num_resources());
1672 } 1667 }
1673 1668
1674 TEST_P(ResourceProviderTest, UnuseTransferredResources) { 1669 TEST_P(ResourceProviderTest, UnuseTransferredResources) {
1675 gfx::Size size(1, 1); 1670 gfx::Size size(1, 1);
1676 ResourceFormat format = RGBA_8888; 1671 ResourceFormat format = RGBA_8888;
1677 size_t pixel_size = TextureSizeBytes(size, format); 1672 size_t pixel_size = TextureSizeBytes(size, format);
1678 ASSERT_EQ(4U, pixel_size); 1673 ASSERT_EQ(4U, pixel_size);
1679 1674
1680 ResourceProvider::ResourceId id = child_resource_provider_->CreateResource( 1675 ResourceId id = child_resource_provider_->CreateResource(
1681 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1676 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1682 uint8_t data[4] = {1, 2, 3, 4}; 1677 uint8_t data[4] = {1, 2, 3, 4};
1683 child_resource_provider_->CopyToResource(id, data, size); 1678 child_resource_provider_->CopyToResource(id, data, size);
1684 1679
1685 ReturnedResourceArray returned_to_child; 1680 ReturnedResourceArray returned_to_child;
1686 int child_id = 1681 int child_id =
1687 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1682 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
1688 const ResourceProvider::ResourceIdMap& map = 1683 const ResourceProvider::ResourceIdMap& map =
1689 resource_provider_->GetChildToParentMap(child_id); 1684 resource_provider_->GetChildToParentMap(child_id);
1690 { 1685 {
1691 // Transfer some resource to the parent. 1686 // Transfer some resource to the parent.
1692 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1687 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1693 resource_ids_to_transfer.push_back(id); 1688 resource_ids_to_transfer.push_back(id);
1694 TransferableResourceArray list; 1689 TransferableResourceArray list;
1695 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1690 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
1696 &list); 1691 &list);
1697 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id)); 1692 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id));
1698 resource_provider_->ReceiveFromChild(child_id, list); 1693 resource_provider_->ReceiveFromChild(child_id, list);
1699 ResourceProvider::ResourceIdSet resource_ids_to_receive; 1694 ResourceProvider::ResourceIdSet resource_ids_to_receive;
1700 resource_ids_to_receive.insert(id); 1695 resource_ids_to_receive.insert(id);
1701 resource_provider_->DeclareUsedResourcesFromChild(child_id, 1696 resource_provider_->DeclareUsedResourcesFromChild(child_id,
1702 resource_ids_to_receive); 1697 resource_ids_to_receive);
1703 } 1698 }
1704 TransferableResourceArray sent_to_top_level; 1699 TransferableResourceArray sent_to_top_level;
1705 { 1700 {
1706 // Parent transfers to top-level. 1701 // Parent transfers to top-level.
1707 ASSERT_TRUE(map.find(id) != map.end()); 1702 ASSERT_TRUE(map.find(id) != map.end());
1708 ResourceProvider::ResourceId parent_id = map.find(id)->second; 1703 ResourceId parent_id = map.find(id)->second;
1709 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1704 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1710 resource_ids_to_transfer.push_back(parent_id); 1705 resource_ids_to_transfer.push_back(parent_id);
1711 resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1706 resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
1712 &sent_to_top_level); 1707 &sent_to_top_level);
1713 EXPECT_TRUE(resource_provider_->InUseByConsumer(parent_id)); 1708 EXPECT_TRUE(resource_provider_->InUseByConsumer(parent_id));
1714 } 1709 }
1715 { 1710 {
1716 // Stop using resource. 1711 // Stop using resource.
1717 ResourceProvider::ResourceIdSet empty; 1712 ResourceProvider::ResourceIdSet empty;
1718 resource_provider_->DeclareUsedResourcesFromChild(child_id, empty); 1713 resource_provider_->DeclareUsedResourcesFromChild(child_id, empty);
(...skipping 17 matching lines...) Expand all
1736 } 1731 }
1737 { 1732 {
1738 // Receive returns back from top-level. 1733 // Receive returns back from top-level.
1739 ReturnedResourceArray returned; 1734 ReturnedResourceArray returned;
1740 TransferableResource::ReturnResources(sent_to_top_level, &returned); 1735 TransferableResource::ReturnResources(sent_to_top_level, &returned);
1741 resource_provider_->ReceiveReturnsFromParent(returned); 1736 resource_provider_->ReceiveReturnsFromParent(returned);
1742 // Resource is still not yet returned to the child, since it's declared used 1737 // Resource is still not yet returned to the child, since it's declared used
1743 // in the parent. 1738 // in the parent.
1744 EXPECT_TRUE(returned_to_child.empty()); 1739 EXPECT_TRUE(returned_to_child.empty());
1745 ASSERT_TRUE(map.find(id) != map.end()); 1740 ASSERT_TRUE(map.find(id) != map.end());
1746 ResourceProvider::ResourceId parent_id = map.find(id)->second; 1741 ResourceId parent_id = map.find(id)->second;
1747 EXPECT_FALSE(resource_provider_->InUseByConsumer(parent_id)); 1742 EXPECT_FALSE(resource_provider_->InUseByConsumer(parent_id));
1748 } 1743 }
1749 { 1744 {
1750 sent_to_top_level.clear(); 1745 sent_to_top_level.clear();
1751 // Parent transfers again to top-level. 1746 // Parent transfers again to top-level.
1752 ASSERT_TRUE(map.find(id) != map.end()); 1747 ASSERT_TRUE(map.find(id) != map.end());
1753 ResourceProvider::ResourceId parent_id = map.find(id)->second; 1748 ResourceId parent_id = map.find(id)->second;
1754 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1749 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1755 resource_ids_to_transfer.push_back(parent_id); 1750 resource_ids_to_transfer.push_back(parent_id);
1756 resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1751 resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
1757 &sent_to_top_level); 1752 &sent_to_top_level);
1758 EXPECT_TRUE(resource_provider_->InUseByConsumer(parent_id)); 1753 EXPECT_TRUE(resource_provider_->InUseByConsumer(parent_id));
1759 } 1754 }
1760 { 1755 {
1761 // Receive returns back from top-level. 1756 // Receive returns back from top-level.
1762 ReturnedResourceArray returned; 1757 ReturnedResourceArray returned;
1763 TransferableResource::ReturnResources(sent_to_top_level, &returned); 1758 TransferableResource::ReturnResources(sent_to_top_level, &returned);
1764 resource_provider_->ReceiveReturnsFromParent(returned); 1759 resource_provider_->ReceiveReturnsFromParent(returned);
1765 // Resource is still not yet returned to the child, since it's still 1760 // Resource is still not yet returned to the child, since it's still
1766 // declared used in the parent. 1761 // declared used in the parent.
1767 EXPECT_TRUE(returned_to_child.empty()); 1762 EXPECT_TRUE(returned_to_child.empty());
1768 ASSERT_TRUE(map.find(id) != map.end()); 1763 ASSERT_TRUE(map.find(id) != map.end());
1769 ResourceProvider::ResourceId parent_id = map.find(id)->second; 1764 ResourceId parent_id = map.find(id)->second;
1770 EXPECT_FALSE(resource_provider_->InUseByConsumer(parent_id)); 1765 EXPECT_FALSE(resource_provider_->InUseByConsumer(parent_id));
1771 } 1766 }
1772 { 1767 {
1773 // Stop using resource. 1768 // Stop using resource.
1774 ResourceProvider::ResourceIdSet empty; 1769 ResourceProvider::ResourceIdSet empty;
1775 resource_provider_->DeclareUsedResourcesFromChild(child_id, empty); 1770 resource_provider_->DeclareUsedResourcesFromChild(child_id, empty);
1776 // Resource should have been returned to the child, since it's no longer in 1771 // Resource should have been returned to the child, since it's no longer in
1777 // use by the top-level. 1772 // use by the top-level.
1778 ASSERT_EQ(1u, returned_to_child.size()); 1773 ASSERT_EQ(1u, returned_to_child.size());
1779 EXPECT_EQ(id, returned_to_child[0].id); 1774 EXPECT_EQ(id, returned_to_child[0].id);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1826 1)); 1821 1));
1827 1822
1828 gfx::Size size(1, 1); 1823 gfx::Size size(1, 1);
1829 ResourceFormat format = RGBA_8888; 1824 ResourceFormat format = RGBA_8888;
1830 int child_texture_id = 1; 1825 int child_texture_id = 1;
1831 int parent_texture_id = 2; 1826 int parent_texture_id = 2;
1832 1827
1833 size_t pixel_size = TextureSizeBytes(size, format); 1828 size_t pixel_size = TextureSizeBytes(size, format);
1834 ASSERT_EQ(4U, pixel_size); 1829 ASSERT_EQ(4U, pixel_size);
1835 1830
1836 ResourceProvider::ResourceId id = child_resource_provider->CreateResource( 1831 ResourceId id = child_resource_provider->CreateResource(
1837 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, 1832 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
1838 format); 1833 format);
1839 1834
1840 // The new texture is created with GL_LINEAR. 1835 // The new texture is created with GL_LINEAR.
1841 EXPECT_CALL(*child_context, bindTexture(GL_TEXTURE_2D, child_texture_id)) 1836 EXPECT_CALL(*child_context, bindTexture(GL_TEXTURE_2D, child_texture_id))
1842 .Times(2); // Once to create and once to allocate. 1837 .Times(2); // Once to create and once to allocate.
1843 EXPECT_CALL(*child_context, 1838 EXPECT_CALL(*child_context,
1844 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); 1839 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
1845 EXPECT_CALL(*child_context, 1840 EXPECT_CALL(*child_context,
1846 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); 1841 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1908 Mock::VerifyAndClearExpectations(parent_context); 1903 Mock::VerifyAndClearExpectations(parent_context);
1909 1904
1910 ResourceProvider::ResourceIdSet resource_ids_to_receive; 1905 ResourceProvider::ResourceIdSet resource_ids_to_receive;
1911 resource_ids_to_receive.insert(id); 1906 resource_ids_to_receive.insert(id);
1912 parent_resource_provider->DeclareUsedResourcesFromChild( 1907 parent_resource_provider->DeclareUsedResourcesFromChild(
1913 child_id, resource_ids_to_receive); 1908 child_id, resource_ids_to_receive);
1914 Mock::VerifyAndClearExpectations(parent_context); 1909 Mock::VerifyAndClearExpectations(parent_context);
1915 } 1910 }
1916 ResourceProvider::ResourceIdMap resource_map = 1911 ResourceProvider::ResourceIdMap resource_map =
1917 parent_resource_provider->GetChildToParentMap(child_id); 1912 parent_resource_provider->GetChildToParentMap(child_id);
1918 ResourceProvider::ResourceId mapped_id = resource_map[id]; 1913 ResourceId mapped_id = resource_map[id];
1919 EXPECT_NE(0u, mapped_id); 1914 EXPECT_NE(0u, mapped_id);
1920 1915
1921 // The texture is set to |parent_filter| in the parent. 1916 // The texture is set to |parent_filter| in the parent.
1922 EXPECT_CALL(*parent_context, bindTexture(GL_TEXTURE_2D, parent_texture_id)); 1917 EXPECT_CALL(*parent_context, bindTexture(GL_TEXTURE_2D, parent_texture_id));
1923 EXPECT_CALL( 1918 EXPECT_CALL(
1924 *parent_context, 1919 *parent_context,
1925 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, parent_filter)); 1920 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, parent_filter));
1926 EXPECT_CALL( 1921 EXPECT_CALL(
1927 *parent_context, 1922 *parent_context,
1928 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, parent_filter)); 1923 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, parent_filter));
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1990 // All the logic below assumes that the sync points are all positive. 1985 // All the logic below assumes that the sync points are all positive.
1991 EXPECT_LT(0u, sync_point); 1986 EXPECT_LT(0u, sync_point);
1992 1987
1993 uint32 release_sync_point = 0; 1988 uint32 release_sync_point = 0;
1994 bool lost_resource = false; 1989 bool lost_resource = false;
1995 BlockingTaskRunner* main_thread_task_runner = NULL; 1990 BlockingTaskRunner* main_thread_task_runner = NULL;
1996 ReleaseCallbackImpl callback = base::Bind(ReleaseCallback, 1991 ReleaseCallbackImpl callback = base::Bind(ReleaseCallback,
1997 &release_sync_point, 1992 &release_sync_point,
1998 &lost_resource, 1993 &lost_resource,
1999 &main_thread_task_runner); 1994 &main_thread_task_runner);
2000 ResourceProvider::ResourceId resource = 1995 ResourceId resource = resource_provider_->CreateResourceFromTextureMailbox(
2001 resource_provider_->CreateResourceFromTextureMailbox( 1996 TextureMailbox(mailbox, GL_TEXTURE_2D, sync_point),
2002 TextureMailbox(mailbox, GL_TEXTURE_2D, sync_point), 1997 SingleReleaseCallbackImpl::Create(callback));
2003 SingleReleaseCallbackImpl::Create(callback));
2004 EXPECT_EQ(1u, context()->NumTextures()); 1998 EXPECT_EQ(1u, context()->NumTextures());
2005 EXPECT_EQ(0u, release_sync_point); 1999 EXPECT_EQ(0u, release_sync_point);
2006 { 2000 {
2007 // Transfer the resource, expect the sync points to be consistent. 2001 // Transfer the resource, expect the sync points to be consistent.
2008 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2002 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
2009 resource_ids_to_transfer.push_back(resource); 2003 resource_ids_to_transfer.push_back(resource);
2010 TransferableResourceArray list; 2004 TransferableResourceArray list;
2011 resource_provider_->PrepareSendToParent(resource_ids_to_transfer, &list); 2005 resource_provider_->PrepareSendToParent(resource_ids_to_transfer, &list);
2012 ASSERT_EQ(1u, list.size()); 2006 ASSERT_EQ(1u, list.size());
2013 EXPECT_LE(sync_point, list[0].mailbox_holder.sync_point); 2007 EXPECT_LE(sync_point, list[0].mailbox_holder.sync_point);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
2100 2094
2101 context()->waitSyncPoint(release_sync_point); 2095 context()->waitSyncPoint(release_sync_point);
2102 texture = 2096 texture =
2103 context()->createAndConsumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); 2097 context()->createAndConsumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name);
2104 context()->deleteTexture(texture); 2098 context()->deleteTexture(texture);
2105 } 2099 }
2106 2100
2107 TEST_P(ResourceProviderTest, LostResourceInParent) { 2101 TEST_P(ResourceProviderTest, LostResourceInParent) {
2108 gfx::Size size(1, 1); 2102 gfx::Size size(1, 1);
2109 ResourceFormat format = RGBA_8888; 2103 ResourceFormat format = RGBA_8888;
2110 ResourceProvider::ResourceId resource = 2104 ResourceId resource = child_resource_provider_->CreateResource(
2111 child_resource_provider_->CreateResource( 2105 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
2112 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
2113 format);
2114 child_resource_provider_->AllocateForTesting(resource); 2106 child_resource_provider_->AllocateForTesting(resource);
2115 // Expect a GL resource to be lost. 2107 // Expect a GL resource to be lost.
2116 bool should_lose_resource = 2108 bool should_lose_resource =
2117 GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE; 2109 GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE;
2118 2110
2119 ReturnedResourceArray returned_to_child; 2111 ReturnedResourceArray returned_to_child;
2120 int child_id = 2112 int child_id =
2121 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 2113 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
2122 { 2114 {
2123 // Transfer the resource to the parent. 2115 // Transfer the resource to the parent.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
2157 EXPECT_EQ(should_lose_resource, child_resource_provider_->IsLost(resource)); 2149 EXPECT_EQ(should_lose_resource, child_resource_provider_->IsLost(resource));
2158 2150
2159 // Lost resources stay in use in the parent forever. 2151 // Lost resources stay in use in the parent forever.
2160 EXPECT_EQ(should_lose_resource, 2152 EXPECT_EQ(should_lose_resource,
2161 child_resource_provider_->InUseByConsumer(resource)); 2153 child_resource_provider_->InUseByConsumer(resource));
2162 } 2154 }
2163 2155
2164 TEST_P(ResourceProviderTest, LostResourceInGrandParent) { 2156 TEST_P(ResourceProviderTest, LostResourceInGrandParent) {
2165 gfx::Size size(1, 1); 2157 gfx::Size size(1, 1);
2166 ResourceFormat format = RGBA_8888; 2158 ResourceFormat format = RGBA_8888;
2167 ResourceProvider::ResourceId resource = 2159 ResourceId resource = child_resource_provider_->CreateResource(
2168 child_resource_provider_->CreateResource( 2160 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
2169 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
2170 format);
2171 child_resource_provider_->AllocateForTesting(resource); 2161 child_resource_provider_->AllocateForTesting(resource);
2172 2162
2173 ReturnedResourceArray returned_to_child; 2163 ReturnedResourceArray returned_to_child;
2174 int child_id = 2164 int child_id =
2175 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 2165 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
2176 { 2166 {
2177 // Transfer the resource to the parent. 2167 // Transfer the resource to the parent.
2178 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2168 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
2179 resource_ids_to_transfer.push_back(resource); 2169 resource_ids_to_transfer.push_back(resource);
2180 TransferableResourceArray list; 2170 TransferableResourceArray list;
2181 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 2171 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
2182 &list); 2172 &list);
2183 EXPECT_EQ(1u, list.size()); 2173 EXPECT_EQ(1u, list.size());
2184 2174
2185 resource_provider_->ReceiveFromChild(child_id, list); 2175 resource_provider_->ReceiveFromChild(child_id, list);
2186 ResourceProvider::ResourceIdSet resource_ids_to_receive; 2176 ResourceProvider::ResourceIdSet resource_ids_to_receive;
2187 resource_ids_to_receive.insert(resource); 2177 resource_ids_to_receive.insert(resource);
2188 resource_provider_->DeclareUsedResourcesFromChild(child_id, 2178 resource_provider_->DeclareUsedResourcesFromChild(child_id,
2189 resource_ids_to_receive); 2179 resource_ids_to_receive);
2190 } 2180 }
2191 2181
2192 { 2182 {
2193 ResourceProvider::ResourceIdMap resource_map = 2183 ResourceProvider::ResourceIdMap resource_map =
2194 resource_provider_->GetChildToParentMap(child_id); 2184 resource_provider_->GetChildToParentMap(child_id);
2195 ResourceProvider::ResourceId parent_resource = resource_map[resource]; 2185 ResourceId parent_resource = resource_map[resource];
2196 EXPECT_NE(0u, parent_resource); 2186 EXPECT_NE(0u, parent_resource);
2197 2187
2198 // Transfer to a grandparent. 2188 // Transfer to a grandparent.
2199 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2189 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
2200 resource_ids_to_transfer.push_back(parent_resource); 2190 resource_ids_to_transfer.push_back(parent_resource);
2201 TransferableResourceArray list; 2191 TransferableResourceArray list;
2202 resource_provider_->PrepareSendToParent(resource_ids_to_transfer, &list); 2192 resource_provider_->PrepareSendToParent(resource_ids_to_transfer, &list);
2203 2193
2204 // Receive back a lost resource from the grandparent. 2194 // Receive back a lost resource from the grandparent.
2205 EXPECT_EQ(1u, list.size()); 2195 EXPECT_EQ(1u, list.size());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2238 2228
2239 // Lost resources stay in use in the parent forever. 2229 // Lost resources stay in use in the parent forever.
2240 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(resource)); 2230 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(resource));
2241 } 2231 }
2242 2232
2243 TEST_P(ResourceProviderTest, LostMailboxInParent) { 2233 TEST_P(ResourceProviderTest, LostMailboxInParent) {
2244 uint32 release_sync_point = 0; 2234 uint32 release_sync_point = 0;
2245 bool lost_resource = false; 2235 bool lost_resource = false;
2246 bool release_called = false; 2236 bool release_called = false;
2247 uint32 sync_point = 0; 2237 uint32 sync_point = 0;
2248 ResourceProvider::ResourceId resource = CreateChildMailbox( 2238 ResourceId resource = CreateChildMailbox(&release_sync_point, &lost_resource,
2249 &release_sync_point, &lost_resource, &release_called, &sync_point); 2239 &release_called, &sync_point);
2250 2240
2251 ReturnedResourceArray returned_to_child; 2241 ReturnedResourceArray returned_to_child;
2252 int child_id = 2242 int child_id =
2253 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 2243 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
2254 { 2244 {
2255 // Transfer the resource to the parent. 2245 // Transfer the resource to the parent.
2256 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2246 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
2257 resource_ids_to_transfer.push_back(resource); 2247 resource_ids_to_transfer.push_back(resource);
2258 TransferableResourceArray list; 2248 TransferableResourceArray list;
2259 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 2249 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2291 child_resource_provider_->DeleteResource(resource); 2281 child_resource_provider_->DeleteResource(resource);
2292 EXPECT_EQ(lost_resource, 2282 EXPECT_EQ(lost_resource,
2293 GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE); 2283 GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE);
2294 } 2284 }
2295 2285
2296 TEST_P(ResourceProviderTest, LostMailboxInGrandParent) { 2286 TEST_P(ResourceProviderTest, LostMailboxInGrandParent) {
2297 uint32 release_sync_point = 0; 2287 uint32 release_sync_point = 0;
2298 bool lost_resource = false; 2288 bool lost_resource = false;
2299 bool release_called = false; 2289 bool release_called = false;
2300 uint32 sync_point = 0; 2290 uint32 sync_point = 0;
2301 ResourceProvider::ResourceId resource = CreateChildMailbox( 2291 ResourceId resource = CreateChildMailbox(&release_sync_point, &lost_resource,
2302 &release_sync_point, &lost_resource, &release_called, &sync_point); 2292 &release_called, &sync_point);
2303 2293
2304 ReturnedResourceArray returned_to_child; 2294 ReturnedResourceArray returned_to_child;
2305 int child_id = 2295 int child_id =
2306 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 2296 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
2307 { 2297 {
2308 // Transfer the resource to the parent. 2298 // Transfer the resource to the parent.
2309 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2299 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
2310 resource_ids_to_transfer.push_back(resource); 2300 resource_ids_to_transfer.push_back(resource);
2311 TransferableResourceArray list; 2301 TransferableResourceArray list;
2312 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 2302 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
2313 &list); 2303 &list);
2314 EXPECT_EQ(1u, list.size()); 2304 EXPECT_EQ(1u, list.size());
2315 2305
2316 resource_provider_->ReceiveFromChild(child_id, list); 2306 resource_provider_->ReceiveFromChild(child_id, list);
2317 ResourceProvider::ResourceIdSet resource_ids_to_receive; 2307 ResourceProvider::ResourceIdSet resource_ids_to_receive;
2318 resource_ids_to_receive.insert(resource); 2308 resource_ids_to_receive.insert(resource);
2319 resource_provider_->DeclareUsedResourcesFromChild(child_id, 2309 resource_provider_->DeclareUsedResourcesFromChild(child_id,
2320 resource_ids_to_receive); 2310 resource_ids_to_receive);
2321 } 2311 }
2322 2312
2323 { 2313 {
2324 ResourceProvider::ResourceIdMap resource_map = 2314 ResourceProvider::ResourceIdMap resource_map =
2325 resource_provider_->GetChildToParentMap(child_id); 2315 resource_provider_->GetChildToParentMap(child_id);
2326 ResourceProvider::ResourceId parent_resource = resource_map[resource]; 2316 ResourceId parent_resource = resource_map[resource];
2327 EXPECT_NE(0u, parent_resource); 2317 EXPECT_NE(0u, parent_resource);
2328 2318
2329 // Transfer to a grandparent. 2319 // Transfer to a grandparent.
2330 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2320 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
2331 resource_ids_to_transfer.push_back(parent_resource); 2321 resource_ids_to_transfer.push_back(parent_resource);
2332 TransferableResourceArray list; 2322 TransferableResourceArray list;
2333 resource_provider_->PrepareSendToParent(resource_ids_to_transfer, &list); 2323 resource_provider_->PrepareSendToParent(resource_ids_to_transfer, &list);
2334 2324
2335 // Receive back a lost resource from the grandparent. 2325 // Receive back a lost resource from the grandparent.
2336 EXPECT_EQ(1u, list.size()); 2326 EXPECT_EQ(1u, list.size());
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2381 } 2371 }
2382 EXPECT_TRUE(release_called); 2372 EXPECT_TRUE(release_called);
2383 EXPECT_FALSE(lost_resource); 2373 EXPECT_FALSE(lost_resource);
2384 } 2374 }
2385 2375
2386 TEST_P(ResourceProviderTest, ShutdownWithExportedResource) { 2376 TEST_P(ResourceProviderTest, ShutdownWithExportedResource) {
2387 uint32 release_sync_point = 0; 2377 uint32 release_sync_point = 0;
2388 bool lost_resource = false; 2378 bool lost_resource = false;
2389 bool release_called = false; 2379 bool release_called = false;
2390 uint32 sync_point = 0; 2380 uint32 sync_point = 0;
2391 ResourceProvider::ResourceId resource = CreateChildMailbox( 2381 ResourceId resource = CreateChildMailbox(&release_sync_point, &lost_resource,
2392 &release_sync_point, &lost_resource, &release_called, &sync_point); 2382 &release_called, &sync_point);
2393 2383
2394 // Transfer the resource, so we can't release it properly on shutdown. 2384 // Transfer the resource, so we can't release it properly on shutdown.
2395 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2385 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
2396 resource_ids_to_transfer.push_back(resource); 2386 resource_ids_to_transfer.push_back(resource);
2397 TransferableResourceArray list; 2387 TransferableResourceArray list;
2398 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 2388 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
2399 &list); 2389 &list);
2400 2390
2401 EXPECT_EQ(0u, release_sync_point); 2391 EXPECT_EQ(0u, release_sync_point);
2402 EXPECT_FALSE(lost_resource); 2392 EXPECT_FALSE(lost_resource);
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
2464 gpu_memory_buffer_manager_.get(), 2454 gpu_memory_buffer_manager_.get(),
2465 NULL, 2455 NULL,
2466 0, 2456 0,
2467 false, 2457 false,
2468 1)); 2458 1));
2469 2459
2470 gfx::Size size(1, 1); 2460 gfx::Size size(1, 1);
2471 ResourceFormat format = RGBA_8888; 2461 ResourceFormat format = RGBA_8888;
2472 int texture_id = 1; 2462 int texture_id = 1;
2473 2463
2474 ResourceProvider::ResourceId id = resource_provider->CreateResource( 2464 ResourceId id = resource_provider->CreateResource(
2475 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 2465 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
2476 2466
2477 // Check that the texture gets created with the right sampler settings. 2467 // Check that the texture gets created with the right sampler settings.
2478 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)) 2468 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id))
2479 .Times(2); // Once to create and once to allocate. 2469 .Times(2); // Once to create and once to allocate.
2480 EXPECT_CALL(*context, 2470 EXPECT_CALL(*context,
2481 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); 2471 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
2482 EXPECT_CALL(*context, 2472 EXPECT_CALL(*context,
2483 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); 2473 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
2484 EXPECT_CALL( 2474 EXPECT_CALL(
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
2552 NULL, 2542 NULL,
2553 0, 2543 0,
2554 false, 2544 false,
2555 1)); 2545 1));
2556 2546
2557 gfx::Size size(1, 1); 2547 gfx::Size size(1, 1);
2558 ResourceFormat format = RGBA_8888; 2548 ResourceFormat format = RGBA_8888;
2559 int texture_id = 1; 2549 int texture_id = 1;
2560 2550
2561 // Check that the texture gets created with the right sampler settings. 2551 // Check that the texture gets created with the right sampler settings.
2562 ResourceProvider::ResourceId id = resource_provider->CreateManagedResource( 2552 ResourceId id = resource_provider->CreateManagedResource(
2563 size, GL_TEXTURE_2D, GL_CLAMP_TO_EDGE, 2553 size, GL_TEXTURE_2D, GL_CLAMP_TO_EDGE,
2564 ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 2554 ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
2565 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)); 2555 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id));
2566 EXPECT_CALL(*context, 2556 EXPECT_CALL(*context,
2567 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); 2557 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
2568 EXPECT_CALL(*context, 2558 EXPECT_CALL(*context,
2569 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); 2559 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
2570 EXPECT_CALL( 2560 EXPECT_CALL(
2571 *context, 2561 *context,
2572 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)); 2562 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE));
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
2606 false, 2596 false,
2607 1)); 2597 1));
2608 2598
2609 gfx::Size size(1, 1); 2599 gfx::Size size(1, 1);
2610 ResourceFormat format = RGBA_8888; 2600 ResourceFormat format = RGBA_8888;
2611 GLenum texture_pool = GL_TEXTURE_POOL_UNMANAGED_CHROMIUM; 2601 GLenum texture_pool = GL_TEXTURE_POOL_UNMANAGED_CHROMIUM;
2612 2602
2613 for (int texture_id = 1; texture_id <= 2; ++texture_id) { 2603 for (int texture_id = 1; texture_id <= 2; ++texture_id) {
2614 GLint wrap_mode = texture_id == 1 ? GL_CLAMP_TO_EDGE : GL_REPEAT; 2604 GLint wrap_mode = texture_id == 1 ? GL_CLAMP_TO_EDGE : GL_REPEAT;
2615 // Check that the texture gets created with the right sampler settings. 2605 // Check that the texture gets created with the right sampler settings.
2616 ResourceProvider::ResourceId id = resource_provider->CreateGLTexture( 2606 ResourceId id = resource_provider->CreateGLTexture(
2617 size, GL_TEXTURE_2D, texture_pool, wrap_mode, 2607 size, GL_TEXTURE_2D, texture_pool, wrap_mode,
2618 ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 2608 ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
2619 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)); 2609 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id));
2620 EXPECT_CALL(*context, 2610 EXPECT_CALL(*context,
2621 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); 2611 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
2622 EXPECT_CALL(*context, 2612 EXPECT_CALL(*context,
2623 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); 2613 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
2624 EXPECT_CALL(*context, 2614 EXPECT_CALL(*context,
2625 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap_mode)); 2615 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap_mode));
2626 EXPECT_CALL(*context, 2616 EXPECT_CALL(*context,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
2666 GLenum texture_pool = GL_TEXTURE_POOL_UNMANAGED_CHROMIUM; 2656 GLenum texture_pool = GL_TEXTURE_POOL_UNMANAGED_CHROMIUM;
2667 2657
2668 const ResourceProvider::TextureHint hints[4] = { 2658 const ResourceProvider::TextureHint hints[4] = {
2669 ResourceProvider::TEXTURE_HINT_DEFAULT, 2659 ResourceProvider::TEXTURE_HINT_DEFAULT,
2670 ResourceProvider::TEXTURE_HINT_IMMUTABLE, 2660 ResourceProvider::TEXTURE_HINT_IMMUTABLE,
2671 ResourceProvider::TEXTURE_HINT_FRAMEBUFFER, 2661 ResourceProvider::TEXTURE_HINT_FRAMEBUFFER,
2672 ResourceProvider::TEXTURE_HINT_IMMUTABLE_FRAMEBUFFER, 2662 ResourceProvider::TEXTURE_HINT_IMMUTABLE_FRAMEBUFFER,
2673 }; 2663 };
2674 for (GLuint texture_id = 1; texture_id <= arraysize(hints); ++texture_id) { 2664 for (GLuint texture_id = 1; texture_id <= arraysize(hints); ++texture_id) {
2675 // Check that the texture gets created with the right sampler settings. 2665 // Check that the texture gets created with the right sampler settings.
2676 ResourceProvider::ResourceId id = 2666 ResourceId id = resource_provider->CreateGLTexture(
2677 resource_provider->CreateGLTexture(size, 2667 size, GL_TEXTURE_2D, texture_pool, GL_CLAMP_TO_EDGE,
2678 GL_TEXTURE_2D, 2668 hints[texture_id - 1], format);
2679 texture_pool,
2680 GL_CLAMP_TO_EDGE,
2681 hints[texture_id - 1],
2682 format);
2683 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)); 2669 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id));
2684 EXPECT_CALL(*context, 2670 EXPECT_CALL(*context,
2685 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); 2671 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
2686 EXPECT_CALL(*context, 2672 EXPECT_CALL(*context,
2687 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); 2673 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
2688 EXPECT_CALL( 2674 EXPECT_CALL(
2689 *context, 2675 *context,
2690 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)); 2676 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE));
2691 EXPECT_CALL( 2677 EXPECT_CALL(
2692 *context, 2678 *context,
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2737 uint32 release_sync_point = 0; 2723 uint32 release_sync_point = 0;
2738 bool lost_resource = false; 2724 bool lost_resource = false;
2739 BlockingTaskRunner* main_thread_task_runner = NULL; 2725 BlockingTaskRunner* main_thread_task_runner = NULL;
2740 scoped_ptr<SingleReleaseCallbackImpl> callback = 2726 scoped_ptr<SingleReleaseCallbackImpl> callback =
2741 SingleReleaseCallbackImpl::Create(base::Bind(&ReleaseCallback, 2727 SingleReleaseCallbackImpl::Create(base::Bind(&ReleaseCallback,
2742 &release_sync_point, 2728 &release_sync_point,
2743 &lost_resource, 2729 &lost_resource,
2744 &main_thread_task_runner)); 2730 &main_thread_task_runner));
2745 TextureMailbox mailbox(shared_bitmap.get(), size); 2731 TextureMailbox mailbox(shared_bitmap.get(), size);
2746 2732
2747 ResourceProvider::ResourceId id = 2733 ResourceId id = resource_provider->CreateResourceFromTextureMailbox(
2748 resource_provider->CreateResourceFromTextureMailbox( 2734 mailbox, callback.Pass());
2749 mailbox, callback.Pass());
2750 EXPECT_NE(0u, id); 2735 EXPECT_NE(0u, id);
2751 2736
2752 { 2737 {
2753 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id); 2738 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id);
2754 const SkBitmap* sk_bitmap = lock.sk_bitmap(); 2739 const SkBitmap* sk_bitmap = lock.sk_bitmap();
2755 EXPECT_EQ(sk_bitmap->width(), size.width()); 2740 EXPECT_EQ(sk_bitmap->width(), size.width());
2756 EXPECT_EQ(sk_bitmap->height(), size.height()); 2741 EXPECT_EQ(sk_bitmap->height(), size.height());
2757 EXPECT_EQ(*sk_bitmap->getAddr32(16, 16), kBadBeef); 2742 EXPECT_EQ(*sk_bitmap->getAddr32(16, 16), kBadBeef);
2758 } 2743 }
2759 2744
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
2806 BlockingTaskRunner* mailbox_task_runner = NULL; 2791 BlockingTaskRunner* mailbox_task_runner = NULL;
2807 scoped_ptr<SingleReleaseCallbackImpl> callback = 2792 scoped_ptr<SingleReleaseCallbackImpl> callback =
2808 SingleReleaseCallbackImpl::Create(base::Bind(&ReleaseCallback, 2793 SingleReleaseCallbackImpl::Create(base::Bind(&ReleaseCallback,
2809 &release_sync_point, 2794 &release_sync_point,
2810 &lost_resource, 2795 &lost_resource,
2811 &mailbox_task_runner)); 2796 &mailbox_task_runner));
2812 2797
2813 TextureMailbox mailbox(gpu_mailbox, target, sync_point); 2798 TextureMailbox mailbox(gpu_mailbox, target, sync_point);
2814 mailbox.set_nearest_neighbor(mailbox_nearest_neighbor); 2799 mailbox.set_nearest_neighbor(mailbox_nearest_neighbor);
2815 2800
2816 ResourceProvider::ResourceId id = 2801 ResourceId id = resource_provider->CreateResourceFromTextureMailbox(
2817 resource_provider->CreateResourceFromTextureMailbox(mailbox, 2802 mailbox, callback.Pass());
2818 callback.Pass());
2819 EXPECT_NE(0u, id); 2803 EXPECT_NE(0u, id);
2820 2804
2821 Mock::VerifyAndClearExpectations(context); 2805 Mock::VerifyAndClearExpectations(context);
2822 2806
2823 { 2807 {
2824 // Mailbox sync point WaitSyncPoint before using the texture. 2808 // Mailbox sync point WaitSyncPoint before using the texture.
2825 EXPECT_CALL(*context, waitSyncPoint(sync_point)); 2809 EXPECT_CALL(*context, waitSyncPoint(sync_point));
2826 resource_provider->WaitSyncPointIfNeeded(id); 2810 resource_provider->WaitSyncPointIfNeeded(id);
2827 Mock::VerifyAndClearExpectations(context); 2811 Mock::VerifyAndClearExpectations(context);
2828 2812
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
2947 EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); 2931 EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0);
2948 EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); 2932 EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0);
2949 2933
2950 gpu::Mailbox gpu_mailbox; 2934 gpu::Mailbox gpu_mailbox;
2951 memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1); 2935 memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1);
2952 scoped_ptr<SingleReleaseCallbackImpl> callback = 2936 scoped_ptr<SingleReleaseCallbackImpl> callback =
2953 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)); 2937 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback));
2954 2938
2955 TextureMailbox mailbox(gpu_mailbox, target, sync_point); 2939 TextureMailbox mailbox(gpu_mailbox, target, sync_point);
2956 2940
2957 ResourceProvider::ResourceId id = 2941 ResourceId id = resource_provider->CreateResourceFromTextureMailbox(
2958 resource_provider->CreateResourceFromTextureMailbox( 2942 mailbox, callback.Pass());
2959 mailbox, callback.Pass());
2960 EXPECT_NE(0u, id); 2943 EXPECT_NE(0u, id);
2961 2944
2962 Mock::VerifyAndClearExpectations(context); 2945 Mock::VerifyAndClearExpectations(context);
2963 2946
2964 { 2947 {
2965 // Mailbox sync point WaitSyncPoint before using the texture. 2948 // Mailbox sync point WaitSyncPoint before using the texture.
2966 EXPECT_CALL(*context, waitSyncPoint(sync_point)); 2949 EXPECT_CALL(*context, waitSyncPoint(sync_point));
2967 resource_provider->WaitSyncPointIfNeeded(id); 2950 resource_provider->WaitSyncPointIfNeeded(id);
2968 Mock::VerifyAndClearExpectations(context); 2951 Mock::VerifyAndClearExpectations(context);
2969 2952
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
3022 EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); 3005 EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0);
3023 EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); 3006 EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0);
3024 3007
3025 gpu::Mailbox gpu_mailbox; 3008 gpu::Mailbox gpu_mailbox;
3026 memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1); 3009 memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1);
3027 scoped_ptr<SingleReleaseCallbackImpl> callback = 3010 scoped_ptr<SingleReleaseCallbackImpl> callback =
3028 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)); 3011 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback));
3029 3012
3030 TextureMailbox mailbox(gpu_mailbox, target, sync_point); 3013 TextureMailbox mailbox(gpu_mailbox, target, sync_point);
3031 3014
3032 ResourceProvider::ResourceId id = 3015 ResourceId id = resource_provider->CreateResourceFromTextureMailbox(
3033 resource_provider->CreateResourceFromTextureMailbox(mailbox, 3016 mailbox, callback.Pass());
3034 callback.Pass());
3035 EXPECT_NE(0u, id); 3017 EXPECT_NE(0u, id);
3036 3018
3037 Mock::VerifyAndClearExpectations(context); 3019 Mock::VerifyAndClearExpectations(context);
3038 3020
3039 { 3021 {
3040 // First call to WaitSyncPointIfNeeded should call waitSyncPoint. 3022 // First call to WaitSyncPointIfNeeded should call waitSyncPoint.
3041 EXPECT_CALL(*context, waitSyncPoint(sync_point)); 3023 EXPECT_CALL(*context, waitSyncPoint(sync_point));
3042 resource_provider->WaitSyncPointIfNeeded(id); 3024 resource_provider->WaitSyncPointIfNeeded(id);
3043 Mock::VerifyAndClearExpectations(context); 3025 Mock::VerifyAndClearExpectations(context);
3044 3026
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
3081 EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); 3063 EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0);
3082 EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); 3064 EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0);
3083 3065
3084 gpu::Mailbox gpu_mailbox; 3066 gpu::Mailbox gpu_mailbox;
3085 memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1); 3067 memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1);
3086 scoped_ptr<SingleReleaseCallbackImpl> callback = 3068 scoped_ptr<SingleReleaseCallbackImpl> callback =
3087 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)); 3069 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback));
3088 3070
3089 TextureMailbox mailbox(gpu_mailbox, target, sync_point); 3071 TextureMailbox mailbox(gpu_mailbox, target, sync_point);
3090 3072
3091 ResourceProvider::ResourceId id = 3073 ResourceId id = resource_provider->CreateResourceFromTextureMailbox(
3092 resource_provider->CreateResourceFromTextureMailbox(mailbox, 3074 mailbox, callback.Pass());
3093 callback.Pass());
3094 EXPECT_NE(0u, id); 3075 EXPECT_NE(0u, id);
3095 3076
3096 Mock::VerifyAndClearExpectations(context); 3077 Mock::VerifyAndClearExpectations(context);
3097 3078
3098 { 3079 {
3099 // WaitSyncPointIfNeeded with sync_point == 0 shouldn't call waitSyncPoint. 3080 // WaitSyncPointIfNeeded with sync_point == 0 shouldn't call waitSyncPoint.
3100 EXPECT_CALL(*context, waitSyncPoint(_)).Times(0); 3081 EXPECT_CALL(*context, waitSyncPoint(_)).Times(0);
3101 resource_provider->WaitSyncPointIfNeeded(id); 3082 resource_provider->WaitSyncPointIfNeeded(id);
3102 Mock::VerifyAndClearExpectations(context); 3083 Mock::VerifyAndClearExpectations(context);
3103 } 3084 }
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
3194 shared_bitmap_manager_.get(), 3175 shared_bitmap_manager_.get(),
3195 gpu_memory_buffer_manager_.get(), 3176 gpu_memory_buffer_manager_.get(),
3196 NULL, 3177 NULL,
3197 0, 3178 0,
3198 false, 3179 false,
3199 1)); 3180 1));
3200 3181
3201 gfx::Size size(2, 2); 3182 gfx::Size size(2, 2);
3202 gfx::Vector2d offset(0, 0); 3183 gfx::Vector2d offset(0, 0);
3203 ResourceFormat format = RGBA_8888; 3184 ResourceFormat format = RGBA_8888;
3204 ResourceProvider::ResourceId id = 0; 3185 ResourceId id = 0;
3205 uint8_t pixels[16] = { 0 }; 3186 uint8_t pixels[16] = { 0 };
3206 int texture_id = 123; 3187 int texture_id = 123;
3207 3188
3208 // Lazy allocation. Don't allocate when creating the resource. 3189 // Lazy allocation. Don't allocate when creating the resource.
3209 id = resource_provider->CreateResource( 3190 id = resource_provider->CreateResource(
3210 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 3191 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
3211 3192
3212 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); 3193 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id));
3213 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(1); 3194 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(1);
3214 resource_provider->CreateForTesting(id); 3195 resource_provider->CreateForTesting(id);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
3282 const ResourceFormat formats[2] = {RGBA_8888, BGRA_8888}; 3263 const ResourceFormat formats[2] = {RGBA_8888, BGRA_8888};
3283 const ResourceProvider::TextureHint hints[4] = { 3264 const ResourceProvider::TextureHint hints[4] = {
3284 ResourceProvider::TEXTURE_HINT_DEFAULT, 3265 ResourceProvider::TEXTURE_HINT_DEFAULT,
3285 ResourceProvider::TEXTURE_HINT_IMMUTABLE, 3266 ResourceProvider::TEXTURE_HINT_IMMUTABLE,
3286 ResourceProvider::TEXTURE_HINT_FRAMEBUFFER, 3267 ResourceProvider::TEXTURE_HINT_FRAMEBUFFER,
3287 ResourceProvider::TEXTURE_HINT_IMMUTABLE_FRAMEBUFFER, 3268 ResourceProvider::TEXTURE_HINT_IMMUTABLE_FRAMEBUFFER,
3288 }; 3269 };
3289 for (size_t i = 0; i < arraysize(formats); ++i) { 3270 for (size_t i = 0; i < arraysize(formats); ++i) {
3290 for (GLuint texture_id = 1; texture_id <= arraysize(hints); ++texture_id) { 3271 for (GLuint texture_id = 1; texture_id <= arraysize(hints); ++texture_id) {
3291 // Lazy allocation. Don't allocate when creating the resource. 3272 // Lazy allocation. Don't allocate when creating the resource.
3292 ResourceProvider::ResourceId id = resource_provider->CreateResource( 3273 ResourceId id = resource_provider->CreateResource(
3293 size, GL_CLAMP_TO_EDGE, hints[texture_id - 1], formats[i]); 3274 size, GL_CLAMP_TO_EDGE, hints[texture_id - 1], formats[i]);
3294 3275
3295 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); 3276 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id));
3296 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); 3277 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2);
3297 bool is_immutable_hint = 3278 bool is_immutable_hint =
3298 hints[texture_id - 1] & ResourceProvider::TEXTURE_HINT_IMMUTABLE; 3279 hints[texture_id - 1] & ResourceProvider::TEXTURE_HINT_IMMUTABLE;
3299 bool support_immutable_texture = 3280 bool support_immutable_texture =
3300 is_immutable_hint && formats[i] == RGBA_8888; 3281 is_immutable_hint && formats[i] == RGBA_8888;
3301 EXPECT_CALL(*context, texStorage2DEXT(_, _, _, 2, 2)) 3282 EXPECT_CALL(*context, texStorage2DEXT(_, _, _, 2, 2))
3302 .Times(support_immutable_texture ? 1 : 0); 3283 .Times(support_immutable_texture ? 1 : 0);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
3342 3323
3343 const ResourceProvider::TextureHint hints[4] = { 3324 const ResourceProvider::TextureHint hints[4] = {
3344 ResourceProvider::TEXTURE_HINT_DEFAULT, 3325 ResourceProvider::TEXTURE_HINT_DEFAULT,
3345 ResourceProvider::TEXTURE_HINT_IMMUTABLE, 3326 ResourceProvider::TEXTURE_HINT_IMMUTABLE,
3346 ResourceProvider::TEXTURE_HINT_FRAMEBUFFER, 3327 ResourceProvider::TEXTURE_HINT_FRAMEBUFFER,
3347 ResourceProvider::TEXTURE_HINT_IMMUTABLE_FRAMEBUFFER, 3328 ResourceProvider::TEXTURE_HINT_IMMUTABLE_FRAMEBUFFER,
3348 }; 3329 };
3349 for (size_t i = 0; i < arraysize(formats); ++i) { 3330 for (size_t i = 0; i < arraysize(formats); ++i) {
3350 for (GLuint texture_id = 1; texture_id <= arraysize(hints); ++texture_id) { 3331 for (GLuint texture_id = 1; texture_id <= arraysize(hints); ++texture_id) {
3351 // Lazy allocation. Don't allocate when creating the resource. 3332 // Lazy allocation. Don't allocate when creating the resource.
3352 ResourceProvider::ResourceId id = resource_provider->CreateResource( 3333 ResourceId id = resource_provider->CreateResource(
3353 size, GL_CLAMP_TO_EDGE, hints[texture_id - 1], formats[i]); 3334 size, GL_CLAMP_TO_EDGE, hints[texture_id - 1], formats[i]);
3354 3335
3355 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); 3336 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id));
3356 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); 3337 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2);
3357 bool is_immutable_hint = 3338 bool is_immutable_hint =
3358 hints[texture_id - 1] & ResourceProvider::TEXTURE_HINT_IMMUTABLE; 3339 hints[texture_id - 1] & ResourceProvider::TEXTURE_HINT_IMMUTABLE;
3359 EXPECT_CALL(*context, texStorage2DEXT(_, _, _, 2, 2)) 3340 EXPECT_CALL(*context, texStorage2DEXT(_, _, _, 2, 2))
3360 .Times(is_immutable_hint ? 1 : 0); 3341 .Times(is_immutable_hint ? 1 : 0);
3361 EXPECT_CALL(*context, texImage2D(_, _, _, 2, 2, _, _, _, _)) 3342 EXPECT_CALL(*context, texImage2D(_, _, _, 2, 2, _, _, _, _))
3362 .Times(is_immutable_hint ? 0 : 1); 3343 .Times(is_immutable_hint ? 0 : 1);
(...skipping 14 matching lines...) Expand all
3377 new StrictMock<AllocationTrackingContext3D>); 3358 new StrictMock<AllocationTrackingContext3D>);
3378 AllocationTrackingContext3D* context = context_owned.get(); 3359 AllocationTrackingContext3D* context = context_owned.get();
3379 3360
3380 FakeOutputSurfaceClient output_surface_client; 3361 FakeOutputSurfaceClient output_surface_client;
3381 scoped_ptr<OutputSurface> output_surface( 3362 scoped_ptr<OutputSurface> output_surface(
3382 FakeOutputSurface::Create3d(context_owned.Pass())); 3363 FakeOutputSurface::Create3d(context_owned.Pass()));
3383 CHECK(output_surface->BindToClient(&output_surface_client)); 3364 CHECK(output_surface->BindToClient(&output_surface_client));
3384 3365
3385 gfx::Size size(2, 2); 3366 gfx::Size size(2, 2);
3386 ResourceFormat format = RGBA_8888; 3367 ResourceFormat format = RGBA_8888;
3387 ResourceProvider::ResourceId id = 0; 3368 ResourceId id = 0;
3388 int texture_id = 123; 3369 int texture_id = 123;
3389 3370
3390 scoped_ptr<ResourceProvider> resource_provider( 3371 scoped_ptr<ResourceProvider> resource_provider(
3391 ResourceProvider::Create(output_surface.get(), 3372 ResourceProvider::Create(output_surface.get(),
3392 shared_bitmap_manager_.get(), 3373 shared_bitmap_manager_.get(),
3393 gpu_memory_buffer_manager_.get(), 3374 gpu_memory_buffer_manager_.get(),
3394 NULL, 3375 NULL,
3395 0, 3376 0,
3396 false, 3377 false,
3397 1)); 3378 1));
(...skipping 26 matching lines...) Expand all
3424 new StrictMock<AllocationTrackingContext3D>); 3405 new StrictMock<AllocationTrackingContext3D>);
3425 AllocationTrackingContext3D* context = context_owned.get(); 3406 AllocationTrackingContext3D* context = context_owned.get();
3426 3407
3427 FakeOutputSurfaceClient output_surface_client; 3408 FakeOutputSurfaceClient output_surface_client;
3428 scoped_ptr<OutputSurface> output_surface( 3409 scoped_ptr<OutputSurface> output_surface(
3429 FakeOutputSurface::Create3d(context_owned.Pass())); 3410 FakeOutputSurface::Create3d(context_owned.Pass()));
3430 CHECK(output_surface->BindToClient(&output_surface_client)); 3411 CHECK(output_surface->BindToClient(&output_surface_client));
3431 3412
3432 gfx::Size size(2, 2); 3413 gfx::Size size(2, 2);
3433 ResourceFormat format = RGBA_8888; 3414 ResourceFormat format = RGBA_8888;
3434 ResourceProvider::ResourceId id = 0; 3415 ResourceId id = 0;
3435 int texture_id = 123; 3416 int texture_id = 123;
3436 3417
3437 scoped_ptr<ResourceProvider> resource_provider( 3418 scoped_ptr<ResourceProvider> resource_provider(
3438 ResourceProvider::Create(output_surface.get(), 3419 ResourceProvider::Create(output_surface.get(),
3439 shared_bitmap_manager_.get(), 3420 shared_bitmap_manager_.get(),
3440 gpu_memory_buffer_manager_.get(), 3421 gpu_memory_buffer_manager_.get(),
3441 NULL, 3422 NULL,
3442 0, 3423 0,
3443 false, 3424 false,
3444 1)); 3425 1));
(...skipping 26 matching lines...) Expand all
3471 new NiceMock<AllocationTrackingContext3D>); 3452 new NiceMock<AllocationTrackingContext3D>);
3472 AllocationTrackingContext3D* context = context_owned.get(); 3453 AllocationTrackingContext3D* context = context_owned.get();
3473 3454
3474 FakeOutputSurfaceClient output_surface_client; 3455 FakeOutputSurfaceClient output_surface_client;
3475 scoped_ptr<OutputSurface> output_surface( 3456 scoped_ptr<OutputSurface> output_surface(
3476 FakeOutputSurface::Create3d(context_owned.Pass())); 3457 FakeOutputSurface::Create3d(context_owned.Pass()));
3477 CHECK(output_surface->BindToClient(&output_surface_client)); 3458 CHECK(output_surface->BindToClient(&output_surface_client));
3478 3459
3479 gfx::Size size(2, 2); 3460 gfx::Size size(2, 2);
3480 ResourceFormat format = RGBA_8888; 3461 ResourceFormat format = RGBA_8888;
3481 ResourceProvider::ResourceId id = 0; 3462 ResourceId id = 0;
3482 int texture_id = 123; 3463 int texture_id = 123;
3483 3464
3484 scoped_ptr<ResourceProvider> resource_provider( 3465 scoped_ptr<ResourceProvider> resource_provider(
3485 ResourceProvider::Create(output_surface.get(), 3466 ResourceProvider::Create(output_surface.get(),
3486 shared_bitmap_manager_.get(), 3467 shared_bitmap_manager_.get(),
3487 gpu_memory_buffer_manager_.get(), 3468 gpu_memory_buffer_manager_.get(),
3488 NULL, 3469 NULL,
3489 0, 3470 0,
3490 false, 3471 false,
3491 1)); 3472 1));
(...skipping 23 matching lines...) Expand all
3515 3496
3516 FakeOutputSurfaceClient output_surface_client; 3497 FakeOutputSurfaceClient output_surface_client;
3517 scoped_ptr<OutputSurface> output_surface( 3498 scoped_ptr<OutputSurface> output_surface(
3518 FakeOutputSurface::Create3d(context_owned.Pass())); 3499 FakeOutputSurface::Create3d(context_owned.Pass()));
3519 CHECK(output_surface->BindToClient(&output_surface_client)); 3500 CHECK(output_surface->BindToClient(&output_surface_client));
3520 3501
3521 const int kWidth = 2; 3502 const int kWidth = 2;
3522 const int kHeight = 2; 3503 const int kHeight = 2;
3523 gfx::Size size(kWidth, kHeight); 3504 gfx::Size size(kWidth, kHeight);
3524 ResourceFormat format = RGBA_8888; 3505 ResourceFormat format = RGBA_8888;
3525 ResourceProvider::ResourceId id = 0; 3506 ResourceId id = 0;
3526 const unsigned kTextureId = 123u; 3507 const unsigned kTextureId = 123u;
3527 const unsigned kImageId = 234u; 3508 const unsigned kImageId = 234u;
3528 3509
3529 scoped_ptr<ResourceProvider> resource_provider( 3510 scoped_ptr<ResourceProvider> resource_provider(
3530 ResourceProvider::Create(output_surface.get(), 3511 ResourceProvider::Create(output_surface.get(),
3531 shared_bitmap_manager_.get(), 3512 shared_bitmap_manager_.get(),
3532 gpu_memory_buffer_manager_.get(), 3513 gpu_memory_buffer_manager_.get(),
3533 NULL, 3514 NULL,
3534 0, 3515 0,
3535 false, 3516 false,
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
3600 3581
3601 FakeOutputSurfaceClient output_surface_client; 3582 FakeOutputSurfaceClient output_surface_client;
3602 scoped_ptr<OutputSurface> output_surface( 3583 scoped_ptr<OutputSurface> output_surface(
3603 FakeOutputSurface::Create3d(context_owned.Pass())); 3584 FakeOutputSurface::Create3d(context_owned.Pass()));
3604 ASSERT_TRUE(output_surface->BindToClient(&output_surface_client)); 3585 ASSERT_TRUE(output_surface->BindToClient(&output_surface_client));
3605 3586
3606 const int kWidth = 2; 3587 const int kWidth = 2;
3607 const int kHeight = 2; 3588 const int kHeight = 2;
3608 gfx::Size size(kWidth, kHeight); 3589 gfx::Size size(kWidth, kHeight);
3609 ResourceFormat format = RGBA_8888; 3590 ResourceFormat format = RGBA_8888;
3610 ResourceProvider::ResourceId source_id = 0; 3591 ResourceId source_id = 0;
3611 ResourceProvider::ResourceId dest_id = 0; 3592 ResourceId dest_id = 0;
3612 const unsigned kSourceTextureId = 123u; 3593 const unsigned kSourceTextureId = 123u;
3613 const unsigned kDestTextureId = 321u; 3594 const unsigned kDestTextureId = 321u;
3614 const unsigned kImageId = 234u; 3595 const unsigned kImageId = 234u;
3615 3596
3616 scoped_ptr<ResourceProvider> resource_provider( 3597 scoped_ptr<ResourceProvider> resource_provider(
3617 ResourceProvider::Create(output_surface.get(), 3598 ResourceProvider::Create(output_surface.get(),
3618 shared_bitmap_manager_.get(), 3599 shared_bitmap_manager_.get(),
3619 gpu_memory_buffer_manager_.get(), 3600 gpu_memory_buffer_manager_.get(),
3620 NULL, 3601 NULL,
3621 0, 3602 0,
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
3691 scoped_ptr<ResourceProvider> resource_provider( 3672 scoped_ptr<ResourceProvider> resource_provider(
3692 ResourceProvider::Create(output_surface.get(), 3673 ResourceProvider::Create(output_surface.get(),
3693 shared_bitmap_manager_.get(), 3674 shared_bitmap_manager_.get(),
3694 gpu_memory_buffer_manager_.get(), 3675 gpu_memory_buffer_manager_.get(),
3695 NULL, 3676 NULL,
3696 0, 3677 0,
3697 false, 3678 false,
3698 1)); 3679 1));
3699 int texture_id = 123; 3680 int texture_id = 123;
3700 3681
3701 ResourceProvider::ResourceId id = resource_provider->CreateResource( 3682 ResourceId id = resource_provider->CreateResource(
3702 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, ETC1); 3683 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, ETC1);
3703 EXPECT_NE(0u, id); 3684 EXPECT_NE(0u, id);
3704 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); 3685 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id));
3705 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); 3686 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2);
3706 resource_provider->AllocateForTesting(id); 3687 resource_provider->AllocateForTesting(id);
3707 3688
3708 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); 3689 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1);
3709 resource_provider->DeleteResource(id); 3690 resource_provider->DeleteResource(id);
3710 } 3691 }
3711 3692
(...skipping 16 matching lines...) Expand all
3728 ResourceProvider::Create(output_surface.get(), 3709 ResourceProvider::Create(output_surface.get(),
3729 shared_bitmap_manager_.get(), 3710 shared_bitmap_manager_.get(),
3730 gpu_memory_buffer_manager_.get(), 3711 gpu_memory_buffer_manager_.get(),
3731 NULL, 3712 NULL,
3732 0, 3713 0,
3733 false, 3714 false,
3734 1)); 3715 1));
3735 int texture_id = 123; 3716 int texture_id = 123;
3736 uint8_t pixels[8]; 3717 uint8_t pixels[8];
3737 3718
3738 ResourceProvider::ResourceId id = resource_provider->CreateResource( 3719 ResourceId id = resource_provider->CreateResource(
3739 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, ETC1); 3720 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, ETC1);
3740 EXPECT_NE(0u, id); 3721 EXPECT_NE(0u, id);
3741 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); 3722 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id));
3742 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(3); 3723 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(3);
3743 EXPECT_CALL(*context, 3724 EXPECT_CALL(*context,
3744 compressedTexImage2D( 3725 compressedTexImage2D(
3745 _, 0, _, size.width(), size.height(), _, _, _)).Times(1); 3726 _, 0, _, size.width(), size.height(), _, _, _)).Times(1);
3746 resource_provider->CopyToResource(id, pixels, size); 3727 resource_provider->CopyToResource(id, pixels, size);
3747 3728
3748 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); 3729 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
3787 size_t kTextureAllocationChunkSize = 1; 3768 size_t kTextureAllocationChunkSize = 1;
3788 scoped_ptr<ResourceProvider> resource_provider( 3769 scoped_ptr<ResourceProvider> resource_provider(
3789 ResourceProvider::Create(output_surface.get(), 3770 ResourceProvider::Create(output_surface.get(),
3790 shared_bitmap_manager.get(), 3771 shared_bitmap_manager.get(),
3791 NULL, 3772 NULL,
3792 NULL, 3773 NULL,
3793 0, 3774 0,
3794 false, 3775 false,
3795 kTextureAllocationChunkSize)); 3776 kTextureAllocationChunkSize));
3796 3777
3797 ResourceProvider::ResourceId id = resource_provider->CreateResource( 3778 ResourceId id = resource_provider->CreateResource(
3798 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, 3779 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
3799 format); 3780 format);
3800 resource_provider->AllocateForTesting(id); 3781 resource_provider->AllocateForTesting(id);
3801 Mock::VerifyAndClearExpectations(context); 3782 Mock::VerifyAndClearExpectations(context);
3802 3783
3803 DCHECK_EQ(2u, context->PeekTextureId()); 3784 DCHECK_EQ(2u, context->PeekTextureId());
3804 resource_provider->DeleteResource(id); 3785 resource_provider->DeleteResource(id);
3805 } 3786 }
3806 3787
3807 { 3788 {
3808 size_t kTextureAllocationChunkSize = 8; 3789 size_t kTextureAllocationChunkSize = 8;
3809 scoped_ptr<ResourceProvider> resource_provider( 3790 scoped_ptr<ResourceProvider> resource_provider(
3810 ResourceProvider::Create(output_surface.get(), 3791 ResourceProvider::Create(output_surface.get(),
3811 shared_bitmap_manager.get(), 3792 shared_bitmap_manager.get(),
3812 NULL, 3793 NULL,
3813 NULL, 3794 NULL,
3814 0, 3795 0,
3815 false, 3796 false,
3816 kTextureAllocationChunkSize)); 3797 kTextureAllocationChunkSize));
3817 3798
3818 ResourceProvider::ResourceId id = resource_provider->CreateResource( 3799 ResourceId id = resource_provider->CreateResource(
3819 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, 3800 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
3820 format); 3801 format);
3821 resource_provider->AllocateForTesting(id); 3802 resource_provider->AllocateForTesting(id);
3822 Mock::VerifyAndClearExpectations(context); 3803 Mock::VerifyAndClearExpectations(context);
3823 3804
3824 DCHECK_EQ(10u, context->PeekTextureId()); 3805 DCHECK_EQ(10u, context->PeekTextureId());
3825 resource_provider->DeleteResource(id); 3806 resource_provider->DeleteResource(id);
3826 } 3807 }
3827 } 3808 }
3828 3809
3829 } // namespace 3810 } // namespace
3830 } // namespace cc 3811 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/resource_provider.cc ('k') | cc/resources/returned_resource.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698