| 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);
|
| }
|
|
|
|
|