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 <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 1076 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1087 } | 1087 } |
1088 | 1088 |
1089 resource_provider_->DestroyChild(child_id); | 1089 resource_provider_->DestroyChild(child_id); |
1090 } | 1090 } |
1091 | 1091 |
1092 INSTANTIATE_TEST_CASE_P( | 1092 INSTANTIATE_TEST_CASE_P( |
1093 ResourceProviderTests, | 1093 ResourceProviderTests, |
1094 ResourceProviderTestNoSyncToken, | 1094 ResourceProviderTestNoSyncToken, |
1095 ::testing::Values(ResourceProvider::RESOURCE_TYPE_GL_TEXTURE)); | 1095 ::testing::Values(ResourceProvider::RESOURCE_TYPE_GL_TEXTURE)); |
1096 | 1096 |
| 1097 // Test that SetBatchReturnResources batching works. |
| 1098 TEST_P(ResourceProviderTest, SetBatchPreventsReturn) { |
| 1099 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
| 1100 return; |
| 1101 gfx::Size size(1, 1); |
| 1102 ResourceFormat format = RGBA_8888; |
| 1103 |
| 1104 uint8_t data1[4] = {1, 2, 3, 4}; |
| 1105 ReturnedResourceArray returned_to_child; |
| 1106 int child_id = |
| 1107 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); |
| 1108 |
| 1109 // Transfer some resources to the parent. |
| 1110 ResourceProvider::ResourceIdArray resource_ids_to_transfer; |
| 1111 ResourceId ids[2]; |
| 1112 for (size_t i = 0; i < arraysize(ids); i++) { |
| 1113 ids[i] = child_resource_provider_->CreateResource( |
| 1114 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format, |
| 1115 gfx::ColorSpace()); |
| 1116 child_resource_provider_->CopyToResource(ids[i], data1, size); |
| 1117 resource_ids_to_transfer.push_back(ids[i]); |
| 1118 } |
| 1119 |
| 1120 child_resource_provider_->GenerateSyncTokenForResources( |
| 1121 resource_ids_to_transfer); |
| 1122 |
| 1123 TransferableResourceArray list; |
| 1124 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, |
| 1125 &list); |
| 1126 ASSERT_EQ(2u, list.size()); |
| 1127 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(ids[0])); |
| 1128 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(ids[1])); |
| 1129 |
| 1130 resource_provider_->ReceiveFromChild(child_id, list); |
| 1131 |
| 1132 std::vector<std::unique_ptr<ResourceProvider::ScopedReadLockGL>> read_locks; |
| 1133 for (auto& parent_resource : list) { |
| 1134 resource_provider_->WaitSyncTokenIfNeeded(parent_resource.id); |
| 1135 read_locks.push_back(base::MakeUnique<ResourceProvider::ScopedReadLockGL>( |
| 1136 resource_provider_.get(), parent_resource.id)); |
| 1137 } |
| 1138 |
| 1139 resource_provider_->DeclareUsedResourcesFromChild(child_id, ResourceIdSet()); |
| 1140 std::unique_ptr<ResourceProvider::ScopedBatchReturnResources> returner = |
| 1141 base::MakeUnique<ResourceProvider::ScopedBatchReturnResources>( |
| 1142 resource_provider_.get()); |
| 1143 EXPECT_EQ(0u, returned_to_child.size()); |
| 1144 |
| 1145 read_locks.clear(); |
| 1146 EXPECT_EQ(0u, returned_to_child.size()); |
| 1147 |
| 1148 returner.reset(); |
| 1149 EXPECT_EQ(2u, returned_to_child.size()); |
| 1150 // All resources in a batch should share a sync token. |
| 1151 EXPECT_EQ(returned_to_child[0].sync_token, returned_to_child[1].sync_token); |
| 1152 |
| 1153 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child); |
| 1154 child_resource_provider_->DeleteResource(ids[0]); |
| 1155 child_resource_provider_->DeleteResource(ids[1]); |
| 1156 EXPECT_EQ(0u, child_resource_provider_->num_resources()); |
| 1157 } |
| 1158 |
1097 TEST_P(ResourceProviderTest, ReadLockCountStopsReturnToChildOrDelete) { | 1159 TEST_P(ResourceProviderTest, ReadLockCountStopsReturnToChildOrDelete) { |
1098 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) | 1160 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
1099 return; | 1161 return; |
1100 gfx::Size size(1, 1); | 1162 gfx::Size size(1, 1); |
1101 ResourceFormat format = RGBA_8888; | 1163 ResourceFormat format = RGBA_8888; |
1102 | 1164 |
1103 ResourceId id1 = child_resource_provider_->CreateResource( | 1165 ResourceId id1 = child_resource_provider_->CreateResource( |
1104 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format, | 1166 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format, |
1105 gfx::ColorSpace()); | 1167 gfx::ColorSpace()); |
1106 uint8_t data1[4] = {1, 2, 3, 4}; | 1168 uint8_t data1[4] = {1, 2, 3, 4}; |
(...skipping 2700 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3807 lock.set_sync_token(token); | 3869 lock.set_sync_token(token); |
3808 } | 3870 } |
3809 | 3871 |
3810 gpu::SyncToken last_token = | 3872 gpu::SyncToken last_token = |
3811 resource_provider_->GetSyncTokenForResources(array); | 3873 resource_provider_->GetSyncTokenForResources(array); |
3812 EXPECT_EQ(last_token.release_count(), 10u); | 3874 EXPECT_EQ(last_token.release_count(), 10u); |
3813 } | 3875 } |
3814 | 3876 |
3815 } // namespace | 3877 } // namespace |
3816 } // namespace cc | 3878 } // namespace cc |
OLD | NEW |