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

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

Issue 602493003: cc: Add BitmapRasterWorkerPool. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@reduce-transfer-buffer-limit-use
Patch Set: fix unit test Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/resources/resource_provider.cc ('k') | cc/trees/layer_tree_host_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/resources/resource_provider.h" 5 #include "cc/resources/resource_provider.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <set> 9 #include <set>
10 10
(...skipping 962 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
OLDNEW
« no previous file with comments | « cc/resources/resource_provider.cc ('k') | cc/trees/layer_tree_host_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698