| OLD | NEW |
| 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 962 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 973 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 973 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
| 974 uint8_t data1[4] = { 1, 2, 3, 4 }; | 974 uint8_t data1[4] = { 1, 2, 3, 4 }; |
| 975 gfx::Rect rect(size); | 975 gfx::Rect rect(size); |
| 976 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); | 976 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); |
| 977 | 977 |
| 978 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( | 978 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( |
| 979 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | 979 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
| 980 uint8_t data2[4] = { 5, 5, 5, 5 }; | 980 uint8_t data2[4] = { 5, 5, 5, 5 }; |
| 981 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); | 981 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); |
| 982 | 982 |
| 983 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource( | |
| 984 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | |
| 985 child_resource_provider_->AcquireImage(id3); | |
| 986 uint8_t data3[4] = { 6, 7, 8, 9 }; | |
| 987 int stride; | |
| 988 void* data = child_resource_provider_->MapImage(id3, &stride); | |
| 989 memcpy(data, data3, sizeof(data3)); | |
| 990 child_resource_provider_->UnmapImage(id3); | |
| 991 | |
| 992 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); | 983 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); |
| 993 shared_memory->CreateAndMapAnonymous(1); | 984 shared_memory->CreateAndMapAnonymous(1); |
| 994 base::SharedMemory* shared_memory_ptr = shared_memory.get(); | 985 base::SharedMemory* shared_memory_ptr = shared_memory.get(); |
| 995 ResourceProvider::ResourceId id4 = | 986 ResourceProvider::ResourceId id3 = |
| 996 child_resource_provider_->CreateResourceFromTextureMailbox( | 987 child_resource_provider_->CreateResourceFromTextureMailbox( |
| 997 TextureMailbox(shared_memory_ptr, gfx::Size(1, 1)), | 988 TextureMailbox(shared_memory_ptr, gfx::Size(1, 1)), |
| 998 SingleReleaseCallbackImpl::Create(base::Bind( | 989 SingleReleaseCallbackImpl::Create(base::Bind( |
| 999 &SharedMemoryReleaseCallback, base::Passed(&shared_memory)))); | 990 &SharedMemoryReleaseCallback, base::Passed(&shared_memory)))); |
| 1000 | 991 |
| 1001 ReturnedResourceArray returned_to_child; | 992 ReturnedResourceArray returned_to_child; |
| 1002 int child_id = | 993 int child_id = |
| 1003 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); | 994 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); |
| 1004 { | 995 { |
| 1005 // Transfer some resources to the parent. | 996 // Transfer some resources to the parent. |
| 1006 ResourceProvider::ResourceIdArray resource_ids_to_transfer; | 997 ResourceProvider::ResourceIdArray resource_ids_to_transfer; |
| 1007 resource_ids_to_transfer.push_back(id1); | 998 resource_ids_to_transfer.push_back(id1); |
| 1008 resource_ids_to_transfer.push_back(id2); | 999 resource_ids_to_transfer.push_back(id2); |
| 1009 resource_ids_to_transfer.push_back(id3); | 1000 resource_ids_to_transfer.push_back(id3); |
| 1010 resource_ids_to_transfer.push_back(id4); | |
| 1011 TransferableResourceArray list; | 1001 TransferableResourceArray list; |
| 1012 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, | 1002 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, |
| 1013 &list); | 1003 &list); |
| 1014 ASSERT_EQ(4u, list.size()); | 1004 ASSERT_EQ(3u, list.size()); |
| 1015 EXPECT_EQ(0u, list[0].mailbox_holder.sync_point); | 1005 EXPECT_EQ(0u, list[0].mailbox_holder.sync_point); |
| 1016 EXPECT_EQ(0u, list[1].mailbox_holder.sync_point); | 1006 EXPECT_EQ(0u, list[1].mailbox_holder.sync_point); |
| 1017 EXPECT_EQ(0u, list[2].mailbox_holder.sync_point); | 1007 EXPECT_EQ(0u, list[2].mailbox_holder.sync_point); |
| 1018 EXPECT_EQ(0u, list[3].mailbox_holder.sync_point); | |
| 1019 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); | 1008 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); |
| 1020 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); | 1009 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); |
| 1021 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3)); | 1010 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3)); |
| 1022 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id4)); | |
| 1023 resource_provider_->ReceiveFromChild(child_id, list); | 1011 resource_provider_->ReceiveFromChild(child_id, list); |
| 1024 resource_provider_->DeclareUsedResourcesFromChild(child_id, | 1012 resource_provider_->DeclareUsedResourcesFromChild(child_id, |
| 1025 resource_ids_to_transfer); | 1013 resource_ids_to_transfer); |
| 1026 } | 1014 } |
| 1027 | 1015 |
| 1028 EXPECT_EQ(4u, resource_provider_->num_resources()); | 1016 EXPECT_EQ(3u, resource_provider_->num_resources()); |
| 1029 ResourceProvider::ResourceIdMap resource_map = | 1017 ResourceProvider::ResourceIdMap resource_map = |
| 1030 resource_provider_->GetChildToParentMap(child_id); | 1018 resource_provider_->GetChildToParentMap(child_id); |
| 1031 ResourceProvider::ResourceId mapped_id1 = resource_map[id1]; | 1019 ResourceProvider::ResourceId mapped_id1 = resource_map[id1]; |
| 1032 ResourceProvider::ResourceId mapped_id2 = resource_map[id2]; | 1020 ResourceProvider::ResourceId mapped_id2 = resource_map[id2]; |
| 1033 ResourceProvider::ResourceId mapped_id3 = resource_map[id3]; | 1021 ResourceProvider::ResourceId mapped_id3 = resource_map[id3]; |
| 1034 ResourceProvider::ResourceId mapped_id4 = resource_map[id4]; | |
| 1035 EXPECT_NE(0u, mapped_id1); | 1022 EXPECT_NE(0u, mapped_id1); |
| 1036 EXPECT_NE(0u, mapped_id2); | 1023 EXPECT_NE(0u, mapped_id2); |
| 1037 EXPECT_NE(0u, mapped_id3); | 1024 EXPECT_NE(0u, mapped_id3); |
| 1038 EXPECT_NE(0u, mapped_id4); | |
| 1039 EXPECT_FALSE(resource_provider_->InUseByConsumer(id1)); | 1025 EXPECT_FALSE(resource_provider_->InUseByConsumer(id1)); |
| 1040 EXPECT_FALSE(resource_provider_->InUseByConsumer(id2)); | 1026 EXPECT_FALSE(resource_provider_->InUseByConsumer(id2)); |
| 1041 EXPECT_FALSE(resource_provider_->InUseByConsumer(id3)); | 1027 EXPECT_FALSE(resource_provider_->InUseByConsumer(id3)); |
| 1042 EXPECT_FALSE(resource_provider_->InUseByConsumer(id4)); | |
| 1043 | 1028 |
| 1044 uint8_t result[4] = { 0 }; | 1029 uint8_t result[4] = { 0 }; |
| 1045 GetResourcePixels( | 1030 GetResourcePixels( |
| 1046 resource_provider_.get(), context(), mapped_id1, size, format, result); | 1031 resource_provider_.get(), context(), mapped_id1, size, format, result); |
| 1047 EXPECT_EQ(0, memcmp(data1, result, pixel_size)); | 1032 EXPECT_EQ(0, memcmp(data1, result, pixel_size)); |
| 1048 | 1033 |
| 1049 GetResourcePixels( | 1034 GetResourcePixels( |
| 1050 resource_provider_.get(), context(), mapped_id2, size, format, result); | 1035 resource_provider_.get(), context(), mapped_id2, size, format, result); |
| 1051 EXPECT_EQ(0, memcmp(data2, result, pixel_size)); | 1036 EXPECT_EQ(0, memcmp(data2, result, pixel_size)); |
| 1052 | 1037 |
| 1053 GetResourcePixels( | |
| 1054 resource_provider_.get(), context(), mapped_id3, size, format, result); | |
| 1055 EXPECT_EQ(0, memcmp(data3, result, pixel_size)); | |
| 1056 | |
| 1057 { | 1038 { |
| 1058 // Check that transfering again the same resource from the child to the | 1039 // Check that transfering again the same resource from the child to the |
| 1059 // parent works. | 1040 // parent works. |
| 1060 ResourceProvider::ResourceIdArray resource_ids_to_transfer; | 1041 ResourceProvider::ResourceIdArray resource_ids_to_transfer; |
| 1061 resource_ids_to_transfer.push_back(id1); | 1042 resource_ids_to_transfer.push_back(id1); |
| 1062 resource_ids_to_transfer.push_back(id2); | 1043 resource_ids_to_transfer.push_back(id2); |
| 1063 resource_ids_to_transfer.push_back(id3); | |
| 1064 TransferableResourceArray list; | 1044 TransferableResourceArray list; |
| 1065 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, | 1045 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, |
| 1066 &list); | 1046 &list); |
| 1067 EXPECT_EQ(3u, list.size()); | 1047 EXPECT_EQ(2u, list.size()); |
| 1068 EXPECT_EQ(id1, list[0].id); | 1048 EXPECT_EQ(id1, list[0].id); |
| 1069 EXPECT_EQ(id2, list[1].id); | 1049 EXPECT_EQ(id2, list[1].id); |
| 1070 EXPECT_EQ(id3, list[2].id); | |
| 1071 ReturnedResourceArray returned; | 1050 ReturnedResourceArray returned; |
| 1072 TransferableResource::ReturnResources(list, &returned); | 1051 TransferableResource::ReturnResources(list, &returned); |
| 1073 child_resource_provider_->ReceiveReturnsFromParent(returned); | 1052 child_resource_provider_->ReceiveReturnsFromParent(returned); |
| 1074 // ids were exported twice, we returned them only once, they should still | 1053 // ids were exported twice, we returned them only once, they should still |
| 1075 // be in-use. | 1054 // be in-use. |
| 1076 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); | 1055 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); |
| 1077 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); | 1056 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); |
| 1078 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3)); | |
| 1079 } | 1057 } |
| 1080 { | 1058 { |
| 1081 EXPECT_EQ(0u, returned_to_child.size()); | 1059 EXPECT_EQ(0u, returned_to_child.size()); |
| 1082 | 1060 |
| 1083 // Transfer resources back from the parent to the child. Set no resources as | 1061 // Transfer resources back from the parent to the child. Set no resources as |
| 1084 // being in use. | 1062 // being in use. |
| 1085 ResourceProvider::ResourceIdArray no_resources; | 1063 ResourceProvider::ResourceIdArray no_resources; |
| 1086 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources); | 1064 resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources); |
| 1087 | 1065 |
| 1088 ASSERT_EQ(4u, returned_to_child.size()); | 1066 ASSERT_EQ(3u, returned_to_child.size()); |
| 1089 EXPECT_EQ(0u, returned_to_child[0].sync_point); | 1067 EXPECT_EQ(0u, returned_to_child[0].sync_point); |
| 1090 EXPECT_EQ(0u, returned_to_child[1].sync_point); | 1068 EXPECT_EQ(0u, returned_to_child[1].sync_point); |
| 1091 EXPECT_EQ(0u, returned_to_child[2].sync_point); | 1069 EXPECT_EQ(0u, returned_to_child[2].sync_point); |
| 1092 EXPECT_EQ(0u, returned_to_child[3].sync_point); | |
| 1093 std::set<ResourceProvider::ResourceId> expected_ids; | 1070 std::set<ResourceProvider::ResourceId> expected_ids; |
| 1094 expected_ids.insert(id1); | 1071 expected_ids.insert(id1); |
| 1095 expected_ids.insert(id2); | 1072 expected_ids.insert(id2); |
| 1096 expected_ids.insert(id3); | 1073 expected_ids.insert(id3); |
| 1097 expected_ids.insert(id4); | |
| 1098 std::set<ResourceProvider::ResourceId> returned_ids; | 1074 std::set<ResourceProvider::ResourceId> returned_ids; |
| 1099 for (unsigned i = 0; i < 4; i++) | 1075 for (unsigned i = 0; i < 3; i++) |
| 1100 returned_ids.insert(returned_to_child[i].id); | 1076 returned_ids.insert(returned_to_child[i].id); |
| 1101 EXPECT_EQ(expected_ids, returned_ids); | 1077 EXPECT_EQ(expected_ids, returned_ids); |
| 1102 EXPECT_FALSE(returned_to_child[0].lost); | 1078 EXPECT_FALSE(returned_to_child[0].lost); |
| 1103 EXPECT_FALSE(returned_to_child[1].lost); | 1079 EXPECT_FALSE(returned_to_child[1].lost); |
| 1104 EXPECT_FALSE(returned_to_child[2].lost); | 1080 EXPECT_FALSE(returned_to_child[2].lost); |
| 1105 EXPECT_FALSE(returned_to_child[3].lost); | |
| 1106 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child); | 1081 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child); |
| 1107 returned_to_child.clear(); | 1082 returned_to_child.clear(); |
| 1108 } | 1083 } |
| 1109 EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id1)); | 1084 EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id1)); |
| 1110 EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id2)); | 1085 EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id2)); |
| 1111 EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id3)); | 1086 EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id3)); |
| 1112 EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id4)); | |
| 1113 | 1087 |
| 1114 { | 1088 { |
| 1115 ResourceProvider::ScopedReadLockSoftware lock( | 1089 ResourceProvider::ScopedReadLockSoftware lock( |
| 1116 child_resource_provider_.get(), id1); | 1090 child_resource_provider_.get(), id1); |
| 1117 const SkBitmap* sk_bitmap = lock.sk_bitmap(); | 1091 const SkBitmap* sk_bitmap = lock.sk_bitmap(); |
| 1118 EXPECT_EQ(sk_bitmap->width(), size.width()); | 1092 EXPECT_EQ(sk_bitmap->width(), size.width()); |
| 1119 EXPECT_EQ(sk_bitmap->height(), size.height()); | 1093 EXPECT_EQ(sk_bitmap->height(), size.height()); |
| 1120 EXPECT_EQ(0, memcmp(data1, sk_bitmap->getPixels(), pixel_size)); | 1094 EXPECT_EQ(0, memcmp(data1, sk_bitmap->getPixels(), pixel_size)); |
| 1121 } | 1095 } |
| 1122 { | 1096 { |
| 1123 ResourceProvider::ScopedReadLockSoftware lock( | 1097 ResourceProvider::ScopedReadLockSoftware lock( |
| 1124 child_resource_provider_.get(), id2); | 1098 child_resource_provider_.get(), id2); |
| 1125 const SkBitmap* sk_bitmap = lock.sk_bitmap(); | 1099 const SkBitmap* sk_bitmap = lock.sk_bitmap(); |
| 1126 EXPECT_EQ(sk_bitmap->width(), size.width()); | 1100 EXPECT_EQ(sk_bitmap->width(), size.width()); |
| 1127 EXPECT_EQ(sk_bitmap->height(), size.height()); | 1101 EXPECT_EQ(sk_bitmap->height(), size.height()); |
| 1128 EXPECT_EQ(0, memcmp(data2, sk_bitmap->getPixels(), pixel_size)); | 1102 EXPECT_EQ(0, memcmp(data2, sk_bitmap->getPixels(), pixel_size)); |
| 1129 } | 1103 } |
| 1130 { | 1104 { |
| 1131 ResourceProvider::ScopedReadLockSoftware lock( | |
| 1132 child_resource_provider_.get(), id3); | |
| 1133 const SkBitmap* sk_bitmap = lock.sk_bitmap(); | |
| 1134 EXPECT_EQ(sk_bitmap->width(), size.width()); | |
| 1135 EXPECT_EQ(sk_bitmap->height(), size.height()); | |
| 1136 EXPECT_EQ(0, memcmp(data3, sk_bitmap->getPixels(), pixel_size)); | |
| 1137 } | |
| 1138 { | |
| 1139 // Transfer resources to the parent again. | 1105 // Transfer resources to the parent again. |
| 1140 ResourceProvider::ResourceIdArray resource_ids_to_transfer; | 1106 ResourceProvider::ResourceIdArray resource_ids_to_transfer; |
| 1141 resource_ids_to_transfer.push_back(id1); | 1107 resource_ids_to_transfer.push_back(id1); |
| 1142 resource_ids_to_transfer.push_back(id2); | 1108 resource_ids_to_transfer.push_back(id2); |
| 1143 resource_ids_to_transfer.push_back(id3); | 1109 resource_ids_to_transfer.push_back(id3); |
| 1144 resource_ids_to_transfer.push_back(id4); | |
| 1145 TransferableResourceArray list; | 1110 TransferableResourceArray list; |
| 1146 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, | 1111 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, |
| 1147 &list); | 1112 &list); |
| 1148 ASSERT_EQ(4u, list.size()); | 1113 ASSERT_EQ(3u, list.size()); |
| 1149 EXPECT_EQ(id1, list[0].id); | 1114 EXPECT_EQ(id1, list[0].id); |
| 1150 EXPECT_EQ(id2, list[1].id); | 1115 EXPECT_EQ(id2, list[1].id); |
| 1151 EXPECT_EQ(id3, list[2].id); | 1116 EXPECT_EQ(id3, list[2].id); |
| 1152 EXPECT_EQ(id4, list[3].id); | |
| 1153 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); | 1117 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); |
| 1154 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); | 1118 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2)); |
| 1155 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3)); | 1119 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3)); |
| 1156 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id4)); | |
| 1157 resource_provider_->ReceiveFromChild(child_id, list); | 1120 resource_provider_->ReceiveFromChild(child_id, list); |
| 1158 resource_provider_->DeclareUsedResourcesFromChild(child_id, | 1121 resource_provider_->DeclareUsedResourcesFromChild(child_id, |
| 1159 resource_ids_to_transfer); | 1122 resource_ids_to_transfer); |
| 1160 } | 1123 } |
| 1161 | 1124 |
| 1162 EXPECT_EQ(0u, returned_to_child.size()); | 1125 EXPECT_EQ(0u, returned_to_child.size()); |
| 1163 | 1126 |
| 1164 EXPECT_EQ(4u, resource_provider_->num_resources()); | 1127 EXPECT_EQ(3u, resource_provider_->num_resources()); |
| 1165 resource_provider_->DestroyChild(child_id); | 1128 resource_provider_->DestroyChild(child_id); |
| 1166 EXPECT_EQ(0u, resource_provider_->num_resources()); | 1129 EXPECT_EQ(0u, resource_provider_->num_resources()); |
| 1167 | 1130 |
| 1168 ASSERT_EQ(4u, returned_to_child.size()); | 1131 ASSERT_EQ(3u, returned_to_child.size()); |
| 1169 EXPECT_EQ(0u, returned_to_child[0].sync_point); | 1132 EXPECT_EQ(0u, returned_to_child[0].sync_point); |
| 1170 EXPECT_EQ(0u, returned_to_child[1].sync_point); | 1133 EXPECT_EQ(0u, returned_to_child[1].sync_point); |
| 1171 EXPECT_EQ(0u, returned_to_child[2].sync_point); | 1134 EXPECT_EQ(0u, returned_to_child[2].sync_point); |
| 1172 EXPECT_EQ(0u, returned_to_child[3].sync_point); | |
| 1173 std::set<ResourceProvider::ResourceId> expected_ids; | 1135 std::set<ResourceProvider::ResourceId> expected_ids; |
| 1174 expected_ids.insert(id1); | 1136 expected_ids.insert(id1); |
| 1175 expected_ids.insert(id2); | 1137 expected_ids.insert(id2); |
| 1176 expected_ids.insert(id3); | 1138 expected_ids.insert(id3); |
| 1177 expected_ids.insert(id4); | |
| 1178 std::set<ResourceProvider::ResourceId> returned_ids; | 1139 std::set<ResourceProvider::ResourceId> returned_ids; |
| 1179 for (unsigned i = 0; i < 4; i++) | 1140 for (unsigned i = 0; i < 3; i++) |
| 1180 returned_ids.insert(returned_to_child[i].id); | 1141 returned_ids.insert(returned_to_child[i].id); |
| 1181 EXPECT_EQ(expected_ids, returned_ids); | 1142 EXPECT_EQ(expected_ids, returned_ids); |
| 1182 EXPECT_FALSE(returned_to_child[0].lost); | 1143 EXPECT_FALSE(returned_to_child[0].lost); |
| 1183 EXPECT_FALSE(returned_to_child[1].lost); | 1144 EXPECT_FALSE(returned_to_child[1].lost); |
| 1184 EXPECT_FALSE(returned_to_child[2].lost); | 1145 EXPECT_FALSE(returned_to_child[2].lost); |
| 1185 EXPECT_FALSE(returned_to_child[3].lost); | |
| 1186 } | 1146 } |
| 1187 | 1147 |
| 1188 TEST_P(ResourceProviderTest, TransferGLToSoftware) { | 1148 TEST_P(ResourceProviderTest, TransferGLToSoftware) { |
| 1189 if (GetParam() != ResourceProvider::Bitmap) | 1149 if (GetParam() != ResourceProvider::Bitmap) |
| 1190 return; | 1150 return; |
| 1191 | 1151 |
| 1192 scoped_ptr<ResourceProviderContext> child_context_owned( | 1152 scoped_ptr<ResourceProviderContext> child_context_owned( |
| 1193 ResourceProviderContext::Create(shared_data_.get())); | 1153 ResourceProviderContext::Create(shared_data_.get())); |
| 1194 | 1154 |
| 1195 FakeOutputSurfaceClient child_output_surface_client; | 1155 FakeOutputSurfaceClient child_output_surface_client; |
| (...skipping 2226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3422 ResourceProvider::ScopedSamplerGL lock_gl( | 3382 ResourceProvider::ScopedSamplerGL lock_gl( |
| 3423 resource_provider.get(), id, GL_TEXTURE_2D, GL_LINEAR); | 3383 resource_provider.get(), id, GL_TEXTURE_2D, GL_LINEAR); |
| 3424 EXPECT_EQ(kTextureId, lock_gl.texture_id()); | 3384 EXPECT_EQ(kTextureId, lock_gl.texture_id()); |
| 3425 } | 3385 } |
| 3426 | 3386 |
| 3427 EXPECT_CALL(*context, destroyImageCHROMIUM(kImageId)) | 3387 EXPECT_CALL(*context, destroyImageCHROMIUM(kImageId)) |
| 3428 .Times(1) | 3388 .Times(1) |
| 3429 .RetiresOnSaturation(); | 3389 .RetiresOnSaturation(); |
| 3430 } | 3390 } |
| 3431 | 3391 |
| 3432 TEST_P(ResourceProviderTest, Image_Bitmap) { | |
| 3433 if (GetParam() != ResourceProvider::Bitmap) | |
| 3434 return; | |
| 3435 FakeOutputSurfaceClient output_surface_client; | |
| 3436 scoped_ptr<OutputSurface> output_surface( | |
| 3437 FakeOutputSurface::CreateSoftware(make_scoped_ptr( | |
| 3438 new SoftwareOutputDevice))); | |
| 3439 CHECK(output_surface->BindToClient(&output_surface_client)); | |
| 3440 | |
| 3441 gfx::Size size(1, 1); | |
| 3442 ResourceFormat format = RGBA_8888; | |
| 3443 ResourceProvider::ResourceId id = 0; | |
| 3444 const uint32_t kBadBeef = 0xbadbeef; | |
| 3445 | |
| 3446 scoped_ptr<ResourceProvider> resource_provider( | |
| 3447 ResourceProvider::Create(output_surface.get(), | |
| 3448 shared_bitmap_manager_.get(), | |
| 3449 NULL, | |
| 3450 0, | |
| 3451 false, | |
| 3452 1, | |
| 3453 false)); | |
| 3454 | |
| 3455 id = resource_provider->CreateResource( | |
| 3456 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | |
| 3457 resource_provider->AcquireImage(id); | |
| 3458 | |
| 3459 int stride; | |
| 3460 void* data = resource_provider->MapImage(id, &stride); | |
| 3461 ASSERT_TRUE(!!data); | |
| 3462 memcpy(data, &kBadBeef, sizeof(kBadBeef)); | |
| 3463 resource_provider->UnmapImage(id); | |
| 3464 | |
| 3465 { | |
| 3466 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id); | |
| 3467 const SkBitmap* sk_bitmap = lock.sk_bitmap(); | |
| 3468 EXPECT_EQ(sk_bitmap->width(), size.width()); | |
| 3469 EXPECT_EQ(sk_bitmap->height(), size.height()); | |
| 3470 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef); | |
| 3471 } | |
| 3472 | |
| 3473 resource_provider->ReleaseImage(id); | |
| 3474 resource_provider->DeleteResource(id); | |
| 3475 } | |
| 3476 | |
| 3477 TEST_P(ResourceProviderTest, CopyResource_GLTexture) { | 3392 TEST_P(ResourceProviderTest, CopyResource_GLTexture) { |
| 3478 if (GetParam() != ResourceProvider::GLTexture) | 3393 if (GetParam() != ResourceProvider::GLTexture) |
| 3479 return; | 3394 return; |
| 3480 scoped_ptr<AllocationTrackingContext3D> context_owned( | 3395 scoped_ptr<AllocationTrackingContext3D> context_owned( |
| 3481 new StrictMock<AllocationTrackingContext3D>); | 3396 new StrictMock<AllocationTrackingContext3D>); |
| 3482 AllocationTrackingContext3D* context = context_owned.get(); | 3397 AllocationTrackingContext3D* context = context_owned.get(); |
| 3483 context_owned->set_support_sync_query(true); | 3398 context_owned->set_support_sync_query(true); |
| 3484 | 3399 |
| 3485 FakeOutputSurfaceClient output_surface_client; | 3400 FakeOutputSurfaceClient output_surface_client; |
| 3486 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( | 3401 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3560 EXPECT_CALL(*context, RetireTextureId(kSourceTextureId)) | 3475 EXPECT_CALL(*context, RetireTextureId(kSourceTextureId)) |
| 3561 .Times(1) | 3476 .Times(1) |
| 3562 .RetiresOnSaturation(); | 3477 .RetiresOnSaturation(); |
| 3563 EXPECT_CALL(*context, RetireTextureId(kDestTextureId)) | 3478 EXPECT_CALL(*context, RetireTextureId(kDestTextureId)) |
| 3564 .Times(1) | 3479 .Times(1) |
| 3565 .RetiresOnSaturation(); | 3480 .RetiresOnSaturation(); |
| 3566 resource_provider->DeleteResource(source_id); | 3481 resource_provider->DeleteResource(source_id); |
| 3567 resource_provider->DeleteResource(dest_id); | 3482 resource_provider->DeleteResource(dest_id); |
| 3568 } | 3483 } |
| 3569 | 3484 |
| 3570 TEST_P(ResourceProviderTest, CopyResource_Bitmap) { | |
| 3571 if (GetParam() != ResourceProvider::Bitmap) | |
| 3572 return; | |
| 3573 FakeOutputSurfaceClient output_surface_client; | |
| 3574 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::CreateSoftware( | |
| 3575 make_scoped_ptr(new SoftwareOutputDevice))); | |
| 3576 CHECK(output_surface->BindToClient(&output_surface_client)); | |
| 3577 | |
| 3578 gfx::Size size(1, 1); | |
| 3579 ResourceFormat format = RGBA_8888; | |
| 3580 ResourceProvider::ResourceId source_id = 0; | |
| 3581 ResourceProvider::ResourceId dest_id = 0; | |
| 3582 const uint32_t kBadBeef = 0xbadbeef; | |
| 3583 | |
| 3584 scoped_ptr<ResourceProvider> resource_provider( | |
| 3585 ResourceProvider::Create(output_surface.get(), | |
| 3586 shared_bitmap_manager_.get(), | |
| 3587 NULL, | |
| 3588 0, | |
| 3589 false, | |
| 3590 1, | |
| 3591 false)); | |
| 3592 | |
| 3593 source_id = resource_provider->CreateResource( | |
| 3594 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | |
| 3595 resource_provider->AcquireImage(source_id); | |
| 3596 | |
| 3597 int stride; | |
| 3598 void* data = resource_provider->MapImage(source_id, &stride); | |
| 3599 ASSERT_TRUE(!!data); | |
| 3600 memcpy(data, &kBadBeef, sizeof(kBadBeef)); | |
| 3601 resource_provider->UnmapImage(source_id); | |
| 3602 | |
| 3603 dest_id = resource_provider->CreateResource( | |
| 3604 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); | |
| 3605 | |
| 3606 resource_provider->CopyResource(source_id, dest_id); | |
| 3607 | |
| 3608 { | |
| 3609 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), | |
| 3610 dest_id); | |
| 3611 const SkBitmap* sk_bitmap = lock.sk_bitmap(); | |
| 3612 EXPECT_EQ(sk_bitmap->width(), size.width()); | |
| 3613 EXPECT_EQ(sk_bitmap->height(), size.height()); | |
| 3614 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef); | |
| 3615 } | |
| 3616 | |
| 3617 resource_provider->DeleteResource(source_id); | |
| 3618 resource_provider->DeleteResource(dest_id); | |
| 3619 } | |
| 3620 | |
| 3621 void InitializeGLAndCheck(ContextSharedData* shared_data, | 3485 void InitializeGLAndCheck(ContextSharedData* shared_data, |
| 3622 ResourceProvider* resource_provider, | 3486 ResourceProvider* resource_provider, |
| 3623 FakeOutputSurface* output_surface) { | 3487 FakeOutputSurface* output_surface) { |
| 3624 scoped_ptr<ResourceProviderContext> context_owned = | 3488 scoped_ptr<ResourceProviderContext> context_owned = |
| 3625 ResourceProviderContext::Create(shared_data); | 3489 ResourceProviderContext::Create(shared_data); |
| 3626 ResourceProviderContext* context = context_owned.get(); | 3490 ResourceProviderContext* context = context_owned.get(); |
| 3627 | 3491 |
| 3628 scoped_refptr<TestContextProvider> context_provider = | 3492 scoped_refptr<TestContextProvider> context_provider = |
| 3629 TestContextProvider::Create( | 3493 TestContextProvider::Create( |
| 3630 context_owned.PassAs<TestWebGraphicsContext3D>()); | 3494 context_owned.PassAs<TestWebGraphicsContext3D>()); |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3815 resource_provider->AllocateForTesting(id); | 3679 resource_provider->AllocateForTesting(id); |
| 3816 Mock::VerifyAndClearExpectations(context); | 3680 Mock::VerifyAndClearExpectations(context); |
| 3817 | 3681 |
| 3818 DCHECK_EQ(10u, context->PeekTextureId()); | 3682 DCHECK_EQ(10u, context->PeekTextureId()); |
| 3819 resource_provider->DeleteResource(id); | 3683 resource_provider->DeleteResource(id); |
| 3820 } | 3684 } |
| 3821 } | 3685 } |
| 3822 | 3686 |
| 3823 } // namespace | 3687 } // namespace |
| 3824 } // namespace cc | 3688 } // namespace cc |
| OLD | NEW |