| Index: cc/resources/resource_provider_unittest.cc
|
| diff --git a/cc/resources/resource_provider_unittest.cc b/cc/resources/resource_provider_unittest.cc
|
| index 52335c665404551e8b6c6cf206a7dfd79d87ad5f..33512829dd4524b6d2a0b87fcaef2df7c4e3fcd9 100644
|
| --- a/cc/resources/resource_provider_unittest.cc
|
| +++ b/cc/resources/resource_provider_unittest.cc
|
| @@ -701,7 +701,7 @@ TEST_P(ResourceProviderTest, TransferGLResources) {
|
| }
|
| EXPECT_EQ(list[0].mailbox_holder.sync_token,
|
| context3d_->last_waited_sync_token());
|
| - ResourceProvider::ResourceIdSet resource_ids_to_receive;
|
| + ResourceIdSet resource_ids_to_receive;
|
| resource_ids_to_receive.insert(id1);
|
| resource_ids_to_receive.insert(id2);
|
| resource_ids_to_receive.insert(id3);
|
| @@ -786,7 +786,7 @@ TEST_P(ResourceProviderTest, TransferGLResources) {
|
|
|
| // Transfer resources back from the parent to the child. Set no resources as
|
| // being in use.
|
| - ResourceProvider::ResourceIdSet no_resources;
|
| + ResourceIdSet no_resources;
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
|
|
|
| ASSERT_EQ(4u, returned_to_child.size());
|
| @@ -856,7 +856,7 @@ TEST_P(ResourceProviderTest, TransferGLResources) {
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3));
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id4));
|
| resource_provider_->ReceiveFromChild(child_id, list);
|
| - ResourceProvider::ResourceIdSet resource_ids_to_receive;
|
| + ResourceIdSet resource_ids_to_receive;
|
| resource_ids_to_receive.insert(id1);
|
| resource_ids_to_receive.insert(id2);
|
| resource_ids_to_receive.insert(id3);
|
| @@ -882,6 +882,104 @@ TEST_P(ResourceProviderTest, TransferGLResources) {
|
| EXPECT_FALSE(returned_to_child[3].lost);
|
| }
|
|
|
| +#if defined(OS_ANDROID)
|
| +TEST_P(ResourceProviderTest, OverlayPromotionHint) {
|
| + if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE)
|
| + return;
|
| +
|
| + GLuint external_texture_id = child_context_->createExternalTexture();
|
| +
|
| + gpu::Mailbox external_mailbox;
|
| + child_context_->genMailboxCHROMIUM(external_mailbox.name);
|
| + child_context_->produceTextureDirectCHROMIUM(
|
| + external_texture_id, GL_TEXTURE_EXTERNAL_OES, external_mailbox.name);
|
| + gpu::SyncToken external_sync_token;
|
| + child_context_->genSyncToken(child_context_->insertFenceSync(),
|
| + external_sync_token.GetData());
|
| + EXPECT_TRUE(external_sync_token.HasData());
|
| +
|
| + TextureMailbox id1_mailbox(external_mailbox, external_sync_token,
|
| + GL_TEXTURE_EXTERNAL_OES);
|
| + id1_mailbox.set_wants_promotion_hint(true);
|
| + id1_mailbox.set_is_overlay_candidate(true);
|
| + id1_mailbox.set_is_backed_by_surface_texture(true);
|
| + ResourceId id1 = child_resource_provider_->CreateResourceFromTextureMailbox(
|
| + id1_mailbox,
|
| + SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)));
|
| +
|
| + TextureMailbox id2_mailbox(external_mailbox, external_sync_token,
|
| + GL_TEXTURE_EXTERNAL_OES);
|
| + id2_mailbox.set_wants_promotion_hint(false);
|
| + id2_mailbox.set_is_overlay_candidate(true);
|
| + id2_mailbox.set_is_backed_by_surface_texture(false);
|
| + ResourceId id2 = child_resource_provider_->CreateResourceFromTextureMailbox(
|
| + id2_mailbox,
|
| + SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)));
|
| +
|
| + ReturnedResourceArray returned_to_child;
|
| + int child_id =
|
| + resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
|
| +
|
| + {
|
| + // Transfer some resources to the parent.
|
| + ResourceProvider::ResourceIdArray resource_ids_to_transfer;
|
| + resource_ids_to_transfer.push_back(id1);
|
| + resource_ids_to_transfer.push_back(id2);
|
| +
|
| + child_resource_provider_->GenerateSyncTokenForResources(
|
| + resource_ids_to_transfer);
|
| +
|
| + TransferableResourceArray list;
|
| + child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
|
| + &list);
|
| + ASSERT_EQ(2u, list.size());
|
| + resource_provider_->ReceiveFromChild(child_id, list);
|
| + {
|
| + resource_provider_->WaitSyncTokenIfNeeded(list[0].id);
|
| + ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(),
|
| + list[0].id);
|
| + }
|
| +
|
| + EXPECT_EQ(list[0].mailbox_holder.sync_token,
|
| + context3d_->last_waited_sync_token());
|
| + ResourceIdSet resource_ids_to_receive;
|
| + resource_ids_to_receive.insert(id1);
|
| + resource_ids_to_receive.insert(id2);
|
| + resource_provider_->DeclareUsedResourcesFromChild(child_id,
|
| + resource_ids_to_receive);
|
| + }
|
| +
|
| + EXPECT_EQ(2u, resource_provider_->num_resources());
|
| + ResourceProvider::ResourceIdMap resource_map =
|
| + resource_provider_->GetChildToParentMap(child_id);
|
| + ResourceId mapped_id1 = resource_map[id1];
|
| + ResourceId mapped_id2 = resource_map[id2];
|
| + EXPECT_NE(0u, mapped_id1);
|
| + EXPECT_NE(0u, mapped_id2);
|
| +
|
| + // Make sure that the request for a promotion hint was noticed.
|
| + EXPECT_TRUE(resource_provider_->IsOverlayCandidate(mapped_id1));
|
| + EXPECT_TRUE(resource_provider_->IsBackedBySurfaceTexture(mapped_id1));
|
| + EXPECT_TRUE(resource_provider_->WantsPromotionHint(mapped_id1));
|
| +
|
| + EXPECT_TRUE(resource_provider_->IsOverlayCandidate(mapped_id2));
|
| + EXPECT_FALSE(resource_provider_->IsBackedBySurfaceTexture(mapped_id2));
|
| + EXPECT_FALSE(resource_provider_->WantsPromotionHint(mapped_id2));
|
| +
|
| + EXPECT_EQ(1u, resource_provider_->CountPromotionHintRequestsForTesting());
|
| +
|
| + // ResourceProvider maintains a set of promotion hint requests that should be
|
| + // cleared when resources are deleted.
|
| + resource_provider_->DeclareUsedResourcesFromChild(child_id, ResourceIdSet());
|
| + EXPECT_EQ(2u, returned_to_child.size());
|
| + child_resource_provider_->ReceiveReturnsFromParent(returned_to_child);
|
| +
|
| + EXPECT_EQ(0u, resource_provider_->CountPromotionHintRequestsForTesting());
|
| +
|
| + resource_provider_->DestroyChild(child_id);
|
| +}
|
| +#endif
|
| +
|
| class ResourceProviderTestNoSyncToken : public ResourceProviderTest {
|
| public:
|
| ResourceProviderTestNoSyncToken() : ResourceProviderTest(false) {
|
| @@ -951,7 +1049,7 @@ TEST_P(ResourceProviderTestNoSyncToken, TransferGLResources) {
|
| EXPECT_EQ(external_sync_token, list[2].mailbox_holder.sync_token);
|
| resource_provider_->ReceiveFromChild(child_id, list);
|
|
|
| - ResourceProvider::ResourceIdSet resource_ids_to_receive;
|
| + ResourceIdSet resource_ids_to_receive;
|
| resource_ids_to_receive.insert(id1);
|
| resource_ids_to_receive.insert(id2);
|
| resource_ids_to_receive.insert(id3);
|
| @@ -964,7 +1062,7 @@ TEST_P(ResourceProviderTestNoSyncToken, TransferGLResources) {
|
|
|
| // Transfer resources back from the parent to the child. Set no resources as
|
| // being in use.
|
| - ResourceProvider::ResourceIdSet no_resources;
|
| + ResourceIdSet no_resources;
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
|
|
|
| ASSERT_EQ(3u, returned_to_child.size());
|
| @@ -1031,8 +1129,8 @@ TEST_P(ResourceProviderTest, ReadLockCountStopsReturnToChildOrDelete) {
|
| ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(),
|
| list[0].id);
|
|
|
| - resource_provider_->DeclareUsedResourcesFromChild(
|
| - child_id, ResourceProvider::ResourceIdSet());
|
| + resource_provider_->DeclareUsedResourcesFromChild(child_id,
|
| + ResourceIdSet());
|
| EXPECT_EQ(0u, returned_to_child.size());
|
| }
|
|
|
| @@ -1106,17 +1204,14 @@ TEST_P(ResourceProviderTest, ReadLockFenceStopsReturnToChildOrDelete) {
|
| ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(),
|
| parent_id);
|
| }
|
| - resource_provider_->DeclareUsedResourcesFromChild(
|
| - child_id, ResourceProvider::ResourceIdSet());
|
| + resource_provider_->DeclareUsedResourcesFromChild(child_id, ResourceIdSet());
|
| EXPECT_EQ(0u, returned_to_child.size());
|
|
|
| - resource_provider_->DeclareUsedResourcesFromChild(
|
| - child_id, ResourceProvider::ResourceIdSet());
|
| + resource_provider_->DeclareUsedResourcesFromChild(child_id, ResourceIdSet());
|
| EXPECT_EQ(0u, returned_to_child.size());
|
| fence->passed = true;
|
|
|
| - resource_provider_->DeclareUsedResourcesFromChild(
|
| - child_id, ResourceProvider::ResourceIdSet());
|
| + resource_provider_->DeclareUsedResourcesFromChild(child_id, ResourceIdSet());
|
| EXPECT_EQ(1u, returned_to_child.size());
|
|
|
| child_resource_provider_->ReceiveReturnsFromParent(returned_to_child);
|
| @@ -1306,7 +1401,7 @@ TEST_P(ResourceProviderTest, TransferSoftwareResources) {
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3));
|
| resource_provider_->ReceiveFromChild(child_id, list);
|
| - ResourceProvider::ResourceIdSet resource_ids_to_receive;
|
| + ResourceIdSet resource_ids_to_receive;
|
| resource_ids_to_receive.insert(id1);
|
| resource_ids_to_receive.insert(id2);
|
| resource_ids_to_receive.insert(id3);
|
| @@ -1365,7 +1460,7 @@ TEST_P(ResourceProviderTest, TransferSoftwareResources) {
|
|
|
| // Transfer resources back from the parent to the child. Set no resources as
|
| // being in use.
|
| - ResourceProvider::ResourceIdSet no_resources;
|
| + ResourceIdSet no_resources;
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
|
|
|
| ASSERT_EQ(3u, returned_to_child.size());
|
| @@ -1427,7 +1522,7 @@ TEST_P(ResourceProviderTest, TransferSoftwareResources) {
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3));
|
| resource_provider_->ReceiveFromChild(child_id, list);
|
| - ResourceProvider::ResourceIdSet resource_ids_to_receive;
|
| + ResourceIdSet resource_ids_to_receive;
|
| resource_ids_to_receive.insert(id1);
|
| resource_ids_to_receive.insert(id2);
|
| resource_ids_to_receive.insert(id3);
|
| @@ -1616,7 +1711,7 @@ TEST_P(ResourceProviderTest, DeleteExportedResources) {
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
|
| resource_provider_->ReceiveFromChild(child_id, list);
|
| - ResourceProvider::ResourceIdSet resource_ids_to_receive;
|
| + ResourceIdSet resource_ids_to_receive;
|
| resource_ids_to_receive.insert(id1);
|
| resource_ids_to_receive.insert(id2);
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id,
|
| @@ -1655,7 +1750,7 @@ TEST_P(ResourceProviderTest, DeleteExportedResources) {
|
|
|
| // Release the resource in the parent. Set no resources as being in use. The
|
| // resources are exported so that can't be transferred back yet.
|
| - ResourceProvider::ResourceIdSet no_resources;
|
| + ResourceIdSet no_resources;
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
|
|
|
| EXPECT_EQ(0u, returned_to_child.size());
|
| @@ -1722,7 +1817,7 @@ TEST_P(ResourceProviderTest, DestroyChildWithExportedResources) {
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
|
| resource_provider_->ReceiveFromChild(child_id, list);
|
| - ResourceProvider::ResourceIdSet resource_ids_to_receive;
|
| + ResourceIdSet resource_ids_to_receive;
|
| resource_ids_to_receive.insert(id1);
|
| resource_ids_to_receive.insert(id2);
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id,
|
| @@ -1761,7 +1856,7 @@ TEST_P(ResourceProviderTest, DestroyChildWithExportedResources) {
|
|
|
| // Release the resource in the parent. Set no resources as being in use. The
|
| // resources are exported so that can't be transferred back yet.
|
| - ResourceProvider::ResourceIdSet no_resources;
|
| + ResourceIdSet no_resources;
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
|
|
|
| // Destroy the child, the resources should not be returned yet.
|
| @@ -1835,7 +1930,7 @@ TEST_P(ResourceProviderTest, DeleteTransferredResources) {
|
| EXPECT_TRUE(list[0].mailbox_holder.sync_token.HasData());
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id));
|
| resource_provider_->ReceiveFromChild(child_id, list);
|
| - ResourceProvider::ResourceIdSet resource_ids_to_receive;
|
| + ResourceIdSet resource_ids_to_receive;
|
| resource_ids_to_receive.insert(id);
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id,
|
| resource_ids_to_receive);
|
| @@ -1849,7 +1944,7 @@ TEST_P(ResourceProviderTest, DeleteTransferredResources) {
|
|
|
| // Transfer resources back from the parent to the child. Set no resources as
|
| // being in use.
|
| - ResourceProvider::ResourceIdSet no_resources;
|
| + ResourceIdSet no_resources;
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
|
|
|
| ASSERT_EQ(1u, returned_to_child.size());
|
| @@ -1890,7 +1985,7 @@ TEST_P(ResourceProviderTest, UnuseTransferredResources) {
|
| &list);
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id));
|
| resource_provider_->ReceiveFromChild(child_id, list);
|
| - ResourceProvider::ResourceIdSet resource_ids_to_receive;
|
| + ResourceIdSet resource_ids_to_receive;
|
| resource_ids_to_receive.insert(id);
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id,
|
| resource_ids_to_receive);
|
| @@ -1908,7 +2003,7 @@ TEST_P(ResourceProviderTest, UnuseTransferredResources) {
|
| }
|
| {
|
| // Stop using resource.
|
| - ResourceProvider::ResourceIdSet empty;
|
| + ResourceIdSet empty;
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id, empty);
|
| // Resource is not yet returned to the child, since it's in use by the
|
| // top-level.
|
| @@ -1923,7 +2018,7 @@ TEST_P(ResourceProviderTest, UnuseTransferredResources) {
|
| &list);
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id));
|
| resource_provider_->ReceiveFromChild(child_id, list);
|
| - ResourceProvider::ResourceIdSet resource_ids_to_receive;
|
| + ResourceIdSet resource_ids_to_receive;
|
| resource_ids_to_receive.insert(id);
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id,
|
| resource_ids_to_receive);
|
| @@ -1965,7 +2060,7 @@ TEST_P(ResourceProviderTest, UnuseTransferredResources) {
|
| }
|
| {
|
| // Stop using resource.
|
| - ResourceProvider::ResourceIdSet empty;
|
| + ResourceIdSet empty;
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id, empty);
|
| // Resource should have been returned to the child, since it's no longer in
|
| // use by the top-level.
|
| @@ -2092,7 +2187,7 @@ class ResourceProviderTestTextureFilters : public ResourceProviderTest {
|
| }
|
| Mock::VerifyAndClearExpectations(parent_context);
|
|
|
| - ResourceProvider::ResourceIdSet resource_ids_to_receive;
|
| + ResourceIdSet resource_ids_to_receive;
|
| resource_ids_to_receive.insert(id);
|
| parent_resource_provider->DeclareUsedResourcesFromChild(
|
| child_id, resource_ids_to_receive);
|
| @@ -2129,7 +2224,7 @@ class ResourceProviderTestTextureFilters : public ResourceProviderTest {
|
|
|
| // Transfer resources back from the parent to the child. Set no resources
|
| // as being in use.
|
| - ResourceProvider::ResourceIdSet no_resources;
|
| + ResourceIdSet no_resources;
|
| parent_resource_provider->DeclareUsedResourcesFromChild(child_id,
|
| no_resources);
|
| Mock::VerifyAndClearExpectations(parent_context);
|
| @@ -2318,7 +2413,7 @@ TEST_P(ResourceProviderTest, LostResourceInParent) {
|
| EXPECT_EQ(1u, list.size());
|
|
|
| resource_provider_->ReceiveFromChild(child_id, list);
|
| - ResourceProvider::ResourceIdSet resource_ids_to_receive;
|
| + ResourceIdSet resource_ids_to_receive;
|
| resource_ids_to_receive.insert(resource);
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id,
|
| resource_ids_to_receive);
|
| @@ -2332,7 +2427,7 @@ TEST_P(ResourceProviderTest, LostResourceInParent) {
|
|
|
| // Transfer resources back from the parent to the child. Set no resources as
|
| // being in use.
|
| - ResourceProvider::ResourceIdSet no_resources;
|
| + ResourceIdSet no_resources;
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
|
|
|
| // Expect a GL resource to be lost.
|
| @@ -2371,7 +2466,7 @@ TEST_P(ResourceProviderTest, LostResourceInGrandParent) {
|
| EXPECT_EQ(1u, list.size());
|
|
|
| resource_provider_->ReceiveFromChild(child_id, list);
|
| - ResourceProvider::ResourceIdSet resource_ids_to_receive;
|
| + ResourceIdSet resource_ids_to_receive;
|
| resource_ids_to_receive.insert(resource);
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id,
|
| resource_ids_to_receive);
|
| @@ -2411,7 +2506,7 @@ TEST_P(ResourceProviderTest, LostResourceInGrandParent) {
|
|
|
| // Transfer resources back from the parent to the child. Set no resources as
|
| // being in use.
|
| - ResourceProvider::ResourceIdSet no_resources;
|
| + ResourceIdSet no_resources;
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
|
|
|
| // Expect the resource to be lost.
|
| @@ -2449,7 +2544,7 @@ TEST_P(ResourceProviderTest, LostMailboxInParent) {
|
| EXPECT_EQ(1u, list.size());
|
|
|
| resource_provider_->ReceiveFromChild(child_id, list);
|
| - ResourceProvider::ResourceIdSet resource_ids_to_receive;
|
| + ResourceIdSet resource_ids_to_receive;
|
| resource_ids_to_receive.insert(resource);
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id,
|
| resource_ids_to_receive);
|
| @@ -2463,7 +2558,7 @@ TEST_P(ResourceProviderTest, LostMailboxInParent) {
|
|
|
| // Transfer resources back from the parent to the child. Set no resources as
|
| // being in use.
|
| - ResourceProvider::ResourceIdSet no_resources;
|
| + ResourceIdSet no_resources;
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
|
|
|
| ASSERT_EQ(1u, returned_to_child.size());
|
| @@ -2502,7 +2597,7 @@ TEST_P(ResourceProviderTest, LostMailboxInGrandParent) {
|
| EXPECT_EQ(1u, list.size());
|
|
|
| resource_provider_->ReceiveFromChild(child_id, list);
|
| - ResourceProvider::ResourceIdSet resource_ids_to_receive;
|
| + ResourceIdSet resource_ids_to_receive;
|
| resource_ids_to_receive.insert(resource);
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id,
|
| resource_ids_to_receive);
|
| @@ -2536,7 +2631,7 @@ TEST_P(ResourceProviderTest, LostMailboxInGrandParent) {
|
|
|
| // Transfer resources back from the parent to the child. Set no resources as
|
| // being in use.
|
| - ResourceProvider::ResourceIdSet no_resources;
|
| + ResourceIdSet no_resources;
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
|
|
|
| // Expect the resource to be lost.
|
|
|