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

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

Issue 2508203004: Add hints for potential overlay promotion on android. (Closed)
Patch Set: added CC_EXPORT Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
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 <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 683 matching lines...) Expand 10 before | Expand all | Expand 10 after
694 resource_provider_->ReceiveFromChild(child_id, list); 694 resource_provider_->ReceiveFromChild(child_id, list);
695 EXPECT_NE(list[0].mailbox_holder.sync_token, 695 EXPECT_NE(list[0].mailbox_holder.sync_token,
696 context3d_->last_waited_sync_token()); 696 context3d_->last_waited_sync_token());
697 { 697 {
698 resource_provider_->WaitSyncTokenIfNeeded(list[0].id); 698 resource_provider_->WaitSyncTokenIfNeeded(list[0].id);
699 ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), 699 ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(),
700 list[0].id); 700 list[0].id);
701 } 701 }
702 EXPECT_EQ(list[0].mailbox_holder.sync_token, 702 EXPECT_EQ(list[0].mailbox_holder.sync_token,
703 context3d_->last_waited_sync_token()); 703 context3d_->last_waited_sync_token());
704 ResourceProvider::ResourceIdSet resource_ids_to_receive; 704 ResourceIdSet resource_ids_to_receive;
705 resource_ids_to_receive.insert(id1); 705 resource_ids_to_receive.insert(id1);
706 resource_ids_to_receive.insert(id2); 706 resource_ids_to_receive.insert(id2);
707 resource_ids_to_receive.insert(id3); 707 resource_ids_to_receive.insert(id3);
708 resource_ids_to_receive.insert(id4); 708 resource_ids_to_receive.insert(id4);
709 resource_provider_->DeclareUsedResourcesFromChild(child_id, 709 resource_provider_->DeclareUsedResourcesFromChild(child_id,
710 resource_ids_to_receive); 710 resource_ids_to_receive);
711 } 711 }
712 712
713 EXPECT_EQ(4u, resource_provider_->num_resources()); 713 EXPECT_EQ(4u, resource_provider_->num_resources());
714 ResourceProvider::ResourceIdMap resource_map = 714 ResourceProvider::ResourceIdMap resource_map =
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
779 // be in-use. 779 // be in-use.
780 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); 780 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
781 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); 781 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
782 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3)); 782 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3));
783 } 783 }
784 { 784 {
785 EXPECT_EQ(0u, returned_to_child.size()); 785 EXPECT_EQ(0u, returned_to_child.size());
786 786
787 // Transfer resources back from the parent to the child. Set no resources as 787 // Transfer resources back from the parent to the child. Set no resources as
788 // being in use. 788 // being in use.
789 ResourceProvider::ResourceIdSet no_resources; 789 ResourceIdSet no_resources;
790 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources); 790 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
791 791
792 ASSERT_EQ(4u, returned_to_child.size()); 792 ASSERT_EQ(4u, returned_to_child.size());
793 EXPECT_TRUE(returned_to_child[0].sync_token.HasData()); 793 EXPECT_TRUE(returned_to_child[0].sync_token.HasData());
794 EXPECT_TRUE(returned_to_child[1].sync_token.HasData()); 794 EXPECT_TRUE(returned_to_child[1].sync_token.HasData());
795 EXPECT_TRUE(returned_to_child[2].sync_token.HasData()); 795 EXPECT_TRUE(returned_to_child[2].sync_token.HasData());
796 EXPECT_TRUE(returned_to_child[3].sync_token.HasData()); 796 EXPECT_TRUE(returned_to_child[3].sync_token.HasData());
797 EXPECT_FALSE(returned_to_child[0].lost); 797 EXPECT_FALSE(returned_to_child[0].lost);
798 EXPECT_FALSE(returned_to_child[1].lost); 798 EXPECT_FALSE(returned_to_child[1].lost);
799 EXPECT_FALSE(returned_to_child[2].lost); 799 EXPECT_FALSE(returned_to_child[2].lost);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 list[1].mailbox_holder.texture_target); 849 list[1].mailbox_holder.texture_target);
850 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), 850 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D),
851 list[2].mailbox_holder.texture_target); 851 list[2].mailbox_holder.texture_target);
852 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), 852 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES),
853 list[3].mailbox_holder.texture_target); 853 list[3].mailbox_holder.texture_target);
854 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); 854 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
855 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); 855 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
856 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3)); 856 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3));
857 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id4)); 857 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id4));
858 resource_provider_->ReceiveFromChild(child_id, list); 858 resource_provider_->ReceiveFromChild(child_id, list);
859 ResourceProvider::ResourceIdSet resource_ids_to_receive; 859 ResourceIdSet resource_ids_to_receive;
860 resource_ids_to_receive.insert(id1); 860 resource_ids_to_receive.insert(id1);
861 resource_ids_to_receive.insert(id2); 861 resource_ids_to_receive.insert(id2);
862 resource_ids_to_receive.insert(id3); 862 resource_ids_to_receive.insert(id3);
863 resource_ids_to_receive.insert(id4); 863 resource_ids_to_receive.insert(id4);
864 resource_provider_->DeclareUsedResourcesFromChild(child_id, 864 resource_provider_->DeclareUsedResourcesFromChild(child_id,
865 resource_ids_to_receive); 865 resource_ids_to_receive);
866 } 866 }
867 867
868 EXPECT_EQ(0u, returned_to_child.size()); 868 EXPECT_EQ(0u, returned_to_child.size());
869 869
870 EXPECT_EQ(4u, resource_provider_->num_resources()); 870 EXPECT_EQ(4u, resource_provider_->num_resources());
871 resource_provider_->DestroyChild(child_id); 871 resource_provider_->DestroyChild(child_id);
872 EXPECT_EQ(0u, resource_provider_->num_resources()); 872 EXPECT_EQ(0u, resource_provider_->num_resources());
873 873
874 ASSERT_EQ(4u, returned_to_child.size()); 874 ASSERT_EQ(4u, returned_to_child.size());
875 EXPECT_TRUE(returned_to_child[0].sync_token.HasData()); 875 EXPECT_TRUE(returned_to_child[0].sync_token.HasData());
876 EXPECT_TRUE(returned_to_child[1].sync_token.HasData()); 876 EXPECT_TRUE(returned_to_child[1].sync_token.HasData());
877 EXPECT_TRUE(returned_to_child[2].sync_token.HasData()); 877 EXPECT_TRUE(returned_to_child[2].sync_token.HasData());
878 EXPECT_TRUE(returned_to_child[3].sync_token.HasData()); 878 EXPECT_TRUE(returned_to_child[3].sync_token.HasData());
879 EXPECT_FALSE(returned_to_child[0].lost); 879 EXPECT_FALSE(returned_to_child[0].lost);
880 EXPECT_FALSE(returned_to_child[1].lost); 880 EXPECT_FALSE(returned_to_child[1].lost);
881 EXPECT_FALSE(returned_to_child[2].lost); 881 EXPECT_FALSE(returned_to_child[2].lost);
882 EXPECT_FALSE(returned_to_child[3].lost); 882 EXPECT_FALSE(returned_to_child[3].lost);
883 } 883 }
884 884
885 #if defined(OS_ANDROID)
886 TEST_P(ResourceProviderTest, OverlayPromotionHint) {
887 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE)
888 return;
889
890 GLuint external_texture_id = child_context_->createExternalTexture();
891
892 gpu::Mailbox external_mailbox;
893 child_context_->genMailboxCHROMIUM(external_mailbox.name);
894 child_context_->produceTextureDirectCHROMIUM(
895 external_texture_id, GL_TEXTURE_EXTERNAL_OES, external_mailbox.name);
896 gpu::SyncToken external_sync_token;
897 child_context_->genSyncToken(child_context_->insertFenceSync(),
898 external_sync_token.GetData());
899 EXPECT_TRUE(external_sync_token.HasData());
900
901 TextureMailbox id1_mailbox(external_mailbox, external_sync_token,
902 GL_TEXTURE_EXTERNAL_OES);
903 id1_mailbox.set_wants_promotion_hint(true);
904 id1_mailbox.set_is_overlay_candidate(true);
905 id1_mailbox.set_is_backed_by_surface_texture(true);
906 ResourceId id1 = child_resource_provider_->CreateResourceFromTextureMailbox(
907 id1_mailbox,
908 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)));
909
910 TextureMailbox id2_mailbox(external_mailbox, external_sync_token,
911 GL_TEXTURE_EXTERNAL_OES);
912 id2_mailbox.set_wants_promotion_hint(false);
913 id2_mailbox.set_is_overlay_candidate(true);
914 id2_mailbox.set_is_backed_by_surface_texture(false);
915 ResourceId id2 = child_resource_provider_->CreateResourceFromTextureMailbox(
916 id2_mailbox,
917 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)));
918
919 ReturnedResourceArray returned_to_child;
920 int child_id =
921 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
922
923 {
924 // Transfer some resources to the parent.
925 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
926 resource_ids_to_transfer.push_back(id1);
927 resource_ids_to_transfer.push_back(id2);
928
929 child_resource_provider_->GenerateSyncTokenForResources(
930 resource_ids_to_transfer);
931
932 TransferableResourceArray list;
933 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
934 &list);
935 ASSERT_EQ(2u, list.size());
936 resource_provider_->ReceiveFromChild(child_id, list);
937 {
938 resource_provider_->WaitSyncTokenIfNeeded(list[0].id);
939 ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(),
940 list[0].id);
941 }
942
943 EXPECT_EQ(list[0].mailbox_holder.sync_token,
944 context3d_->last_waited_sync_token());
945 ResourceIdSet resource_ids_to_receive;
946 resource_ids_to_receive.insert(id1);
947 resource_ids_to_receive.insert(id2);
948 resource_provider_->DeclareUsedResourcesFromChild(child_id,
949 resource_ids_to_receive);
950 }
951
952 EXPECT_EQ(2u, resource_provider_->num_resources());
953 ResourceProvider::ResourceIdMap resource_map =
954 resource_provider_->GetChildToParentMap(child_id);
955 ResourceId mapped_id1 = resource_map[id1];
956 ResourceId mapped_id2 = resource_map[id2];
957 EXPECT_NE(0u, mapped_id1);
958 EXPECT_NE(0u, mapped_id2);
959
960 // Make sure that the request for a promotion hint was noticed.
961 EXPECT_TRUE(resource_provider_->IsOverlayCandidate(mapped_id1));
962 EXPECT_TRUE(resource_provider_->IsBackedBySurfaceTexture(mapped_id1));
963 EXPECT_TRUE(resource_provider_->WantsPromotionHint(mapped_id1));
964
965 EXPECT_TRUE(resource_provider_->IsOverlayCandidate(mapped_id2));
966 EXPECT_FALSE(resource_provider_->IsBackedBySurfaceTexture(mapped_id2));
967 EXPECT_FALSE(resource_provider_->WantsPromotionHint(mapped_id2));
968
969 EXPECT_EQ(1u, resource_provider_->CountPromotionHintRequestsForTesting());
970
971 // ResourceProvider maintains a set of promotion hint requests that should be
972 // cleared when resources are deleted.
973 resource_provider_->DeclareUsedResourcesFromChild(child_id, ResourceIdSet());
974 EXPECT_EQ(2u, returned_to_child.size());
975 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child);
976
977 EXPECT_EQ(0u, resource_provider_->CountPromotionHintRequestsForTesting());
978
979 resource_provider_->DestroyChild(child_id);
980 }
981 #endif
982
885 class ResourceProviderTestNoSyncToken : public ResourceProviderTest { 983 class ResourceProviderTestNoSyncToken : public ResourceProviderTest {
886 public: 984 public:
887 ResourceProviderTestNoSyncToken() : ResourceProviderTest(false) { 985 ResourceProviderTestNoSyncToken() : ResourceProviderTest(false) {
888 EXPECT_EQ(ResourceProvider::RESOURCE_TYPE_GL_TEXTURE, GetParam()); 986 EXPECT_EQ(ResourceProvider::RESOURCE_TYPE_GL_TEXTURE, GetParam());
889 } 987 }
890 }; 988 };
891 989
892 TEST_P(ResourceProviderTestNoSyncToken, TransferGLResources) { 990 TEST_P(ResourceProviderTestNoSyncToken, TransferGLResources) {
893 gfx::Size size(1, 1); 991 gfx::Size size(1, 1);
894 ResourceFormat format = RGBA_8888; 992 ResourceFormat format = RGBA_8888;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
944 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1042 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
945 &list); 1043 &list);
946 ASSERT_EQ(3u, list.size()); 1044 ASSERT_EQ(3u, list.size());
947 // Standard resources shouldn't require creating and sending a sync point. 1045 // Standard resources shouldn't require creating and sending a sync point.
948 EXPECT_FALSE(list[0].mailbox_holder.sync_token.HasData()); 1046 EXPECT_FALSE(list[0].mailbox_holder.sync_token.HasData());
949 EXPECT_FALSE(list[1].mailbox_holder.sync_token.HasData()); 1047 EXPECT_FALSE(list[1].mailbox_holder.sync_token.HasData());
950 // A given sync point should be passed through. 1048 // A given sync point should be passed through.
951 EXPECT_EQ(external_sync_token, list[2].mailbox_holder.sync_token); 1049 EXPECT_EQ(external_sync_token, list[2].mailbox_holder.sync_token);
952 resource_provider_->ReceiveFromChild(child_id, list); 1050 resource_provider_->ReceiveFromChild(child_id, list);
953 1051
954 ResourceProvider::ResourceIdSet resource_ids_to_receive; 1052 ResourceIdSet resource_ids_to_receive;
955 resource_ids_to_receive.insert(id1); 1053 resource_ids_to_receive.insert(id1);
956 resource_ids_to_receive.insert(id2); 1054 resource_ids_to_receive.insert(id2);
957 resource_ids_to_receive.insert(id3); 1055 resource_ids_to_receive.insert(id3);
958 resource_provider_->DeclareUsedResourcesFromChild(child_id, 1056 resource_provider_->DeclareUsedResourcesFromChild(child_id,
959 resource_ids_to_receive); 1057 resource_ids_to_receive);
960 } 1058 }
961 1059
962 { 1060 {
963 EXPECT_EQ(0u, returned_to_child.size()); 1061 EXPECT_EQ(0u, returned_to_child.size());
964 1062
965 // Transfer resources back from the parent to the child. Set no resources as 1063 // Transfer resources back from the parent to the child. Set no resources as
966 // being in use. 1064 // being in use.
967 ResourceProvider::ResourceIdSet no_resources; 1065 ResourceIdSet no_resources;
968 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources); 1066 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
969 1067
970 ASSERT_EQ(3u, returned_to_child.size()); 1068 ASSERT_EQ(3u, returned_to_child.size());
971 std::map<ResourceId, gpu::SyncToken> returned_sync_tokens; 1069 std::map<ResourceId, gpu::SyncToken> returned_sync_tokens;
972 for (const auto& returned : returned_to_child) 1070 for (const auto& returned : returned_to_child)
973 returned_sync_tokens[returned.id] = returned.sync_token; 1071 returned_sync_tokens[returned.id] = returned.sync_token;
974 1072
975 ASSERT_TRUE(returned_sync_tokens.find(id1) != returned_sync_tokens.end()); 1073 ASSERT_TRUE(returned_sync_tokens.find(id1) != returned_sync_tokens.end());
976 // No new sync point should be created transferring back. 1074 // No new sync point should be created transferring back.
977 ASSERT_TRUE(returned_sync_tokens.find(id1) != returned_sync_tokens.end()); 1075 ASSERT_TRUE(returned_sync_tokens.find(id1) != returned_sync_tokens.end());
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 &list); 1122 &list);
1025 ASSERT_EQ(1u, list.size()); 1123 ASSERT_EQ(1u, list.size());
1026 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); 1124 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
1027 1125
1028 resource_provider_->ReceiveFromChild(child_id, list); 1126 resource_provider_->ReceiveFromChild(child_id, list);
1029 1127
1030 resource_provider_->WaitSyncTokenIfNeeded(list[0].id); 1128 resource_provider_->WaitSyncTokenIfNeeded(list[0].id);
1031 ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), 1129 ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(),
1032 list[0].id); 1130 list[0].id);
1033 1131
1034 resource_provider_->DeclareUsedResourcesFromChild( 1132 resource_provider_->DeclareUsedResourcesFromChild(child_id,
1035 child_id, ResourceProvider::ResourceIdSet()); 1133 ResourceIdSet());
1036 EXPECT_EQ(0u, returned_to_child.size()); 1134 EXPECT_EQ(0u, returned_to_child.size());
1037 } 1135 }
1038 1136
1039 EXPECT_EQ(1u, returned_to_child.size()); 1137 EXPECT_EQ(1u, returned_to_child.size());
1040 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child); 1138 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child);
1041 1139
1042 { 1140 {
1043 child_resource_provider_->WaitSyncTokenIfNeeded(id1); 1141 child_resource_provider_->WaitSyncTokenIfNeeded(id1);
1044 ResourceProvider::ScopedReadLockGL lock(child_resource_provider_.get(), 1142 ResourceProvider::ScopedReadLockGL lock(child_resource_provider_.get(),
1045 id1); 1143 id1);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1099 resource_provider_->ReceiveFromChild(child_id, list); 1197 resource_provider_->ReceiveFromChild(child_id, list);
1100 1198
1101 scoped_refptr<TestFence> fence(new TestFence); 1199 scoped_refptr<TestFence> fence(new TestFence);
1102 resource_provider_->SetReadLockFence(fence.get()); 1200 resource_provider_->SetReadLockFence(fence.get());
1103 { 1201 {
1104 unsigned parent_id = list.front().id; 1202 unsigned parent_id = list.front().id;
1105 resource_provider_->WaitSyncTokenIfNeeded(parent_id); 1203 resource_provider_->WaitSyncTokenIfNeeded(parent_id);
1106 ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), 1204 ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(),
1107 parent_id); 1205 parent_id);
1108 } 1206 }
1109 resource_provider_->DeclareUsedResourcesFromChild( 1207 resource_provider_->DeclareUsedResourcesFromChild(child_id, ResourceIdSet());
1110 child_id, ResourceProvider::ResourceIdSet());
1111 EXPECT_EQ(0u, returned_to_child.size()); 1208 EXPECT_EQ(0u, returned_to_child.size());
1112 1209
1113 resource_provider_->DeclareUsedResourcesFromChild( 1210 resource_provider_->DeclareUsedResourcesFromChild(child_id, ResourceIdSet());
1114 child_id, ResourceProvider::ResourceIdSet());
1115 EXPECT_EQ(0u, returned_to_child.size()); 1211 EXPECT_EQ(0u, returned_to_child.size());
1116 fence->passed = true; 1212 fence->passed = true;
1117 1213
1118 resource_provider_->DeclareUsedResourcesFromChild( 1214 resource_provider_->DeclareUsedResourcesFromChild(child_id, ResourceIdSet());
1119 child_id, ResourceProvider::ResourceIdSet());
1120 EXPECT_EQ(1u, returned_to_child.size()); 1215 EXPECT_EQ(1u, returned_to_child.size());
1121 1216
1122 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child); 1217 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child);
1123 child_resource_provider_->DeleteResource(id1); 1218 child_resource_provider_->DeleteResource(id1);
1124 EXPECT_EQ(0u, child_resource_provider_->num_resources()); 1219 EXPECT_EQ(0u, child_resource_provider_->num_resources());
1125 } 1220 }
1126 1221
1127 TEST_P(ResourceProviderTest, ReadLockFenceDestroyChild) { 1222 TEST_P(ResourceProviderTest, ReadLockFenceDestroyChild) {
1128 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) 1223 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE)
1129 return; 1224 return;
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
1299 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1394 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
1300 &list); 1395 &list);
1301 ASSERT_EQ(3u, list.size()); 1396 ASSERT_EQ(3u, list.size());
1302 EXPECT_FALSE(list[0].mailbox_holder.sync_token.HasData()); 1397 EXPECT_FALSE(list[0].mailbox_holder.sync_token.HasData());
1303 EXPECT_FALSE(list[1].mailbox_holder.sync_token.HasData()); 1398 EXPECT_FALSE(list[1].mailbox_holder.sync_token.HasData());
1304 EXPECT_FALSE(list[2].mailbox_holder.sync_token.HasData()); 1399 EXPECT_FALSE(list[2].mailbox_holder.sync_token.HasData());
1305 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); 1400 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
1306 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); 1401 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
1307 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3)); 1402 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3));
1308 resource_provider_->ReceiveFromChild(child_id, list); 1403 resource_provider_->ReceiveFromChild(child_id, list);
1309 ResourceProvider::ResourceIdSet resource_ids_to_receive; 1404 ResourceIdSet resource_ids_to_receive;
1310 resource_ids_to_receive.insert(id1); 1405 resource_ids_to_receive.insert(id1);
1311 resource_ids_to_receive.insert(id2); 1406 resource_ids_to_receive.insert(id2);
1312 resource_ids_to_receive.insert(id3); 1407 resource_ids_to_receive.insert(id3);
1313 resource_provider_->DeclareUsedResourcesFromChild(child_id, 1408 resource_provider_->DeclareUsedResourcesFromChild(child_id,
1314 resource_ids_to_receive); 1409 resource_ids_to_receive);
1315 } 1410 }
1316 1411
1317 EXPECT_EQ(3u, resource_provider_->num_resources()); 1412 EXPECT_EQ(3u, resource_provider_->num_resources());
1318 ResourceProvider::ResourceIdMap resource_map = 1413 ResourceProvider::ResourceIdMap resource_map =
1319 resource_provider_->GetChildToParentMap(child_id); 1414 resource_provider_->GetChildToParentMap(child_id);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1358 // ids were exported twice, we returned them only once, they should still 1453 // ids were exported twice, we returned them only once, they should still
1359 // be in-use. 1454 // be in-use.
1360 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); 1455 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
1361 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); 1456 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
1362 } 1457 }
1363 { 1458 {
1364 EXPECT_EQ(0u, returned_to_child.size()); 1459 EXPECT_EQ(0u, returned_to_child.size());
1365 1460
1366 // Transfer resources back from the parent to the child. Set no resources as 1461 // Transfer resources back from the parent to the child. Set no resources as
1367 // being in use. 1462 // being in use.
1368 ResourceProvider::ResourceIdSet no_resources; 1463 ResourceIdSet no_resources;
1369 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources); 1464 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
1370 1465
1371 ASSERT_EQ(3u, returned_to_child.size()); 1466 ASSERT_EQ(3u, returned_to_child.size());
1372 EXPECT_FALSE(returned_to_child[0].sync_token.HasData()); 1467 EXPECT_FALSE(returned_to_child[0].sync_token.HasData());
1373 EXPECT_FALSE(returned_to_child[1].sync_token.HasData()); 1468 EXPECT_FALSE(returned_to_child[1].sync_token.HasData());
1374 EXPECT_FALSE(returned_to_child[2].sync_token.HasData()); 1469 EXPECT_FALSE(returned_to_child[2].sync_token.HasData());
1375 std::set<ResourceId> expected_ids; 1470 std::set<ResourceId> expected_ids;
1376 expected_ids.insert(id1); 1471 expected_ids.insert(id1);
1377 expected_ids.insert(id2); 1472 expected_ids.insert(id2);
1378 expected_ids.insert(id3); 1473 expected_ids.insert(id3);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1420 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1515 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
1421 &list); 1516 &list);
1422 ASSERT_EQ(3u, list.size()); 1517 ASSERT_EQ(3u, list.size());
1423 EXPECT_EQ(id1, list[0].id); 1518 EXPECT_EQ(id1, list[0].id);
1424 EXPECT_EQ(id2, list[1].id); 1519 EXPECT_EQ(id2, list[1].id);
1425 EXPECT_EQ(id3, list[2].id); 1520 EXPECT_EQ(id3, list[2].id);
1426 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); 1521 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
1427 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); 1522 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
1428 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3)); 1523 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3));
1429 resource_provider_->ReceiveFromChild(child_id, list); 1524 resource_provider_->ReceiveFromChild(child_id, list);
1430 ResourceProvider::ResourceIdSet resource_ids_to_receive; 1525 ResourceIdSet resource_ids_to_receive;
1431 resource_ids_to_receive.insert(id1); 1526 resource_ids_to_receive.insert(id1);
1432 resource_ids_to_receive.insert(id2); 1527 resource_ids_to_receive.insert(id2);
1433 resource_ids_to_receive.insert(id3); 1528 resource_ids_to_receive.insert(id3);
1434 resource_provider_->DeclareUsedResourcesFromChild(child_id, 1529 resource_provider_->DeclareUsedResourcesFromChild(child_id,
1435 resource_ids_to_receive); 1530 resource_ids_to_receive);
1436 } 1531 }
1437 1532
1438 EXPECT_EQ(0u, returned_to_child.size()); 1533 EXPECT_EQ(0u, returned_to_child.size());
1439 1534
1440 EXPECT_EQ(3u, resource_provider_->num_resources()); 1535 EXPECT_EQ(3u, resource_provider_->num_resources());
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
1609 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1704 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
1610 &list); 1705 &list);
1611 ASSERT_EQ(2u, list.size()); 1706 ASSERT_EQ(2u, list.size());
1612 if (GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) { 1707 if (GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) {
1613 EXPECT_TRUE(list[0].mailbox_holder.sync_token.HasData()); 1708 EXPECT_TRUE(list[0].mailbox_holder.sync_token.HasData());
1614 EXPECT_TRUE(list[1].mailbox_holder.sync_token.HasData()); 1709 EXPECT_TRUE(list[1].mailbox_holder.sync_token.HasData());
1615 } 1710 }
1616 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); 1711 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
1617 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); 1712 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
1618 resource_provider_->ReceiveFromChild(child_id, list); 1713 resource_provider_->ReceiveFromChild(child_id, list);
1619 ResourceProvider::ResourceIdSet resource_ids_to_receive; 1714 ResourceIdSet resource_ids_to_receive;
1620 resource_ids_to_receive.insert(id1); 1715 resource_ids_to_receive.insert(id1);
1621 resource_ids_to_receive.insert(id2); 1716 resource_ids_to_receive.insert(id2);
1622 resource_provider_->DeclareUsedResourcesFromChild(child_id, 1717 resource_provider_->DeclareUsedResourcesFromChild(child_id,
1623 resource_ids_to_receive); 1718 resource_ids_to_receive);
1624 } 1719 }
1625 1720
1626 EXPECT_EQ(2u, resource_provider_->num_resources()); 1721 EXPECT_EQ(2u, resource_provider_->num_resources());
1627 ResourceProvider::ResourceIdMap resource_map = 1722 ResourceProvider::ResourceIdMap resource_map =
1628 resource_provider_->GetChildToParentMap(child_id); 1723 resource_provider_->GetChildToParentMap(child_id);
1629 ResourceId mapped_id1 = resource_map[id1]; 1724 ResourceId mapped_id1 = resource_map[id1];
(...skipping 18 matching lines...) Expand all
1648 ASSERT_EQ(2u, list.size()); 1743 ASSERT_EQ(2u, list.size());
1649 if (GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) { 1744 if (GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) {
1650 EXPECT_TRUE(list[0].mailbox_holder.sync_token.HasData()); 1745 EXPECT_TRUE(list[0].mailbox_holder.sync_token.HasData());
1651 EXPECT_TRUE(list[1].mailbox_holder.sync_token.HasData()); 1746 EXPECT_TRUE(list[1].mailbox_holder.sync_token.HasData());
1652 } 1747 }
1653 EXPECT_TRUE(resource_provider_->InUseByConsumer(id1)); 1748 EXPECT_TRUE(resource_provider_->InUseByConsumer(id1));
1654 EXPECT_TRUE(resource_provider_->InUseByConsumer(id2)); 1749 EXPECT_TRUE(resource_provider_->InUseByConsumer(id2));
1655 1750
1656 // Release the resource in the parent. Set no resources as being in use. The 1751 // Release the resource in the parent. Set no resources as being in use. The
1657 // resources are exported so that can't be transferred back yet. 1752 // resources are exported so that can't be transferred back yet.
1658 ResourceProvider::ResourceIdSet no_resources; 1753 ResourceIdSet no_resources;
1659 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources); 1754 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
1660 1755
1661 EXPECT_EQ(0u, returned_to_child.size()); 1756 EXPECT_EQ(0u, returned_to_child.size());
1662 EXPECT_EQ(2u, resource_provider_->num_resources()); 1757 EXPECT_EQ(2u, resource_provider_->num_resources());
1663 1758
1664 // Return the resources from the grandparent to the parent. They should be 1759 // Return the resources from the grandparent to the parent. They should be
1665 // returned to the child then. 1760 // returned to the child then.
1666 EXPECT_EQ(2u, list.size()); 1761 EXPECT_EQ(2u, list.size());
1667 EXPECT_EQ(mapped_id1, list[0].id); 1762 EXPECT_EQ(mapped_id1, list[0].id);
1668 EXPECT_EQ(mapped_id2, list[1].id); 1763 EXPECT_EQ(mapped_id2, list[1].id);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1715 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1810 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
1716 &list); 1811 &list);
1717 ASSERT_EQ(2u, list.size()); 1812 ASSERT_EQ(2u, list.size());
1718 if (GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) { 1813 if (GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) {
1719 EXPECT_TRUE(list[0].mailbox_holder.sync_token.HasData()); 1814 EXPECT_TRUE(list[0].mailbox_holder.sync_token.HasData());
1720 EXPECT_TRUE(list[1].mailbox_holder.sync_token.HasData()); 1815 EXPECT_TRUE(list[1].mailbox_holder.sync_token.HasData());
1721 } 1816 }
1722 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); 1817 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
1723 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); 1818 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
1724 resource_provider_->ReceiveFromChild(child_id, list); 1819 resource_provider_->ReceiveFromChild(child_id, list);
1725 ResourceProvider::ResourceIdSet resource_ids_to_receive; 1820 ResourceIdSet resource_ids_to_receive;
1726 resource_ids_to_receive.insert(id1); 1821 resource_ids_to_receive.insert(id1);
1727 resource_ids_to_receive.insert(id2); 1822 resource_ids_to_receive.insert(id2);
1728 resource_provider_->DeclareUsedResourcesFromChild(child_id, 1823 resource_provider_->DeclareUsedResourcesFromChild(child_id,
1729 resource_ids_to_receive); 1824 resource_ids_to_receive);
1730 } 1825 }
1731 1826
1732 EXPECT_EQ(2u, resource_provider_->num_resources()); 1827 EXPECT_EQ(2u, resource_provider_->num_resources());
1733 ResourceProvider::ResourceIdMap resource_map = 1828 ResourceProvider::ResourceIdMap resource_map =
1734 resource_provider_->GetChildToParentMap(child_id); 1829 resource_provider_->GetChildToParentMap(child_id);
1735 ResourceId mapped_id1 = resource_map[id1]; 1830 ResourceId mapped_id1 = resource_map[id1];
(...skipping 18 matching lines...) Expand all
1754 ASSERT_EQ(2u, list.size()); 1849 ASSERT_EQ(2u, list.size());
1755 if (GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) { 1850 if (GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) {
1756 EXPECT_TRUE(list[0].mailbox_holder.sync_token.HasData()); 1851 EXPECT_TRUE(list[0].mailbox_holder.sync_token.HasData());
1757 EXPECT_TRUE(list[1].mailbox_holder.sync_token.HasData()); 1852 EXPECT_TRUE(list[1].mailbox_holder.sync_token.HasData());
1758 } 1853 }
1759 EXPECT_TRUE(resource_provider_->InUseByConsumer(id1)); 1854 EXPECT_TRUE(resource_provider_->InUseByConsumer(id1));
1760 EXPECT_TRUE(resource_provider_->InUseByConsumer(id2)); 1855 EXPECT_TRUE(resource_provider_->InUseByConsumer(id2));
1761 1856
1762 // Release the resource in the parent. Set no resources as being in use. The 1857 // Release the resource in the parent. Set no resources as being in use. The
1763 // resources are exported so that can't be transferred back yet. 1858 // resources are exported so that can't be transferred back yet.
1764 ResourceProvider::ResourceIdSet no_resources; 1859 ResourceIdSet no_resources;
1765 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources); 1860 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
1766 1861
1767 // Destroy the child, the resources should not be returned yet. 1862 // Destroy the child, the resources should not be returned yet.
1768 EXPECT_EQ(0u, returned_to_child.size()); 1863 EXPECT_EQ(0u, returned_to_child.size());
1769 EXPECT_EQ(2u, resource_provider_->num_resources()); 1864 EXPECT_EQ(2u, resource_provider_->num_resources());
1770 1865
1771 resource_provider_->DestroyChild(child_id); 1866 resource_provider_->DestroyChild(child_id);
1772 1867
1773 EXPECT_EQ(2u, resource_provider_->num_resources()); 1868 EXPECT_EQ(2u, resource_provider_->num_resources());
1774 ASSERT_EQ(0u, returned_to_child.size()); 1869 ASSERT_EQ(0u, returned_to_child.size());
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1828 resource_ids_to_transfer); 1923 resource_ids_to_transfer);
1829 1924
1830 TransferableResourceArray list; 1925 TransferableResourceArray list;
1831 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1926 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
1832 &list); 1927 &list);
1833 ASSERT_EQ(1u, list.size()); 1928 ASSERT_EQ(1u, list.size());
1834 if (GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) 1929 if (GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE)
1835 EXPECT_TRUE(list[0].mailbox_holder.sync_token.HasData()); 1930 EXPECT_TRUE(list[0].mailbox_holder.sync_token.HasData());
1836 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id)); 1931 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id));
1837 resource_provider_->ReceiveFromChild(child_id, list); 1932 resource_provider_->ReceiveFromChild(child_id, list);
1838 ResourceProvider::ResourceIdSet resource_ids_to_receive; 1933 ResourceIdSet resource_ids_to_receive;
1839 resource_ids_to_receive.insert(id); 1934 resource_ids_to_receive.insert(id);
1840 resource_provider_->DeclareUsedResourcesFromChild(child_id, 1935 resource_provider_->DeclareUsedResourcesFromChild(child_id,
1841 resource_ids_to_receive); 1936 resource_ids_to_receive);
1842 } 1937 }
1843 1938
1844 // Delete textures in the child, while they are transfered. 1939 // Delete textures in the child, while they are transfered.
1845 child_resource_provider_->DeleteResource(id); 1940 child_resource_provider_->DeleteResource(id);
1846 EXPECT_EQ(1u, child_resource_provider_->num_resources()); 1941 EXPECT_EQ(1u, child_resource_provider_->num_resources());
1847 { 1942 {
1848 EXPECT_EQ(0u, returned_to_child.size()); 1943 EXPECT_EQ(0u, returned_to_child.size());
1849 1944
1850 // Transfer resources back from the parent to the child. Set no resources as 1945 // Transfer resources back from the parent to the child. Set no resources as
1851 // being in use. 1946 // being in use.
1852 ResourceProvider::ResourceIdSet no_resources; 1947 ResourceIdSet no_resources;
1853 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources); 1948 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
1854 1949
1855 ASSERT_EQ(1u, returned_to_child.size()); 1950 ASSERT_EQ(1u, returned_to_child.size());
1856 if (GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) 1951 if (GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE)
1857 EXPECT_TRUE(returned_to_child[0].sync_token.HasData()); 1952 EXPECT_TRUE(returned_to_child[0].sync_token.HasData());
1858 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child); 1953 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child);
1859 } 1954 }
1860 EXPECT_EQ(0u, child_resource_provider_->num_resources()); 1955 EXPECT_EQ(0u, child_resource_provider_->num_resources());
1861 } 1956 }
1862 1957
(...skipping 20 matching lines...) Expand all
1883 resource_ids_to_transfer.push_back(id); 1978 resource_ids_to_transfer.push_back(id);
1884 1979
1885 child_resource_provider_->GenerateSyncTokenForResources( 1980 child_resource_provider_->GenerateSyncTokenForResources(
1886 resource_ids_to_transfer); 1981 resource_ids_to_transfer);
1887 1982
1888 TransferableResourceArray list; 1983 TransferableResourceArray list;
1889 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1984 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
1890 &list); 1985 &list);
1891 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id)); 1986 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id));
1892 resource_provider_->ReceiveFromChild(child_id, list); 1987 resource_provider_->ReceiveFromChild(child_id, list);
1893 ResourceProvider::ResourceIdSet resource_ids_to_receive; 1988 ResourceIdSet resource_ids_to_receive;
1894 resource_ids_to_receive.insert(id); 1989 resource_ids_to_receive.insert(id);
1895 resource_provider_->DeclareUsedResourcesFromChild(child_id, 1990 resource_provider_->DeclareUsedResourcesFromChild(child_id,
1896 resource_ids_to_receive); 1991 resource_ids_to_receive);
1897 } 1992 }
1898 TransferableResourceArray sent_to_top_level; 1993 TransferableResourceArray sent_to_top_level;
1899 { 1994 {
1900 // Parent transfers to top-level. 1995 // Parent transfers to top-level.
1901 ASSERT_TRUE(map.find(id) != map.end()); 1996 ASSERT_TRUE(map.find(id) != map.end());
1902 ResourceId parent_id = map.find(id)->second; 1997 ResourceId parent_id = map.find(id)->second;
1903 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1998 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1904 resource_ids_to_transfer.push_back(parent_id); 1999 resource_ids_to_transfer.push_back(parent_id);
1905 resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 2000 resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
1906 &sent_to_top_level); 2001 &sent_to_top_level);
1907 EXPECT_TRUE(resource_provider_->InUseByConsumer(parent_id)); 2002 EXPECT_TRUE(resource_provider_->InUseByConsumer(parent_id));
1908 } 2003 }
1909 { 2004 {
1910 // Stop using resource. 2005 // Stop using resource.
1911 ResourceProvider::ResourceIdSet empty; 2006 ResourceIdSet empty;
1912 resource_provider_->DeclareUsedResourcesFromChild(child_id, empty); 2007 resource_provider_->DeclareUsedResourcesFromChild(child_id, empty);
1913 // Resource is not yet returned to the child, since it's in use by the 2008 // Resource is not yet returned to the child, since it's in use by the
1914 // top-level. 2009 // top-level.
1915 EXPECT_TRUE(returned_to_child.empty()); 2010 EXPECT_TRUE(returned_to_child.empty());
1916 } 2011 }
1917 { 2012 {
1918 // Send the resource to the parent again. 2013 // Send the resource to the parent again.
1919 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2014 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1920 resource_ids_to_transfer.push_back(id); 2015 resource_ids_to_transfer.push_back(id);
1921 TransferableResourceArray list; 2016 TransferableResourceArray list;
1922 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 2017 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
1923 &list); 2018 &list);
1924 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id)); 2019 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id));
1925 resource_provider_->ReceiveFromChild(child_id, list); 2020 resource_provider_->ReceiveFromChild(child_id, list);
1926 ResourceProvider::ResourceIdSet resource_ids_to_receive; 2021 ResourceIdSet resource_ids_to_receive;
1927 resource_ids_to_receive.insert(id); 2022 resource_ids_to_receive.insert(id);
1928 resource_provider_->DeclareUsedResourcesFromChild(child_id, 2023 resource_provider_->DeclareUsedResourcesFromChild(child_id,
1929 resource_ids_to_receive); 2024 resource_ids_to_receive);
1930 } 2025 }
1931 { 2026 {
1932 // Receive returns back from top-level. 2027 // Receive returns back from top-level.
1933 ReturnedResourceArray returned; 2028 ReturnedResourceArray returned;
1934 TransferableResource::ReturnResources(sent_to_top_level, &returned); 2029 TransferableResource::ReturnResources(sent_to_top_level, &returned);
1935 resource_provider_->ReceiveReturnsFromParent(returned); 2030 resource_provider_->ReceiveReturnsFromParent(returned);
1936 // Resource is still not yet returned to the child, since it's declared used 2031 // Resource is still not yet returned to the child, since it's declared used
(...skipping 21 matching lines...) Expand all
1958 resource_provider_->ReceiveReturnsFromParent(returned); 2053 resource_provider_->ReceiveReturnsFromParent(returned);
1959 // Resource is still not yet returned to the child, since it's still 2054 // Resource is still not yet returned to the child, since it's still
1960 // declared used in the parent. 2055 // declared used in the parent.
1961 EXPECT_TRUE(returned_to_child.empty()); 2056 EXPECT_TRUE(returned_to_child.empty());
1962 ASSERT_TRUE(map.find(id) != map.end()); 2057 ASSERT_TRUE(map.find(id) != map.end());
1963 ResourceId parent_id = map.find(id)->second; 2058 ResourceId parent_id = map.find(id)->second;
1964 EXPECT_FALSE(resource_provider_->InUseByConsumer(parent_id)); 2059 EXPECT_FALSE(resource_provider_->InUseByConsumer(parent_id));
1965 } 2060 }
1966 { 2061 {
1967 // Stop using resource. 2062 // Stop using resource.
1968 ResourceProvider::ResourceIdSet empty; 2063 ResourceIdSet empty;
1969 resource_provider_->DeclareUsedResourcesFromChild(child_id, empty); 2064 resource_provider_->DeclareUsedResourcesFromChild(child_id, empty);
1970 // Resource should have been returned to the child, since it's no longer in 2065 // Resource should have been returned to the child, since it's no longer in
1971 // use by the top-level. 2066 // use by the top-level.
1972 ASSERT_EQ(1u, returned_to_child.size()); 2067 ASSERT_EQ(1u, returned_to_child.size());
1973 EXPECT_EQ(id, returned_to_child[0].id); 2068 EXPECT_EQ(id, returned_to_child[0].id);
1974 EXPECT_EQ(2, returned_to_child[0].count); 2069 EXPECT_EQ(2, returned_to_child[0].count);
1975 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child); 2070 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child);
1976 returned_to_child.clear(); 2071 returned_to_child.clear();
1977 EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id)); 2072 EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id));
1978 } 2073 }
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
2085 .WillOnce(Return(parent_texture_id)); 2180 .WillOnce(Return(parent_texture_id));
2086 2181
2087 parent_resource_provider->ReceiveFromChild(child_id, list); 2182 parent_resource_provider->ReceiveFromChild(child_id, list);
2088 { 2183 {
2089 parent_resource_provider->WaitSyncTokenIfNeeded(list[0].id); 2184 parent_resource_provider->WaitSyncTokenIfNeeded(list[0].id);
2090 ResourceProvider::ScopedReadLockGL lock(parent_resource_provider.get(), 2185 ResourceProvider::ScopedReadLockGL lock(parent_resource_provider.get(),
2091 list[0].id); 2186 list[0].id);
2092 } 2187 }
2093 Mock::VerifyAndClearExpectations(parent_context); 2188 Mock::VerifyAndClearExpectations(parent_context);
2094 2189
2095 ResourceProvider::ResourceIdSet resource_ids_to_receive; 2190 ResourceIdSet resource_ids_to_receive;
2096 resource_ids_to_receive.insert(id); 2191 resource_ids_to_receive.insert(id);
2097 parent_resource_provider->DeclareUsedResourcesFromChild( 2192 parent_resource_provider->DeclareUsedResourcesFromChild(
2098 child_id, resource_ids_to_receive); 2193 child_id, resource_ids_to_receive);
2099 Mock::VerifyAndClearExpectations(parent_context); 2194 Mock::VerifyAndClearExpectations(parent_context);
2100 } 2195 }
2101 ResourceProvider::ResourceIdMap resource_map = 2196 ResourceProvider::ResourceIdMap resource_map =
2102 parent_resource_provider->GetChildToParentMap(child_id); 2197 parent_resource_provider->GetChildToParentMap(child_id);
2103 ResourceId mapped_id = resource_map[id]; 2198 ResourceId mapped_id = resource_map[id];
2104 EXPECT_NE(0u, mapped_id); 2199 EXPECT_NE(0u, mapped_id);
2105 2200
(...skipping 16 matching lines...) Expand all
2122 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, child_filter)); 2217 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, child_filter));
2123 EXPECT_CALL( 2218 EXPECT_CALL(
2124 *parent_context, 2219 *parent_context,
2125 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, child_filter)); 2220 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, child_filter));
2126 2221
2127 { 2222 {
2128 EXPECT_EQ(0u, returned_to_child.size()); 2223 EXPECT_EQ(0u, returned_to_child.size());
2129 2224
2130 // Transfer resources back from the parent to the child. Set no resources 2225 // Transfer resources back from the parent to the child. Set no resources
2131 // as being in use. 2226 // as being in use.
2132 ResourceProvider::ResourceIdSet no_resources; 2227 ResourceIdSet no_resources;
2133 parent_resource_provider->DeclareUsedResourcesFromChild(child_id, 2228 parent_resource_provider->DeclareUsedResourcesFromChild(child_id,
2134 no_resources); 2229 no_resources);
2135 Mock::VerifyAndClearExpectations(parent_context); 2230 Mock::VerifyAndClearExpectations(parent_context);
2136 2231
2137 ASSERT_EQ(1u, returned_to_child.size()); 2232 ASSERT_EQ(1u, returned_to_child.size());
2138 child_resource_provider->ReceiveReturnsFromParent(returned_to_child); 2233 child_resource_provider->ReceiveReturnsFromParent(returned_to_child);
2139 } 2234 }
2140 2235
2141 // The child remembers the texture filter is set to |child_filter|. 2236 // The child remembers the texture filter is set to |child_filter|.
2142 EXPECT_CALL(*child_context, bindTexture(GL_TEXTURE_2D, child_texture_id)); 2237 EXPECT_CALL(*child_context, bindTexture(GL_TEXTURE_2D, child_texture_id));
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
2311 { 2406 {
2312 // Transfer the resource to the parent. 2407 // Transfer the resource to the parent.
2313 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2408 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
2314 resource_ids_to_transfer.push_back(resource); 2409 resource_ids_to_transfer.push_back(resource);
2315 TransferableResourceArray list; 2410 TransferableResourceArray list;
2316 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 2411 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
2317 &list); 2412 &list);
2318 EXPECT_EQ(1u, list.size()); 2413 EXPECT_EQ(1u, list.size());
2319 2414
2320 resource_provider_->ReceiveFromChild(child_id, list); 2415 resource_provider_->ReceiveFromChild(child_id, list);
2321 ResourceProvider::ResourceIdSet resource_ids_to_receive; 2416 ResourceIdSet resource_ids_to_receive;
2322 resource_ids_to_receive.insert(resource); 2417 resource_ids_to_receive.insert(resource);
2323 resource_provider_->DeclareUsedResourcesFromChild(child_id, 2418 resource_provider_->DeclareUsedResourcesFromChild(child_id,
2324 resource_ids_to_receive); 2419 resource_ids_to_receive);
2325 } 2420 }
2326 2421
2327 // Lose the output surface in the parent. 2422 // Lose the output surface in the parent.
2328 resource_provider_->DidLoseContextProvider(); 2423 resource_provider_->DidLoseContextProvider();
2329 2424
2330 { 2425 {
2331 EXPECT_EQ(0u, returned_to_child.size()); 2426 EXPECT_EQ(0u, returned_to_child.size());
2332 2427
2333 // Transfer resources back from the parent to the child. Set no resources as 2428 // Transfer resources back from the parent to the child. Set no resources as
2334 // being in use. 2429 // being in use.
2335 ResourceProvider::ResourceIdSet no_resources; 2430 ResourceIdSet no_resources;
2336 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources); 2431 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
2337 2432
2338 // Expect a GL resource to be lost. 2433 // Expect a GL resource to be lost.
2339 ASSERT_EQ(1u, returned_to_child.size()); 2434 ASSERT_EQ(1u, returned_to_child.size());
2340 EXPECT_EQ(should_lose_resource, returned_to_child[0].lost); 2435 EXPECT_EQ(should_lose_resource, returned_to_child[0].lost);
2341 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child); 2436 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child);
2342 returned_to_child.clear(); 2437 returned_to_child.clear();
2343 } 2438 }
2344 2439
2345 // A GL resource should be lost. 2440 // A GL resource should be lost.
(...skipping 18 matching lines...) Expand all
2364 { 2459 {
2365 // Transfer the resource to the parent. 2460 // Transfer the resource to the parent.
2366 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2461 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
2367 resource_ids_to_transfer.push_back(resource); 2462 resource_ids_to_transfer.push_back(resource);
2368 TransferableResourceArray list; 2463 TransferableResourceArray list;
2369 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 2464 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
2370 &list); 2465 &list);
2371 EXPECT_EQ(1u, list.size()); 2466 EXPECT_EQ(1u, list.size());
2372 2467
2373 resource_provider_->ReceiveFromChild(child_id, list); 2468 resource_provider_->ReceiveFromChild(child_id, list);
2374 ResourceProvider::ResourceIdSet resource_ids_to_receive; 2469 ResourceIdSet resource_ids_to_receive;
2375 resource_ids_to_receive.insert(resource); 2470 resource_ids_to_receive.insert(resource);
2376 resource_provider_->DeclareUsedResourcesFromChild(child_id, 2471 resource_provider_->DeclareUsedResourcesFromChild(child_id,
2377 resource_ids_to_receive); 2472 resource_ids_to_receive);
2378 } 2473 }
2379 2474
2380 { 2475 {
2381 ResourceProvider::ResourceIdMap resource_map = 2476 ResourceProvider::ResourceIdMap resource_map =
2382 resource_provider_->GetChildToParentMap(child_id); 2477 resource_provider_->GetChildToParentMap(child_id);
2383 ResourceId parent_resource = resource_map[resource]; 2478 ResourceId parent_resource = resource_map[resource];
2384 EXPECT_NE(0u, parent_resource); 2479 EXPECT_NE(0u, parent_resource);
(...skipping 19 matching lines...) Expand all
2404 2499
2405 // Lost resources stay in use in the parent forever. 2500 // Lost resources stay in use in the parent forever.
2406 EXPECT_TRUE(resource_provider_->InUseByConsumer(parent_resource)); 2501 EXPECT_TRUE(resource_provider_->InUseByConsumer(parent_resource));
2407 } 2502 }
2408 2503
2409 { 2504 {
2410 EXPECT_EQ(0u, returned_to_child.size()); 2505 EXPECT_EQ(0u, returned_to_child.size());
2411 2506
2412 // Transfer resources back from the parent to the child. Set no resources as 2507 // Transfer resources back from the parent to the child. Set no resources as
2413 // being in use. 2508 // being in use.
2414 ResourceProvider::ResourceIdSet no_resources; 2509 ResourceIdSet no_resources;
2415 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources); 2510 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
2416 2511
2417 // Expect the resource to be lost. 2512 // Expect the resource to be lost.
2418 ASSERT_EQ(1u, returned_to_child.size()); 2513 ASSERT_EQ(1u, returned_to_child.size());
2419 EXPECT_TRUE(returned_to_child[0].lost); 2514 EXPECT_TRUE(returned_to_child[0].lost);
2420 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child); 2515 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child);
2421 returned_to_child.clear(); 2516 returned_to_child.clear();
2422 } 2517 }
2423 2518
2424 // The resource should be lost. 2519 // The resource should be lost.
(...skipping 17 matching lines...) Expand all
2442 { 2537 {
2443 // Transfer the resource to the parent. 2538 // Transfer the resource to the parent.
2444 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2539 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
2445 resource_ids_to_transfer.push_back(resource); 2540 resource_ids_to_transfer.push_back(resource);
2446 TransferableResourceArray list; 2541 TransferableResourceArray list;
2447 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 2542 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
2448 &list); 2543 &list);
2449 EXPECT_EQ(1u, list.size()); 2544 EXPECT_EQ(1u, list.size());
2450 2545
2451 resource_provider_->ReceiveFromChild(child_id, list); 2546 resource_provider_->ReceiveFromChild(child_id, list);
2452 ResourceProvider::ResourceIdSet resource_ids_to_receive; 2547 ResourceIdSet resource_ids_to_receive;
2453 resource_ids_to_receive.insert(resource); 2548 resource_ids_to_receive.insert(resource);
2454 resource_provider_->DeclareUsedResourcesFromChild(child_id, 2549 resource_provider_->DeclareUsedResourcesFromChild(child_id,
2455 resource_ids_to_receive); 2550 resource_ids_to_receive);
2456 } 2551 }
2457 2552
2458 // Lose the output surface in the parent. 2553 // Lose the output surface in the parent.
2459 resource_provider_->DidLoseContextProvider(); 2554 resource_provider_->DidLoseContextProvider();
2460 2555
2461 { 2556 {
2462 EXPECT_EQ(0u, returned_to_child.size()); 2557 EXPECT_EQ(0u, returned_to_child.size());
2463 2558
2464 // Transfer resources back from the parent to the child. Set no resources as 2559 // Transfer resources back from the parent to the child. Set no resources as
2465 // being in use. 2560 // being in use.
2466 ResourceProvider::ResourceIdSet no_resources; 2561 ResourceIdSet no_resources;
2467 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources); 2562 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
2468 2563
2469 ASSERT_EQ(1u, returned_to_child.size()); 2564 ASSERT_EQ(1u, returned_to_child.size());
2470 // Losing an output surface only loses hardware resources. 2565 // Losing an output surface only loses hardware resources.
2471 EXPECT_EQ(returned_to_child[0].lost, 2566 EXPECT_EQ(returned_to_child[0].lost,
2472 GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE); 2567 GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE);
2473 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child); 2568 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child);
2474 returned_to_child.clear(); 2569 returned_to_child.clear();
2475 } 2570 }
2476 2571
(...skipping 18 matching lines...) Expand all
2495 { 2590 {
2496 // Transfer the resource to the parent. 2591 // Transfer the resource to the parent.
2497 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2592 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
2498 resource_ids_to_transfer.push_back(resource); 2593 resource_ids_to_transfer.push_back(resource);
2499 TransferableResourceArray list; 2594 TransferableResourceArray list;
2500 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 2595 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
2501 &list); 2596 &list);
2502 EXPECT_EQ(1u, list.size()); 2597 EXPECT_EQ(1u, list.size());
2503 2598
2504 resource_provider_->ReceiveFromChild(child_id, list); 2599 resource_provider_->ReceiveFromChild(child_id, list);
2505 ResourceProvider::ResourceIdSet resource_ids_to_receive; 2600 ResourceIdSet resource_ids_to_receive;
2506 resource_ids_to_receive.insert(resource); 2601 resource_ids_to_receive.insert(resource);
2507 resource_provider_->DeclareUsedResourcesFromChild(child_id, 2602 resource_provider_->DeclareUsedResourcesFromChild(child_id,
2508 resource_ids_to_receive); 2603 resource_ids_to_receive);
2509 } 2604 }
2510 2605
2511 { 2606 {
2512 ResourceProvider::ResourceIdMap resource_map = 2607 ResourceProvider::ResourceIdMap resource_map =
2513 resource_provider_->GetChildToParentMap(child_id); 2608 resource_provider_->GetChildToParentMap(child_id);
2514 ResourceId parent_resource = resource_map[resource]; 2609 ResourceId parent_resource = resource_map[resource];
2515 EXPECT_NE(0u, parent_resource); 2610 EXPECT_NE(0u, parent_resource);
(...skipping 13 matching lines...) Expand all
2529 EXPECT_EQ(parent_resource, returned[0].id); 2624 EXPECT_EQ(parent_resource, returned[0].id);
2530 returned[0].lost = true; 2625 returned[0].lost = true;
2531 resource_provider_->ReceiveReturnsFromParent(returned); 2626 resource_provider_->ReceiveReturnsFromParent(returned);
2532 } 2627 }
2533 2628
2534 { 2629 {
2535 EXPECT_EQ(0u, returned_to_child.size()); 2630 EXPECT_EQ(0u, returned_to_child.size());
2536 2631
2537 // Transfer resources back from the parent to the child. Set no resources as 2632 // Transfer resources back from the parent to the child. Set no resources as
2538 // being in use. 2633 // being in use.
2539 ResourceProvider::ResourceIdSet no_resources; 2634 ResourceIdSet no_resources;
2540 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources); 2635 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
2541 2636
2542 // Expect the resource to be lost. 2637 // Expect the resource to be lost.
2543 ASSERT_EQ(1u, returned_to_child.size()); 2638 ASSERT_EQ(1u, returned_to_child.size());
2544 EXPECT_TRUE(returned_to_child[0].lost); 2639 EXPECT_TRUE(returned_to_child[0].lost);
2545 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child); 2640 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child);
2546 returned_to_child.clear(); 2641 returned_to_child.clear();
2547 } 2642 }
2548 2643
2549 // Delete the resource in the child. Expect the resource to be lost. 2644 // Delete the resource in the child. Expect the resource to be lost.
(...skipping 1134 matching lines...) Expand 10 before | Expand all | Expand 10 after
3684 resource_provider->AllocateForTesting(id); 3779 resource_provider->AllocateForTesting(id);
3685 Mock::VerifyAndClearExpectations(context); 3780 Mock::VerifyAndClearExpectations(context);
3686 3781
3687 DCHECK_EQ(10u, context->PeekTextureId()); 3782 DCHECK_EQ(10u, context->PeekTextureId());
3688 resource_provider->DeleteResource(id); 3783 resource_provider->DeleteResource(id);
3689 } 3784 }
3690 } 3785 }
3691 3786
3692 } // namespace 3787 } // namespace
3693 } // namespace cc 3788 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698