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

Unified Diff: cc/resources/resource_provider_unittest.cc

Issue 69343011: cc: Rationalize sync points and lost status for returned resources (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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/transferable_resource.cc » ('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 bc26e1cafc43ddc4a4102058a03b7025c2edcf70..72c425f0a88185781e65b0993c27a602a6f9b6e5 100644
--- a/cc/resources/resource_provider_unittest.cc
+++ b/cc/resources/resource_provider_unittest.cc
@@ -81,6 +81,18 @@ static scoped_ptr<base::SharedMemory> CreateAndFillSharedMemory(
return shared_memory.Pass();
}
+void ForceUseChildTextures(ResourceProvider* resource_provider,
+ int child_id,
+ const TransferableResourceArray& resources) {
+ ResourceProvider::ResourceIdMap resource_map =
+ resource_provider->GetChildToParentMap(child_id);
+ for (size_t i = 0; i < resources.size(); ++i) {
+ ResourceProvider::ResourceId mapped_id = resource_map[resources[i].id];
+ ResourceProvider::ScopedReadLockGL lock(resource_provider, mapped_id);
+ EXPECT_NE(0U, lock.texture_id());
+ }
+}
+
class TextureStateTrackingContext : public TestWebGraphicsContext3D {
public:
MOCK_METHOD2(bindTexture, void(WGC3Denum target, WebGLId texture));
@@ -723,27 +735,33 @@ TEST_P(ResourceProviderTest, TransferGLResources) {
resource_ids_to_transfer);
}
- EXPECT_EQ(3u, resource_provider_->num_resources());
- ResourceProvider::ResourceIdMap resource_map =
- resource_provider_->GetChildToParentMap(child_id);
- ResourceProvider::ResourceId mapped_id1 = resource_map[id1];
- ResourceProvider::ResourceId mapped_id2 = resource_map[id2];
- ResourceProvider::ResourceId mapped_id3 = resource_map[id3];
- EXPECT_NE(0u, mapped_id1);
- EXPECT_NE(0u, mapped_id2);
- EXPECT_NE(0u, mapped_id3);
- EXPECT_FALSE(resource_provider_->InUseByConsumer(id1));
- EXPECT_FALSE(resource_provider_->InUseByConsumer(id2));
- EXPECT_FALSE(resource_provider_->InUseByConsumer(id3));
-
uint8_t result[4] = { 0 };
- GetResourcePixels(
- resource_provider_.get(), context(), mapped_id1, size, format, result);
- EXPECT_EQ(0, memcmp(data1, result, pixel_size));
+ {
+ EXPECT_EQ(3u, resource_provider_->num_resources());
+ ResourceProvider::ResourceIdMap resource_map =
+ resource_provider_->GetChildToParentMap(child_id);
+ ResourceProvider::ResourceId mapped_id1 = resource_map[id1];
+ ResourceProvider::ResourceId mapped_id2 = resource_map[id2];
+ ResourceProvider::ResourceId mapped_id3 = resource_map[id3];
+ EXPECT_NE(0u, mapped_id1);
+ EXPECT_NE(0u, mapped_id2);
+ EXPECT_NE(0u, mapped_id3);
+ EXPECT_FALSE(resource_provider_->InUseByConsumer(id1));
+ EXPECT_FALSE(resource_provider_->InUseByConsumer(id2));
+ EXPECT_FALSE(resource_provider_->InUseByConsumer(id3));
- GetResourcePixels(
- resource_provider_.get(), context(), mapped_id2, size, format, result);
- EXPECT_EQ(0, memcmp(data2, result, pixel_size));
+ GetResourcePixels(
+ resource_provider_.get(), context(), mapped_id1, size, format, result);
+ EXPECT_EQ(0, memcmp(data1, result, pixel_size));
+
+ GetResourcePixels(
+ resource_provider_.get(), context(), mapped_id2, size, format, result);
+ EXPECT_EQ(0, memcmp(data2, result, pixel_size));
+
+ ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(),
+ mapped_id3);
+ EXPECT_NE(0U, lock.texture_id());
+ }
{
// Check that transfering again the same resource from the child to the
@@ -826,6 +844,8 @@ TEST_P(ResourceProviderTest, TransferGLResources) {
resource_provider_->ReceiveFromChild(child_id, list);
resource_provider_->DeclareUsedResourcesFromChild(child_id,
resource_ids_to_transfer);
+ // Lock resources in child to make sure they get "used".
+ ForceUseChildTextures(resource_provider_.get(), child_id, list);
}
EXPECT_EQ(0u, returned_to_child.size());
@@ -1261,6 +1281,11 @@ TEST_P(ResourceProviderTest, DeleteExportedResources) {
EXPECT_EQ(mapped_id2, list[1].id);
ReturnedResourceArray returned;
TransferableResource::ReturnResources(list, &returned);
+ EXPECT_EQ(2u, returned.size());
+ if (GetParam() == ResourceProvider::GLTexture) {
+ returned[0].sync_point = 3;
+ returned[1].sync_point = 4;
+ }
resource_provider_->ReceiveReturnsFromParent(returned);
EXPECT_EQ(0u, resource_provider_->num_resources());
@@ -1364,13 +1389,15 @@ TEST_P(ResourceProviderTest, DestroyChildWithExportedResources) {
list.pop_back();
ReturnedResourceArray returned;
TransferableResource::ReturnResources(return_list, &returned);
+ EXPECT_EQ(1u, returned.size());
+ if (GetParam() == ResourceProvider::GLTexture)
+ returned[0].sync_point = 3;
resource_provider_->ReceiveReturnsFromParent(returned);
EXPECT_EQ(1u, resource_provider_->num_resources());
ASSERT_EQ(1u, returned_to_child.size());
- if (GetParam() == ResourceProvider::GLTexture) {
+ if (GetParam() == ResourceProvider::GLTexture)
EXPECT_NE(0u, returned_to_child[0].sync_point);
- }
EXPECT_FALSE(returned_to_child[0].lost);
returned_to_child.clear();
@@ -1378,9 +1405,6 @@ TEST_P(ResourceProviderTest, DestroyChildWithExportedResources) {
// lost at this point, and returned.
resource_provider_.reset();
ASSERT_EQ(1u, returned_to_child.size());
- if (GetParam() == ResourceProvider::GLTexture) {
- EXPECT_NE(0u, returned_to_child[0].sync_point);
- }
EXPECT_TRUE(returned_to_child[0].lost);
}
}
@@ -1414,6 +1438,8 @@ TEST_P(ResourceProviderTest, DeleteTransferredResources) {
resource_provider_->ReceiveFromChild(child_id, list);
resource_provider_->DeclareUsedResourcesFromChild(child_id,
resource_ids_to_transfer);
+ if (GetParam() == ResourceProvider::GLTexture)
+ ForceUseChildTextures(resource_provider_.get(), child_id, list);
}
// Delete textures in the child, while they are transfered.
@@ -1541,10 +1567,12 @@ class ResourceProviderTestTextureFilters : public ResourceProviderTest {
ASSERT_EQ(1u, list.size());
EXPECT_EQ(static_cast<unsigned>(child_filter), list[0].filter);
+ parent_resource_provider->ReceiveFromChild(child_id, list);
+
EXPECT_CALL(*parent_context,
bindTexture(GL_TEXTURE_2D, parent_texture_id));
EXPECT_CALL(*parent_context, consumeTextureCHROMIUM(GL_TEXTURE_2D, _));
- parent_resource_provider->ReceiveFromChild(child_id, list);
+ ForceUseChildTextures(parent_resource_provider.get(), child_id, list);
Mock::VerifyAndClearExpectations(parent_context);
parent_resource_provider->DeclareUsedResourcesFromChild(
@@ -1660,19 +1688,22 @@ TEST_P(ResourceProviderTest, TransferMailboxResources) {
EXPECT_EQ(0, memcmp(data, test_data, sizeof(data)));
context()->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name);
context()->deleteTexture(other_texture);
- list[0].sync_point = context()->insertSyncPoint();
- EXPECT_LT(0u, list[0].sync_point);
+ unsigned return_sync_point = context()->insertSyncPoint();
+ EXPECT_LT(0u, return_sync_point);
// Receive the resource, then delete it, expect the sync points to be
// consistent.
ReturnedResourceArray returned;
TransferableResource::ReturnResources(list, &returned);
+ EXPECT_EQ(1u, returned.size());
+ returned[0].sync_point = return_sync_point;
+
resource_provider_->ReceiveReturnsFromParent(returned);
EXPECT_EQ(1u, context()->NumTextures());
EXPECT_EQ(0u, release_sync_point);
resource_provider_->DeleteResource(resource);
- EXPECT_LE(list[0].sync_point, release_sync_point);
+ EXPECT_LE(returned[0].sync_point, release_sync_point);
EXPECT_FALSE(lost_resource);
}
@@ -1708,8 +1739,8 @@ TEST_P(ResourceProviderTest, TransferMailboxResources) {
EXPECT_EQ(0, memcmp(data, test_data, sizeof(data)));
context()->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name);
context()->deleteTexture(other_texture);
- list[0].sync_point = context()->insertSyncPoint();
- EXPECT_LT(0u, list[0].sync_point);
+ unsigned return_sync_point = context()->insertSyncPoint();
+ EXPECT_LT(0u, return_sync_point);
// Delete the resource, which shouldn't do anything.
resource_provider_->DeleteResource(resource);
@@ -1720,6 +1751,9 @@ TEST_P(ResourceProviderTest, TransferMailboxResources) {
// sync points to be consistent.
ReturnedResourceArray returned;
TransferableResource::ReturnResources(list, &returned);
+ EXPECT_EQ(1u, returned.size());
+ returned[0].sync_point = return_sync_point;
+
resource_provider_->ReceiveReturnsFromParent(returned);
EXPECT_LE(list[0].sync_point, release_sync_point);
EXPECT_FALSE(lost_resource);
@@ -1983,12 +2017,17 @@ TEST_P(ResourceProviderTest, Shutdown) {
bool lost_resource = false;
bool release_called = false;
unsigned sync_point = 0;
- CreateChildMailbox(
+ ResourceProvider::ResourceId resource = CreateChildMailbox(
&release_sync_point, &lost_resource, &release_called, &sync_point);
EXPECT_EQ(0u, release_sync_point);
EXPECT_FALSE(lost_resource);
+ if (GetParam() == ResourceProvider::GLTexture) {
+ ResourceProvider::ScopedReadLockGL lock(child_resource_provider_.get(),
+ resource);
+ }
+
child_resource_provider_.reset();
if (GetParam() == ResourceProvider::GLTexture) {
@@ -2040,17 +2079,21 @@ TEST_P(ResourceProviderTest, LostContext) {
bool lost_resource = false;
scoped_ptr<SingleReleaseCallback> callback = SingleReleaseCallback::Create(
base::Bind(ReleaseTextureMailbox, &release_sync_point, &lost_resource));
- resource_provider_->CreateResourceFromTextureMailbox(
- TextureMailbox(mailbox, sync_point),
- callback.Pass());
+ ResourceProvider::ResourceId resource =
+ resource_provider_->CreateResourceFromTextureMailbox(
+ TextureMailbox(mailbox, sync_point), callback.Pass());
EXPECT_EQ(0u, release_sync_point);
EXPECT_FALSE(lost_resource);
+ if (GetParam() == ResourceProvider::GLTexture) {
+ ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), resource);
+ }
+
resource_provider_->DidLoseOutputSurface();
resource_provider_.reset();
- EXPECT_LE(sync_point, release_sync_point);
+ EXPECT_EQ(0u, release_sync_point);
EXPECT_TRUE(lost_resource);
}
« no previous file with comments | « cc/resources/resource_provider.cc ('k') | cc/resources/transferable_resource.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698