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

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

Issue 1989453003: cc: Add ScopedReadLockGpuMemoryBuffer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix aura typo Created 4 years, 7 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/surfaces/surface.h » ('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 <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 base::WrapUnique(new SoftwareOutputDevice)); 449 base::WrapUnique(new SoftwareOutputDevice));
450 child_output_surface_ = FakeOutputSurface::CreateSoftware( 450 child_output_surface_ = FakeOutputSurface::CreateSoftware(
451 base::WrapUnique(new SoftwareOutputDevice)); 451 base::WrapUnique(new SoftwareOutputDevice));
452 break; 452 break;
453 } 453 }
454 CHECK(output_surface_->BindToClient(&output_surface_client_)); 454 CHECK(output_surface_->BindToClient(&output_surface_client_));
455 CHECK(child_output_surface_->BindToClient(&child_output_surface_client_)); 455 CHECK(child_output_surface_->BindToClient(&child_output_surface_client_));
456 456
457 shared_bitmap_manager_.reset(new TestSharedBitmapManager); 457 shared_bitmap_manager_.reset(new TestSharedBitmapManager);
458 gpu_memory_buffer_manager_.reset(new TestGpuMemoryBufferManager); 458 gpu_memory_buffer_manager_.reset(new TestGpuMemoryBufferManager);
459 child_gpu_memory_buffer_manager_ =
460 gpu_memory_buffer_manager_->CreateClientGpuMemoryBufferManager();
459 461
460 resource_provider_ = ResourceProvider::Create( 462 resource_provider_ = ResourceProvider::Create(
461 output_surface_.get(), shared_bitmap_manager_.get(), 463 output_surface_.get(), shared_bitmap_manager_.get(),
462 gpu_memory_buffer_manager_.get(), main_thread_task_runner_.get(), 0, 1, 464 gpu_memory_buffer_manager_.get(), main_thread_task_runner_.get(), 0, 1,
463 use_gpu_memory_buffer_resources_, use_image_texture_targets_); 465 use_gpu_memory_buffer_resources_, use_image_texture_targets_);
464 child_resource_provider_ = ResourceProvider::Create( 466 child_resource_provider_ = ResourceProvider::Create(
465 child_output_surface_.get(), shared_bitmap_manager_.get(), 467 child_output_surface_.get(), shared_bitmap_manager_.get(),
466 gpu_memory_buffer_manager_.get(), main_thread_task_runner_.get(), 0, 1, 468 child_gpu_memory_buffer_manager_.get(), main_thread_task_runner_.get(),
467 use_gpu_memory_buffer_resources_, use_image_texture_targets_); 469 0, 1, use_gpu_memory_buffer_resources_, use_image_texture_targets_);
468 } 470 }
469 471
470 ResourceProviderTest() : ResourceProviderTest(true) {} 472 ResourceProviderTest() : ResourceProviderTest(true) {}
471 473
472 static void CollectResources(ReturnedResourceArray* array, 474 static void CollectResources(ReturnedResourceArray* array,
473 const ReturnedResourceArray& returned, 475 const ReturnedResourceArray& returned,
474 BlockingTaskRunner* main_thread_task_runner) { 476 BlockingTaskRunner* main_thread_task_runner) {
475 array->insert(array->end(), returned.begin(), returned.end()); 477 array->insert(array->end(), returned.begin(), returned.end());
476 } 478 }
477 479
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
537 static bool use_gpu_memory_buffer_resources_; 539 static bool use_gpu_memory_buffer_resources_;
538 static std::vector<unsigned> use_image_texture_targets_; 540 static std::vector<unsigned> use_image_texture_targets_;
539 std::unique_ptr<ContextSharedData> shared_data_; 541 std::unique_ptr<ContextSharedData> shared_data_;
540 ResourceProviderContext* context3d_; 542 ResourceProviderContext* context3d_;
541 ResourceProviderContext* child_context_; 543 ResourceProviderContext* child_context_;
542 FakeOutputSurfaceClient output_surface_client_; 544 FakeOutputSurfaceClient output_surface_client_;
543 FakeOutputSurfaceClient child_output_surface_client_; 545 FakeOutputSurfaceClient child_output_surface_client_;
544 std::unique_ptr<OutputSurface> output_surface_; 546 std::unique_ptr<OutputSurface> output_surface_;
545 std::unique_ptr<OutputSurface> child_output_surface_; 547 std::unique_ptr<OutputSurface> child_output_surface_;
546 std::unique_ptr<BlockingTaskRunner> main_thread_task_runner_; 548 std::unique_ptr<BlockingTaskRunner> main_thread_task_runner_;
549 std::unique_ptr<TestGpuMemoryBufferManager> gpu_memory_buffer_manager_;
547 std::unique_ptr<ResourceProvider> resource_provider_; 550 std::unique_ptr<ResourceProvider> resource_provider_;
551 std::unique_ptr<TestGpuMemoryBufferManager> child_gpu_memory_buffer_manager_;
548 std::unique_ptr<ResourceProvider> child_resource_provider_; 552 std::unique_ptr<ResourceProvider> child_resource_provider_;
549 std::unique_ptr<TestSharedBitmapManager> shared_bitmap_manager_; 553 std::unique_ptr<TestSharedBitmapManager> shared_bitmap_manager_;
550 std::unique_ptr<TestGpuMemoryBufferManager> gpu_memory_buffer_manager_;
551 }; 554 };
552 555
553 bool ResourceProviderTest::use_gpu_memory_buffer_resources_ = false; 556 bool ResourceProviderTest::use_gpu_memory_buffer_resources_ = false;
554 557
555 std::vector<unsigned> ResourceProviderTest::use_image_texture_targets_ = 558 std::vector<unsigned> ResourceProviderTest::use_image_texture_targets_ =
556 std::vector<unsigned>(static_cast<size_t>(gfx::BufferFormat::LAST) + 1, 559 std::vector<unsigned>(static_cast<size_t>(gfx::BufferFormat::LAST) + 1,
557 GL_TEXTURE_2D); 560 GL_TEXTURE_2D);
558 561
559 void CheckCreateResource(ResourceProvider::ResourceType expected_default_type, 562 void CheckCreateResource(ResourceProvider::ResourceType expected_default_type,
560 ResourceProvider* resource_provider, 563 ResourceProvider* resource_provider,
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 gpu::SyncToken external_sync_token; 661 gpu::SyncToken external_sync_token;
659 child_context_->genSyncToken(child_context_->insertFenceSync(), 662 child_context_->genSyncToken(child_context_->insertFenceSync(),
660 external_sync_token.GetData()); 663 external_sync_token.GetData());
661 EXPECT_TRUE(external_sync_token.HasData()); 664 EXPECT_TRUE(external_sync_token.HasData());
662 ResourceId id4 = child_resource_provider_->CreateResourceFromTextureMailbox( 665 ResourceId id4 = child_resource_provider_->CreateResourceFromTextureMailbox(
663 TextureMailbox(external_mailbox, external_sync_token, 666 TextureMailbox(external_mailbox, external_sync_token,
664 GL_TEXTURE_EXTERNAL_OES), 667 GL_TEXTURE_EXTERNAL_OES),
665 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback))); 668 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)));
666 669
667 ReturnedResourceArray returned_to_child; 670 ReturnedResourceArray returned_to_child;
668 int child_id = 671 int child_id = resource_provider_->CreateChild(
669 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 672 GetReturnCallback(&returned_to_child),
673 child_gpu_memory_buffer_manager_->GetClientId());
674
670 { 675 {
671 // Transfer some resources to the parent. 676 // Transfer some resources to the parent.
672 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 677 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
673 resource_ids_to_transfer.push_back(id1); 678 resource_ids_to_transfer.push_back(id1);
674 resource_ids_to_transfer.push_back(id2); 679 resource_ids_to_transfer.push_back(id2);
675 resource_ids_to_transfer.push_back(id3); 680 resource_ids_to_transfer.push_back(id3);
676 resource_ids_to_transfer.push_back(id4); 681 resource_ids_to_transfer.push_back(id4);
677 682
678 child_resource_provider_->GenerateSyncTokenForResources( 683 child_resource_provider_->GenerateSyncTokenForResources(
679 resource_ids_to_transfer); 684 resource_ids_to_transfer);
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 gpu::SyncToken external_sync_token; 926 gpu::SyncToken external_sync_token;
922 child_context_->genSyncToken(child_context_->insertFenceSync(), 927 child_context_->genSyncToken(child_context_->insertFenceSync(),
923 external_sync_token.GetData()); 928 external_sync_token.GetData());
924 EXPECT_TRUE(external_sync_token.HasData()); 929 EXPECT_TRUE(external_sync_token.HasData());
925 ResourceId id3 = child_resource_provider_->CreateResourceFromTextureMailbox( 930 ResourceId id3 = child_resource_provider_->CreateResourceFromTextureMailbox(
926 TextureMailbox(external_mailbox, external_sync_token, 931 TextureMailbox(external_mailbox, external_sync_token,
927 GL_TEXTURE_EXTERNAL_OES), 932 GL_TEXTURE_EXTERNAL_OES),
928 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback))); 933 SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)));
929 934
930 ReturnedResourceArray returned_to_child; 935 ReturnedResourceArray returned_to_child;
931 int child_id = 936 int child_id = resource_provider_->CreateChild(
932 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 937 GetReturnCallback(&returned_to_child),
938 child_gpu_memory_buffer_manager_->GetClientId());
933 resource_provider_->SetChildNeedsSyncTokens(child_id, false); 939 resource_provider_->SetChildNeedsSyncTokens(child_id, false);
934 { 940 {
935 // Transfer some resources to the parent. 941 // Transfer some resources to the parent.
936 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 942 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
937 resource_ids_to_transfer.push_back(id1); 943 resource_ids_to_transfer.push_back(id1);
938 resource_ids_to_transfer.push_back(id2); 944 resource_ids_to_transfer.push_back(id2);
939 resource_ids_to_transfer.push_back(id3); 945 resource_ids_to_transfer.push_back(id3);
940 TransferableResourceArray list; 946 TransferableResourceArray list;
941 child_resource_provider_->GenerateSyncTokenForResources( 947 child_resource_provider_->GenerateSyncTokenForResources(
942 resource_ids_to_transfer); 948 resource_ids_to_transfer);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1000 return; 1006 return;
1001 gfx::Size size(1, 1); 1007 gfx::Size size(1, 1);
1002 ResourceFormat format = RGBA_8888; 1008 ResourceFormat format = RGBA_8888;
1003 1009
1004 ResourceId id1 = child_resource_provider_->CreateResource( 1010 ResourceId id1 = child_resource_provider_->CreateResource(
1005 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1011 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1006 uint8_t data1[4] = {1, 2, 3, 4}; 1012 uint8_t data1[4] = {1, 2, 3, 4};
1007 child_resource_provider_->CopyToResource(id1, data1, size); 1013 child_resource_provider_->CopyToResource(id1, data1, size);
1008 1014
1009 ReturnedResourceArray returned_to_child; 1015 ReturnedResourceArray returned_to_child;
1010 int child_id = 1016 int child_id = resource_provider_->CreateChild(
1011 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1017 GetReturnCallback(&returned_to_child),
1018 child_gpu_memory_buffer_manager_->GetClientId());
1012 { 1019 {
1013 // Transfer some resources to the parent. 1020 // Transfer some resources to the parent.
1014 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1021 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1015 resource_ids_to_transfer.push_back(id1); 1022 resource_ids_to_transfer.push_back(id1);
1016 1023
1017 child_resource_provider_->GenerateSyncTokenForResources( 1024 child_resource_provider_->GenerateSyncTokenForResources(
1018 resource_ids_to_transfer); 1025 resource_ids_to_transfer);
1019 1026
1020 TransferableResourceArray list; 1027 TransferableResourceArray list;
1021 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1028 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1069 return; 1076 return;
1070 gfx::Size size(1, 1); 1077 gfx::Size size(1, 1);
1071 ResourceFormat format = RGBA_8888; 1078 ResourceFormat format = RGBA_8888;
1072 1079
1073 ResourceId id1 = child_resource_provider_->CreateResource( 1080 ResourceId id1 = child_resource_provider_->CreateResource(
1074 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1081 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1075 uint8_t data1[4] = {1, 2, 3, 4}; 1082 uint8_t data1[4] = {1, 2, 3, 4};
1076 child_resource_provider_->CopyToResource(id1, data1, size); 1083 child_resource_provider_->CopyToResource(id1, data1, size);
1077 child_resource_provider_->EnableReadLockFencesForTesting(id1); 1084 child_resource_provider_->EnableReadLockFencesForTesting(id1);
1078 ReturnedResourceArray returned_to_child; 1085 ReturnedResourceArray returned_to_child;
1079 int child_id = 1086 int child_id = resource_provider_->CreateChild(
1080 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1087 GetReturnCallback(&returned_to_child),
1088 child_gpu_memory_buffer_manager_->GetClientId());
1081 1089
1082 // Transfer some resources to the parent. 1090 // Transfer some resources to the parent.
1083 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1091 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1084 resource_ids_to_transfer.push_back(id1); 1092 resource_ids_to_transfer.push_back(id1);
1085 1093
1086 child_resource_provider_->GenerateSyncTokenForResources( 1094 child_resource_provider_->GenerateSyncTokenForResources(
1087 resource_ids_to_transfer); 1095 resource_ids_to_transfer);
1088 1096
1089 TransferableResourceArray list; 1097 TransferableResourceArray list;
1090 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1098 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1131 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1139 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1132 uint8_t data[4] = {1, 2, 3, 4}; 1140 uint8_t data[4] = {1, 2, 3, 4};
1133 child_resource_provider_->CopyToResource(id1, data, size); 1141 child_resource_provider_->CopyToResource(id1, data, size);
1134 child_resource_provider_->EnableReadLockFencesForTesting(id1); 1142 child_resource_provider_->EnableReadLockFencesForTesting(id1);
1135 1143
1136 ResourceId id2 = child_resource_provider_->CreateResource( 1144 ResourceId id2 = child_resource_provider_->CreateResource(
1137 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1145 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1138 child_resource_provider_->CopyToResource(id2, data, size); 1146 child_resource_provider_->CopyToResource(id2, data, size);
1139 1147
1140 ReturnedResourceArray returned_to_child; 1148 ReturnedResourceArray returned_to_child;
1141 int child_id = 1149 int child_id = resource_provider_->CreateChild(
1142 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1150 GetReturnCallback(&returned_to_child),
1151 child_gpu_memory_buffer_manager_->GetClientId());
1143 1152
1144 // Transfer resources to the parent. 1153 // Transfer resources to the parent.
1145 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1154 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1146 resource_ids_to_transfer.push_back(id1); 1155 resource_ids_to_transfer.push_back(id1);
1147 resource_ids_to_transfer.push_back(id2); 1156 resource_ids_to_transfer.push_back(id2);
1148 1157
1149 child_resource_provider_->GenerateSyncTokenForResources( 1158 child_resource_provider_->GenerateSyncTokenForResources(
1150 resource_ids_to_transfer); 1159 resource_ids_to_transfer);
1151 1160
1152 TransferableResourceArray list; 1161 TransferableResourceArray list;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1197 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1206 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1198 uint8_t data[4] = {1, 2, 3, 4}; 1207 uint8_t data[4] = {1, 2, 3, 4};
1199 child_resource_provider_->CopyToResource(id1, data, size); 1208 child_resource_provider_->CopyToResource(id1, data, size);
1200 child_resource_provider_->EnableReadLockFencesForTesting(id1); 1209 child_resource_provider_->EnableReadLockFencesForTesting(id1);
1201 1210
1202 ResourceId id2 = child_resource_provider_->CreateResource( 1211 ResourceId id2 = child_resource_provider_->CreateResource(
1203 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1212 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1204 child_resource_provider_->CopyToResource(id2, data, size); 1213 child_resource_provider_->CopyToResource(id2, data, size);
1205 1214
1206 ReturnedResourceArray returned_to_child; 1215 ReturnedResourceArray returned_to_child;
1207 int child_id = 1216 int child_id = resource_provider_->CreateChild(
1208 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1217 GetReturnCallback(&returned_to_child),
1218 child_gpu_memory_buffer_manager_->GetClientId());
1209 1219
1210 // Transfer resources to the parent. 1220 // Transfer resources to the parent.
1211 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1221 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1212 resource_ids_to_transfer.push_back(id1); 1222 resource_ids_to_transfer.push_back(id1);
1213 resource_ids_to_transfer.push_back(id2); 1223 resource_ids_to_transfer.push_back(id2);
1214 1224
1215 child_resource_provider_->GenerateSyncTokenForResources( 1225 child_resource_provider_->GenerateSyncTokenForResources(
1216 resource_ids_to_transfer); 1226 resource_ids_to_transfer);
1217 1227
1218 TransferableResourceArray list; 1228 TransferableResourceArray list;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1267 1277
1268 std::unique_ptr<SharedBitmap> shared_bitmap(CreateAndFillSharedBitmap( 1278 std::unique_ptr<SharedBitmap> shared_bitmap(CreateAndFillSharedBitmap(
1269 shared_bitmap_manager_.get(), gfx::Size(1, 1), 0)); 1279 shared_bitmap_manager_.get(), gfx::Size(1, 1), 0));
1270 SharedBitmap* shared_bitmap_ptr = shared_bitmap.get(); 1280 SharedBitmap* shared_bitmap_ptr = shared_bitmap.get();
1271 ResourceId id3 = child_resource_provider_->CreateResourceFromTextureMailbox( 1281 ResourceId id3 = child_resource_provider_->CreateResourceFromTextureMailbox(
1272 TextureMailbox(shared_bitmap_ptr, gfx::Size(1, 1)), 1282 TextureMailbox(shared_bitmap_ptr, gfx::Size(1, 1)),
1273 SingleReleaseCallbackImpl::Create(base::Bind( 1283 SingleReleaseCallbackImpl::Create(base::Bind(
1274 &SharedBitmapReleaseCallback, base::Passed(&shared_bitmap)))); 1284 &SharedBitmapReleaseCallback, base::Passed(&shared_bitmap))));
1275 1285
1276 ReturnedResourceArray returned_to_child; 1286 ReturnedResourceArray returned_to_child;
1277 int child_id = 1287 int child_id = resource_provider_->CreateChild(
1278 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1288 GetReturnCallback(&returned_to_child),
1289 child_gpu_memory_buffer_manager_->GetClientId());
1279 { 1290 {
1280 // Transfer some resources to the parent. 1291 // Transfer some resources to the parent.
1281 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1292 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1282 resource_ids_to_transfer.push_back(id1); 1293 resource_ids_to_transfer.push_back(id1);
1283 resource_ids_to_transfer.push_back(id2); 1294 resource_ids_to_transfer.push_back(id2);
1284 resource_ids_to_transfer.push_back(id3); 1295 resource_ids_to_transfer.push_back(id3);
1285 1296
1286 child_resource_provider_->GenerateSyncTokenForResources( 1297 child_resource_provider_->GenerateSyncTokenForResources(
1287 resource_ids_to_transfer); 1298 resource_ids_to_transfer);
1288 1299
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
1472 size_t pixel_size = TextureSizeBytes(size, format); 1483 size_t pixel_size = TextureSizeBytes(size, format);
1473 ASSERT_EQ(4U, pixel_size); 1484 ASSERT_EQ(4U, pixel_size);
1474 1485
1475 ResourceId id1 = child_resource_provider->CreateResource( 1486 ResourceId id1 = child_resource_provider->CreateResource(
1476 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1487 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1477 uint8_t data1[4] = { 1, 2, 3, 4 }; 1488 uint8_t data1[4] = { 1, 2, 3, 4 };
1478 child_resource_provider->CopyToResource(id1, data1, size); 1489 child_resource_provider->CopyToResource(id1, data1, size);
1479 child_resource_provider->GenerateSyncTokenForResource(id1); 1490 child_resource_provider->GenerateSyncTokenForResource(id1);
1480 1491
1481 ReturnedResourceArray returned_to_child; 1492 ReturnedResourceArray returned_to_child;
1482 int child_id = 1493 int child_id = resource_provider_->CreateChild(
1483 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1494 GetReturnCallback(&returned_to_child),
1495 child_gpu_memory_buffer_manager_->GetClientId());
1484 { 1496 {
1485 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1497 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1486 resource_ids_to_transfer.push_back(id1); 1498 resource_ids_to_transfer.push_back(id1);
1487 1499
1488 TransferableResourceArray list; 1500 TransferableResourceArray list;
1489 child_resource_provider->PrepareSendToParent(resource_ids_to_transfer, 1501 child_resource_provider->PrepareSendToParent(resource_ids_to_transfer,
1490 &list); 1502 &list);
1491 ASSERT_EQ(1u, list.size()); 1503 ASSERT_EQ(1u, list.size());
1492 EXPECT_TRUE(list[0].mailbox_holder.sync_token.HasData()); 1504 EXPECT_TRUE(list[0].mailbox_holder.sync_token.HasData());
1493 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), 1505 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D),
(...skipping 25 matching lines...) Expand all
1519 ResourceFormat format = RGBA_8888; 1531 ResourceFormat format = RGBA_8888;
1520 size_t pixel_size = TextureSizeBytes(size, format); 1532 size_t pixel_size = TextureSizeBytes(size, format);
1521 ASSERT_EQ(4U, pixel_size); 1533 ASSERT_EQ(4U, pixel_size);
1522 1534
1523 ResourceId id1 = child_resource_provider_->CreateResource( 1535 ResourceId id1 = child_resource_provider_->CreateResource(
1524 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1536 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1525 uint8_t data1[4] = { 1, 2, 3, 4 }; 1537 uint8_t data1[4] = { 1, 2, 3, 4 };
1526 child_resource_provider_->CopyToResource(id1, data1, size); 1538 child_resource_provider_->CopyToResource(id1, data1, size);
1527 1539
1528 ReturnedResourceArray returned_to_child; 1540 ReturnedResourceArray returned_to_child;
1529 int child_id = 1541 int child_id = resource_provider_->CreateChild(
1530 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1542 GetReturnCallback(&returned_to_child),
1543 child_gpu_memory_buffer_manager_->GetClientId());
1531 { 1544 {
1532 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1545 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1533 resource_ids_to_transfer.push_back(id1); 1546 resource_ids_to_transfer.push_back(id1);
1534 1547
1535 child_resource_provider_->GenerateSyncTokenForResources( 1548 child_resource_provider_->GenerateSyncTokenForResources(
1536 resource_ids_to_transfer); 1549 resource_ids_to_transfer);
1537 1550
1538 TransferableResourceArray list; 1551 TransferableResourceArray list;
1539 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1552 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
1540 &list); 1553 &list);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1575 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1588 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1576 uint8_t data1[4] = { 1, 2, 3, 4 }; 1589 uint8_t data1[4] = { 1, 2, 3, 4 };
1577 child_resource_provider_->CopyToResource(id1, data1, size); 1590 child_resource_provider_->CopyToResource(id1, data1, size);
1578 1591
1579 ResourceId id2 = child_resource_provider_->CreateResource( 1592 ResourceId id2 = child_resource_provider_->CreateResource(
1580 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1593 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1581 uint8_t data2[4] = {5, 5, 5, 5}; 1594 uint8_t data2[4] = {5, 5, 5, 5};
1582 child_resource_provider_->CopyToResource(id2, data2, size); 1595 child_resource_provider_->CopyToResource(id2, data2, size);
1583 1596
1584 ReturnedResourceArray returned_to_child; 1597 ReturnedResourceArray returned_to_child;
1585 int child_id = 1598 int child_id = resource_provider_->CreateChild(
1586 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1599 GetReturnCallback(&returned_to_child),
1600 child_gpu_memory_buffer_manager_->GetClientId());
1587 { 1601 {
1588 // Transfer some resources to the parent. 1602 // Transfer some resources to the parent.
1589 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1603 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1590 resource_ids_to_transfer.push_back(id1); 1604 resource_ids_to_transfer.push_back(id1);
1591 resource_ids_to_transfer.push_back(id2); 1605 resource_ids_to_transfer.push_back(id2);
1592 1606
1593 child_resource_provider_->GenerateSyncTokenForResources( 1607 child_resource_provider_->GenerateSyncTokenForResources(
1594 resource_ids_to_transfer); 1608 resource_ids_to_transfer);
1595 1609
1596 TransferableResourceArray list; 1610 TransferableResourceArray list;
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
1679 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1693 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1680 uint8_t data1[4] = {1, 2, 3, 4}; 1694 uint8_t data1[4] = {1, 2, 3, 4};
1681 child_resource_provider_->CopyToResource(id1, data1, size); 1695 child_resource_provider_->CopyToResource(id1, data1, size);
1682 1696
1683 ResourceId id2 = child_resource_provider_->CreateResource( 1697 ResourceId id2 = child_resource_provider_->CreateResource(
1684 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1698 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1685 uint8_t data2[4] = {5, 5, 5, 5}; 1699 uint8_t data2[4] = {5, 5, 5, 5};
1686 child_resource_provider_->CopyToResource(id2, data2, size); 1700 child_resource_provider_->CopyToResource(id2, data2, size);
1687 1701
1688 ReturnedResourceArray returned_to_child; 1702 ReturnedResourceArray returned_to_child;
1689 int child_id = 1703 int child_id = resource_provider_->CreateChild(
1690 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1704 GetReturnCallback(&returned_to_child),
1705 child_gpu_memory_buffer_manager_->GetClientId());
1691 { 1706 {
1692 // Transfer some resources to the parent. 1707 // Transfer some resources to the parent.
1693 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1708 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1694 resource_ids_to_transfer.push_back(id1); 1709 resource_ids_to_transfer.push_back(id1);
1695 resource_ids_to_transfer.push_back(id2); 1710 resource_ids_to_transfer.push_back(id2);
1696 1711
1697 child_resource_provider_->GenerateSyncTokenForResources( 1712 child_resource_provider_->GenerateSyncTokenForResources(
1698 resource_ids_to_transfer); 1713 resource_ids_to_transfer);
1699 1714
1700 TransferableResourceArray list; 1715 TransferableResourceArray list;
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1795 ResourceFormat format = RGBA_8888; 1810 ResourceFormat format = RGBA_8888;
1796 size_t pixel_size = TextureSizeBytes(size, format); 1811 size_t pixel_size = TextureSizeBytes(size, format);
1797 ASSERT_EQ(4U, pixel_size); 1812 ASSERT_EQ(4U, pixel_size);
1798 1813
1799 ResourceId id = child_resource_provider_->CreateResource( 1814 ResourceId id = child_resource_provider_->CreateResource(
1800 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1815 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1801 uint8_t data[4] = { 1, 2, 3, 4 }; 1816 uint8_t data[4] = { 1, 2, 3, 4 };
1802 child_resource_provider_->CopyToResource(id, data, size); 1817 child_resource_provider_->CopyToResource(id, data, size);
1803 1818
1804 ReturnedResourceArray returned_to_child; 1819 ReturnedResourceArray returned_to_child;
1805 int child_id = 1820 int child_id = resource_provider_->CreateChild(
1806 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1821 GetReturnCallback(&returned_to_child),
1822 child_gpu_memory_buffer_manager_->GetClientId());
1807 { 1823 {
1808 // Transfer some resource to the parent. 1824 // Transfer some resource to the parent.
1809 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1825 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1810 resource_ids_to_transfer.push_back(id); 1826 resource_ids_to_transfer.push_back(id);
1811 1827
1812 child_resource_provider_->GenerateSyncTokenForResources( 1828 child_resource_provider_->GenerateSyncTokenForResources(
1813 resource_ids_to_transfer); 1829 resource_ids_to_transfer);
1814 1830
1815 TransferableResourceArray list; 1831 TransferableResourceArray list;
1816 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 1832 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1850 ResourceFormat format = RGBA_8888; 1866 ResourceFormat format = RGBA_8888;
1851 size_t pixel_size = TextureSizeBytes(size, format); 1867 size_t pixel_size = TextureSizeBytes(size, format);
1852 ASSERT_EQ(4U, pixel_size); 1868 ASSERT_EQ(4U, pixel_size);
1853 1869
1854 ResourceId id = child_resource_provider_->CreateResource( 1870 ResourceId id = child_resource_provider_->CreateResource(
1855 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 1871 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1856 uint8_t data[4] = {1, 2, 3, 4}; 1872 uint8_t data[4] = {1, 2, 3, 4};
1857 child_resource_provider_->CopyToResource(id, data, size); 1873 child_resource_provider_->CopyToResource(id, data, size);
1858 1874
1859 ReturnedResourceArray returned_to_child; 1875 ReturnedResourceArray returned_to_child;
1860 int child_id = 1876 int child_id = resource_provider_->CreateChild(
1861 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 1877 GetReturnCallback(&returned_to_child),
1878 child_gpu_memory_buffer_manager_->GetClientId());
1862 const ResourceProvider::ResourceIdMap& map = 1879 const ResourceProvider::ResourceIdMap& map =
1863 resource_provider_->GetChildToParentMap(child_id); 1880 resource_provider_->GetChildToParentMap(child_id);
1864 { 1881 {
1865 // Transfer some resource to the parent. 1882 // Transfer some resource to the parent.
1866 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 1883 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1867 resource_ids_to_transfer.push_back(id); 1884 resource_ids_to_transfer.push_back(id);
1868 1885
1869 child_resource_provider_->GenerateSyncTokenForResources( 1886 child_resource_provider_->GenerateSyncTokenForResources(
1870 resource_ids_to_transfer); 1887 resource_ids_to_transfer);
1871 1888
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
2038 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, child_filter)); 2055 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, child_filter));
2039 EXPECT_CALL( 2056 EXPECT_CALL(
2040 *child_context, 2057 *child_context,
2041 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, child_filter)); 2058 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, child_filter));
2042 } 2059 }
2043 SetResourceFilter(child_resource_provider.get(), id, child_filter); 2060 SetResourceFilter(child_resource_provider.get(), id, child_filter);
2044 Mock::VerifyAndClearExpectations(child_context); 2061 Mock::VerifyAndClearExpectations(child_context);
2045 2062
2046 ReturnedResourceArray returned_to_child; 2063 ReturnedResourceArray returned_to_child;
2047 int child_id = parent_resource_provider->CreateChild( 2064 int child_id = parent_resource_provider->CreateChild(
2048 GetReturnCallback(&returned_to_child)); 2065 GetReturnCallback(&returned_to_child), -1);
2049 { 2066 {
2050 // Transfer some resource to the parent. 2067 // Transfer some resource to the parent.
2051 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2068 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
2052 resource_ids_to_transfer.push_back(id); 2069 resource_ids_to_transfer.push_back(id);
2053 TransferableResourceArray list; 2070 TransferableResourceArray list;
2054 2071
2055 EXPECT_CALL(*child_context, 2072 EXPECT_CALL(*child_context,
2056 produceTextureDirectCHROMIUM(_, GL_TEXTURE_2D, _)); 2073 produceTextureDirectCHROMIUM(_, GL_TEXTURE_2D, _));
2057 2074
2058 child_resource_provider->GenerateSyncTokenForResources( 2075 child_resource_provider->GenerateSyncTokenForResources(
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
2282 gfx::Size size(1, 1); 2299 gfx::Size size(1, 1);
2283 ResourceFormat format = RGBA_8888; 2300 ResourceFormat format = RGBA_8888;
2284 ResourceId resource = child_resource_provider_->CreateResource( 2301 ResourceId resource = child_resource_provider_->CreateResource(
2285 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 2302 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
2286 child_resource_provider_->AllocateForTesting(resource); 2303 child_resource_provider_->AllocateForTesting(resource);
2287 // Expect a GL resource to be lost. 2304 // Expect a GL resource to be lost.
2288 bool should_lose_resource = 2305 bool should_lose_resource =
2289 GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE; 2306 GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE;
2290 2307
2291 ReturnedResourceArray returned_to_child; 2308 ReturnedResourceArray returned_to_child;
2292 int child_id = 2309 int child_id = resource_provider_->CreateChild(
2293 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 2310 GetReturnCallback(&returned_to_child),
2311 child_gpu_memory_buffer_manager_->GetClientId());
2294 { 2312 {
2295 // Transfer the resource to the parent. 2313 // Transfer the resource to the parent.
2296 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2314 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
2297 resource_ids_to_transfer.push_back(resource); 2315 resource_ids_to_transfer.push_back(resource);
2298 TransferableResourceArray list; 2316 TransferableResourceArray list;
2299 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 2317 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
2300 &list); 2318 &list);
2301 EXPECT_EQ(1u, list.size()); 2319 EXPECT_EQ(1u, list.size());
2302 2320
2303 resource_provider_->ReceiveFromChild(child_id, list); 2321 resource_provider_->ReceiveFromChild(child_id, list);
(...skipping 30 matching lines...) Expand all
2334 } 2352 }
2335 2353
2336 TEST_P(ResourceProviderTest, LostResourceInGrandParent) { 2354 TEST_P(ResourceProviderTest, LostResourceInGrandParent) {
2337 gfx::Size size(1, 1); 2355 gfx::Size size(1, 1);
2338 ResourceFormat format = RGBA_8888; 2356 ResourceFormat format = RGBA_8888;
2339 ResourceId resource = child_resource_provider_->CreateResource( 2357 ResourceId resource = child_resource_provider_->CreateResource(
2340 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); 2358 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
2341 child_resource_provider_->AllocateForTesting(resource); 2359 child_resource_provider_->AllocateForTesting(resource);
2342 2360
2343 ReturnedResourceArray returned_to_child; 2361 ReturnedResourceArray returned_to_child;
2344 int child_id = 2362 int child_id = resource_provider_->CreateChild(
2345 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 2363 GetReturnCallback(&returned_to_child),
2364 child_gpu_memory_buffer_manager_->GetClientId());
2346 { 2365 {
2347 // Transfer the resource to the parent. 2366 // Transfer the resource to the parent.
2348 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2367 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
2349 resource_ids_to_transfer.push_back(resource); 2368 resource_ids_to_transfer.push_back(resource);
2350 TransferableResourceArray list; 2369 TransferableResourceArray list;
2351 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 2370 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
2352 &list); 2371 &list);
2353 EXPECT_EQ(1u, list.size()); 2372 EXPECT_EQ(1u, list.size());
2354 2373
2355 resource_provider_->ReceiveFromChild(child_id, list); 2374 resource_provider_->ReceiveFromChild(child_id, list);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
2412 2431
2413 TEST_P(ResourceProviderTest, LostMailboxInParent) { 2432 TEST_P(ResourceProviderTest, LostMailboxInParent) {
2414 gpu::SyncToken release_sync_token; 2433 gpu::SyncToken release_sync_token;
2415 bool lost_resource = false; 2434 bool lost_resource = false;
2416 bool release_called = false; 2435 bool release_called = false;
2417 gpu::SyncToken sync_token; 2436 gpu::SyncToken sync_token;
2418 ResourceId resource = CreateChildMailbox(&release_sync_token, &lost_resource, 2437 ResourceId resource = CreateChildMailbox(&release_sync_token, &lost_resource,
2419 &release_called, &sync_token); 2438 &release_called, &sync_token);
2420 2439
2421 ReturnedResourceArray returned_to_child; 2440 ReturnedResourceArray returned_to_child;
2422 int child_id = 2441 int child_id = resource_provider_->CreateChild(
2423 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 2442 GetReturnCallback(&returned_to_child),
2443 child_gpu_memory_buffer_manager_->GetClientId());
2424 { 2444 {
2425 // Transfer the resource to the parent. 2445 // Transfer the resource to the parent.
2426 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2446 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
2427 resource_ids_to_transfer.push_back(resource); 2447 resource_ids_to_transfer.push_back(resource);
2428 TransferableResourceArray list; 2448 TransferableResourceArray list;
2429 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 2449 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
2430 &list); 2450 &list);
2431 EXPECT_EQ(1u, list.size()); 2451 EXPECT_EQ(1u, list.size());
2432 2452
2433 resource_provider_->ReceiveFromChild(child_id, list); 2453 resource_provider_->ReceiveFromChild(child_id, list);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2465 2485
2466 TEST_P(ResourceProviderTest, LostMailboxInGrandParent) { 2486 TEST_P(ResourceProviderTest, LostMailboxInGrandParent) {
2467 gpu::SyncToken release_sync_token; 2487 gpu::SyncToken release_sync_token;
2468 bool lost_resource = false; 2488 bool lost_resource = false;
2469 bool release_called = false; 2489 bool release_called = false;
2470 gpu::SyncToken sync_token; 2490 gpu::SyncToken sync_token;
2471 ResourceId resource = CreateChildMailbox(&release_sync_token, &lost_resource, 2491 ResourceId resource = CreateChildMailbox(&release_sync_token, &lost_resource,
2472 &release_called, &sync_token); 2492 &release_called, &sync_token);
2473 2493
2474 ReturnedResourceArray returned_to_child; 2494 ReturnedResourceArray returned_to_child;
2475 int child_id = 2495 int child_id = resource_provider_->CreateChild(
2476 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); 2496 GetReturnCallback(&returned_to_child),
2497 child_gpu_memory_buffer_manager_->GetClientId());
2477 { 2498 {
2478 // Transfer the resource to the parent. 2499 // Transfer the resource to the parent.
2479 ResourceProvider::ResourceIdArray resource_ids_to_transfer; 2500 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
2480 resource_ids_to_transfer.push_back(resource); 2501 resource_ids_to_transfer.push_back(resource);
2481 TransferableResourceArray list; 2502 TransferableResourceArray list;
2482 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer, 2503 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
2483 &list); 2504 &list);
2484 EXPECT_EQ(1u, list.size()); 2505 EXPECT_EQ(1u, list.size());
2485 2506
2486 resource_provider_->ReceiveFromChild(child_id, list); 2507 resource_provider_->ReceiveFromChild(child_id, list);
(...skipping 1201 matching lines...) Expand 10 before | Expand all | Expand 10 after
3688 EXPECT_TRUE(lock.GetGpuMemoryBuffer()); 3709 EXPECT_TRUE(lock.GetGpuMemoryBuffer());
3689 } 3710 }
3690 EXPECT_TRUE(resource_provider_->CanLockForWrite(id)); 3711 EXPECT_TRUE(resource_provider_->CanLockForWrite(id));
3691 EXPECT_FALSE(resource_provider_->InUseByConsumer(id)); 3712 EXPECT_FALSE(resource_provider_->InUseByConsumer(id));
3692 gpu_memory_buffer_manager_->SetGpuMemoryBufferIsInUseByMacOSWindowServer( 3713 gpu_memory_buffer_manager_->SetGpuMemoryBufferIsInUseByMacOSWindowServer(
3693 gpu_memory_buffer, true); 3714 gpu_memory_buffer, true);
3694 EXPECT_FALSE(resource_provider_->CanLockForWrite(id)); 3715 EXPECT_FALSE(resource_provider_->CanLockForWrite(id));
3695 EXPECT_TRUE(resource_provider_->InUseByConsumer(id)); 3716 EXPECT_TRUE(resource_provider_->InUseByConsumer(id));
3696 } 3717 }
3697 3718
3719 TEST_P(ResourceProviderTest, GpuMemoryBufferReadLockFail) {
3720 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE)
3721 return;
3722
3723 gfx::Size size(1, 1);
3724 ResourceFormat format = RGBA_8888;
3725 size_t pixel_size = TextureSizeBytes(size, format);
3726 ASSERT_EQ(4U, pixel_size);
3727
3728 ResourceId id = resource_provider_->CreateResource(
3729 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
3730 resource_provider_->AllocateForTesting(id);
3731 {
3732 ResourceProvider::ScopedReadLockGpuMemoryBuffer lock(
3733 resource_provider_.get(), id);
3734 EXPECT_FALSE(lock.GetGpuMemoryBuffer());
3735 }
3736 }
3737
3738 TEST_P(ResourceProviderTest, GpuMemoryBufferReadLockSucceed) {
3739 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE)
3740 return;
3741
3742 gfx::Size size(1, 1);
3743 ResourceFormat format = RGBA_8888;
3744 size_t pixel_size = TextureSizeBytes(size, format);
3745 ASSERT_EQ(4U, pixel_size);
3746
3747 ResourceId id = resource_provider_->CreateResource(
3748 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
3749 gfx::GpuMemoryBuffer* gpu_memory_buffer = nullptr;
3750 {
3751 ResourceProvider::ScopedWriteLockGpuMemoryBuffer lock(
3752 resource_provider_.get(), id);
3753 gpu_memory_buffer = lock.GetGpuMemoryBuffer();
3754 EXPECT_TRUE(lock.GetGpuMemoryBuffer());
3755 }
3756 {
3757 ResourceProvider::ScopedReadLockGpuMemoryBuffer lock(
3758 resource_provider_.get(), id);
3759 EXPECT_EQ(gpu_memory_buffer, lock.GetGpuMemoryBuffer());
3760 }
3761 }
3762
3763 TEST_P(ResourceProviderTest, ChildGpuMemoryBufferReadLock) {
3764 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE)
3765 return;
3766
3767 gfx::Size size(1, 1);
3768 ResourceFormat format = RGBA_8888;
3769 size_t pixel_size = TextureSizeBytes(size, format);
3770 ASSERT_EQ(4U, pixel_size);
3771
3772 // Create the child resource provider.
3773 ReturnedResourceArray returned_to_child;
3774 int child_id = resource_provider_->CreateChild(
3775 GetReturnCallback(&returned_to_child),
3776 child_gpu_memory_buffer_manager_->GetClientId());
3777
3778 // Create a non-GMB-backed resource.
3779 ResourceId child_resource = child_resource_provider_->CreateResource(
3780 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
3781 {
3782 uint8_t data1[4] = {1, 2, 3, 4};
3783 child_resource_provider_->CopyToResource(child_resource, data1, size);
3784 }
3785
3786 // Create a GMB-backed resource.
3787 ResourceId child_gmb_resource = child_resource_provider_->CreateResource(
3788 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
3789 gfx::GpuMemoryBuffer* child_gmb = nullptr;
3790 {
3791 ResourceProvider::ScopedWriteLockGpuMemoryBuffer lock(
3792 child_resource_provider_.get(), child_gmb_resource);
3793 EXPECT_TRUE(lock.GetGpuMemoryBuffer());
3794 child_gmb = lock.GetGpuMemoryBuffer();
3795 }
3796
3797 // Transfer to the parent.
3798 TransferableResourceArray list;
3799 {
3800 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
3801 resource_ids_to_transfer.push_back(child_resource);
3802 resource_ids_to_transfer.push_back(child_gmb_resource);
3803 child_resource_provider_->GenerateSyncTokenForResources(
3804 resource_ids_to_transfer);
3805 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
3806 &list);
3807 resource_provider_->ReceiveFromChild(child_id, list);
3808 resource_provider_->WaitSyncTokenIfNeeded(list[0].id);
3809 resource_provider_->WaitSyncTokenIfNeeded(list[1].id);
3810 }
3811
3812 // The non-gmb resource should not have a GpuMemoryBuffer when locked.
3813 {
3814 ResourceProvider::ScopedReadLockGpuMemoryBuffer lock(
3815 resource_provider_.get(), list[0].id);
3816 EXPECT_FALSE(lock.GetGpuMemoryBuffer());
3817 }
3818
3819 // The gmb resource should have a GpuMemoryBuffer when locked
3820 {
3821 ResourceProvider::ScopedReadLockGpuMemoryBuffer lock(
3822 resource_provider_.get(), list[1].id);
3823 gfx::GpuMemoryBuffer* parent_gmb = lock.GetGpuMemoryBuffer();
3824 EXPECT_TRUE(parent_gmb);
3825 EXPECT_NE(child_gmb, parent_gmb);
3826
3827 // Verify that the IsInUseByMacOSWindowServer signal is shared between
3828 // parent and child.
3829 EXPECT_FALSE(parent_gmb->IsInUseByMacOSWindowServer());
3830 child_gpu_memory_buffer_manager_
3831 ->SetGpuMemoryBufferIsInUseByMacOSWindowServer(child_gmb, true);
3832 EXPECT_TRUE(parent_gmb->IsInUseByMacOSWindowServer());
3833 child_gpu_memory_buffer_manager_
3834 ->SetGpuMemoryBufferIsInUseByMacOSWindowServer(child_gmb, false);
3835 EXPECT_FALSE(parent_gmb->IsInUseByMacOSWindowServer());
3836 }
3837
3838 // Transfer back to the child.{
3839 {
3840 ResourceProvider::ResourceIdSet resource_ids_to_receive;
3841 resource_ids_to_receive.insert(child_resource);
3842 resource_ids_to_receive.insert(child_gmb_resource);
3843 resource_provider_->DeclareUsedResourcesFromChild(child_id,
3844 resource_ids_to_receive);
3845 }
3846 resource_provider_->DestroyChild(child_id);
3847
3848 EXPECT_EQ(0u, resource_provider_->num_resources());
3849 }
3850
3698 } // namespace 3851 } // namespace
3699 } // namespace cc 3852 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/resource_provider.cc ('k') | cc/surfaces/surface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698