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

Unified Diff: cc/resources/resource_provider_unittest.cc

Issue 2508203004: Add hints for potential overlay promotion on android. (Closed)
Patch Set: rebased Created 4 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/resources/resource_provider.cc ('k') | cc/resources/texture_mailbox.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.
« no previous file with comments | « cc/resources/resource_provider.cc ('k') | cc/resources/texture_mailbox.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698