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 |