| Index: cc/resources/resource_provider_unittest.cc
|
| diff --git a/cc/resources/resource_provider_unittest.cc b/cc/resources/resource_provider_unittest.cc
|
| index e40c9a7e6fe8fe8fe276e549e5e4170831b27dea..52de843290fcac133ac8848c23940e65cd4e1aa3 100644
|
| --- a/cc/resources/resource_provider_unittest.cc
|
| +++ b/cc/resources/resource_provider_unittest.cc
|
| @@ -647,6 +647,12 @@ TEST_P(ResourceProviderTest, TransferGLResources) {
|
| uint8_t data2[4] = { 5, 5, 5, 5 };
|
| child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d());
|
|
|
| + ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource(
|
| + size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
|
| + child_resource_provider_->AcquireImage(id3);
|
| + child_resource_provider_->MapImage(id3);
|
| + child_resource_provider_->UnmapImage(id3);
|
| +
|
| GLuint external_texture_id = child_context_->createExternalTexture();
|
| child_context_->bindTexture(GL_TEXTURE_EXTERNAL_OES, external_texture_id);
|
|
|
| @@ -655,7 +661,7 @@ TEST_P(ResourceProviderTest, TransferGLResources) {
|
| child_context_->produceTextureCHROMIUM(GL_TEXTURE_EXTERNAL_OES,
|
| external_mailbox.name);
|
| const unsigned external_sync_point = child_context_->insertSyncPoint();
|
| - ResourceProvider::ResourceId id3 =
|
| + ResourceProvider::ResourceId id4 =
|
| child_resource_provider_->CreateResourceFromTextureMailbox(
|
| TextureMailbox(
|
| external_mailbox, GL_TEXTURE_EXTERNAL_OES, external_sync_point),
|
| @@ -670,36 +676,43 @@ TEST_P(ResourceProviderTest, TransferGLResources) {
|
| resource_ids_to_transfer.push_back(id1);
|
| resource_ids_to_transfer.push_back(id2);
|
| resource_ids_to_transfer.push_back(id3);
|
| + resource_ids_to_transfer.push_back(id4);
|
| TransferableResourceArray list;
|
| child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
|
| &list);
|
| - ASSERT_EQ(3u, list.size());
|
| + ASSERT_EQ(4u, list.size());
|
| EXPECT_NE(0u, list[0].sync_point);
|
| EXPECT_NE(0u, list[1].sync_point);
|
| - EXPECT_EQ(external_sync_point, list[2].sync_point);
|
| + EXPECT_NE(0u, list[2].sync_point);
|
| + EXPECT_EQ(external_sync_point, list[3].sync_point);
|
| EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[0].target);
|
| EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[1].target);
|
| - EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), list[2].target);
|
| + EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[2].target);
|
| + EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), list[3].target);
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3));
|
| + EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id4));
|
| resource_provider_->ReceiveFromChild(child_id, list);
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id,
|
| resource_ids_to_transfer);
|
| }
|
|
|
| - EXPECT_EQ(3u, resource_provider_->num_resources());
|
| + EXPECT_EQ(4u, 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];
|
| + ResourceProvider::ResourceId mapped_id4 = resource_map[id4];
|
| EXPECT_NE(0u, mapped_id1);
|
| EXPECT_NE(0u, mapped_id2);
|
| EXPECT_NE(0u, mapped_id3);
|
| + EXPECT_NE(0u, mapped_id4);
|
| EXPECT_FALSE(resource_provider_->InUseByConsumer(id1));
|
| EXPECT_FALSE(resource_provider_->InUseByConsumer(id2));
|
| EXPECT_FALSE(resource_provider_->InUseByConsumer(id3));
|
| + EXPECT_FALSE(resource_provider_->InUseByConsumer(id4));
|
|
|
| uint8_t result[4] = { 0 };
|
| GetResourcePixels(
|
| @@ -715,18 +728,26 @@ TEST_P(ResourceProviderTest, TransferGLResources) {
|
| // parent works.
|
| ResourceProvider::ResourceIdArray resource_ids_to_transfer;
|
| resource_ids_to_transfer.push_back(id1);
|
| + resource_ids_to_transfer.push_back(id2);
|
| + resource_ids_to_transfer.push_back(id3);
|
| TransferableResourceArray list;
|
| child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
|
| &list);
|
| - EXPECT_EQ(1u, list.size());
|
| + EXPECT_EQ(3u, list.size());
|
| EXPECT_EQ(id1, list[0].id);
|
| + EXPECT_EQ(id2, list[1].id);
|
| + EXPECT_EQ(id3, list[2].id);
|
| EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[0].target);
|
| + EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[1].target);
|
| + EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[2].target);
|
| ReturnedResourceArray returned;
|
| TransferableResource::ReturnResources(list, &returned);
|
| child_resource_provider_->ReceiveReturnsFromParent(returned);
|
| - // id1 was exported twice, we returned it only once, it should still be
|
| - // in-use.
|
| + // ids were exported twice, we returned them only once, they should still
|
| + // be in-use.
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
|
| + EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
|
| + EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3));
|
| }
|
| {
|
| EXPECT_EQ(0u, returned_to_child.size());
|
| @@ -736,19 +757,22 @@ TEST_P(ResourceProviderTest, TransferGLResources) {
|
| ResourceProvider::ResourceIdArray no_resources;
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
|
|
|
| - ASSERT_EQ(3u, returned_to_child.size());
|
| + ASSERT_EQ(4u, returned_to_child.size());
|
| EXPECT_NE(0u, returned_to_child[0].sync_point);
|
| EXPECT_NE(0u, returned_to_child[1].sync_point);
|
| EXPECT_NE(0u, returned_to_child[2].sync_point);
|
| + EXPECT_NE(0u, returned_to_child[3].sync_point);
|
| EXPECT_FALSE(returned_to_child[0].lost);
|
| EXPECT_FALSE(returned_to_child[1].lost);
|
| EXPECT_FALSE(returned_to_child[2].lost);
|
| + EXPECT_FALSE(returned_to_child[3].lost);
|
| child_resource_provider_->ReceiveReturnsFromParent(returned_to_child);
|
| returned_to_child.clear();
|
| }
|
| EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id1));
|
| EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id2));
|
| EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id3));
|
| + EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id4));
|
|
|
| {
|
| ResourceProvider::ScopedReadLockGL lock(child_resource_provider_.get(),
|
| @@ -767,27 +791,38 @@ TEST_P(ResourceProviderTest, TransferGLResources) {
|
| EXPECT_EQ(0, memcmp(data2, result, pixel_size));
|
| }
|
| {
|
| + ResourceProvider::ScopedReadLockGL lock(child_resource_provider_.get(),
|
| + id3);
|
| + ASSERT_NE(0U, lock.texture_id());
|
| + child_context_->bindTexture(GL_TEXTURE_2D, lock.texture_id());
|
| + }
|
| + {
|
| // Transfer resources to the parent again.
|
| ResourceProvider::ResourceIdArray resource_ids_to_transfer;
|
| resource_ids_to_transfer.push_back(id1);
|
| resource_ids_to_transfer.push_back(id2);
|
| resource_ids_to_transfer.push_back(id3);
|
| + resource_ids_to_transfer.push_back(id4);
|
| TransferableResourceArray list;
|
| child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
|
| &list);
|
| - ASSERT_EQ(3u, list.size());
|
| + ASSERT_EQ(4u, list.size());
|
| EXPECT_EQ(id1, list[0].id);
|
| EXPECT_EQ(id2, list[1].id);
|
| EXPECT_EQ(id3, list[2].id);
|
| + EXPECT_EQ(id4, list[3].id);
|
| EXPECT_NE(0u, list[0].sync_point);
|
| EXPECT_NE(0u, list[1].sync_point);
|
| EXPECT_NE(0u, list[2].sync_point);
|
| + EXPECT_NE(0u, list[3].sync_point);
|
| EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[0].target);
|
| EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[1].target);
|
| - EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), list[2].target);
|
| + EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), list[2].target);
|
| + EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), list[3].target);
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3));
|
| + EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id4));
|
| resource_provider_->ReceiveFromChild(child_id, list);
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id,
|
| resource_ids_to_transfer);
|
| @@ -795,17 +830,19 @@ TEST_P(ResourceProviderTest, TransferGLResources) {
|
|
|
| EXPECT_EQ(0u, returned_to_child.size());
|
|
|
| - EXPECT_EQ(3u, resource_provider_->num_resources());
|
| + EXPECT_EQ(4u, resource_provider_->num_resources());
|
| resource_provider_->DestroyChild(child_id);
|
| EXPECT_EQ(0u, resource_provider_->num_resources());
|
|
|
| - ASSERT_EQ(3u, returned_to_child.size());
|
| + ASSERT_EQ(4u, returned_to_child.size());
|
| EXPECT_NE(0u, returned_to_child[0].sync_point);
|
| EXPECT_NE(0u, returned_to_child[1].sync_point);
|
| EXPECT_NE(0u, returned_to_child[2].sync_point);
|
| + EXPECT_NE(0u, returned_to_child[3].sync_point);
|
| EXPECT_FALSE(returned_to_child[0].lost);
|
| EXPECT_FALSE(returned_to_child[1].lost);
|
| EXPECT_FALSE(returned_to_child[2].lost);
|
| + EXPECT_FALSE(returned_to_child[3].lost);
|
| }
|
|
|
| TEST_P(ResourceProviderTest, TransferSoftwareResources) {
|
| @@ -828,10 +865,18 @@ TEST_P(ResourceProviderTest, TransferSoftwareResources) {
|
| uint8_t data2[4] = { 5, 5, 5, 5 };
|
| child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d());
|
|
|
| + ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource(
|
| + size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format);
|
| + child_resource_provider_->AcquireImage(id3);
|
| + void* data = child_resource_provider_->MapImage(id3);
|
| + uint8_t data3[4] = { 6, 7, 8, 9 };
|
| + memcpy(data, data3, sizeof(data3));
|
| + child_resource_provider_->UnmapImage(id3);
|
| +
|
| scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory());
|
| shared_memory->CreateAndMapAnonymous(1);
|
| base::SharedMemory* shared_memory_ptr = shared_memory.get();
|
| - ResourceProvider::ResourceId id3 =
|
| + ResourceProvider::ResourceId id4 =
|
| child_resource_provider_->CreateResourceFromTextureMailbox(
|
| TextureMailbox(shared_memory_ptr, gfx::Size(1, 1)),
|
| SingleReleaseCallback::Create(base::Bind(
|
| @@ -846,33 +891,39 @@ TEST_P(ResourceProviderTest, TransferSoftwareResources) {
|
| resource_ids_to_transfer.push_back(id1);
|
| resource_ids_to_transfer.push_back(id2);
|
| resource_ids_to_transfer.push_back(id3);
|
| + resource_ids_to_transfer.push_back(id4);
|
| TransferableResourceArray list;
|
| child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
|
| &list);
|
| - ASSERT_EQ(3u, list.size());
|
| + ASSERT_EQ(4u, list.size());
|
| EXPECT_EQ(0u, list[0].sync_point);
|
| EXPECT_EQ(0u, list[1].sync_point);
|
| EXPECT_EQ(0u, list[2].sync_point);
|
| + EXPECT_EQ(0u, list[3].sync_point);
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3));
|
| + EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id4));
|
| resource_provider_->ReceiveFromChild(child_id, list);
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id,
|
| resource_ids_to_transfer);
|
| }
|
|
|
| - EXPECT_EQ(3u, resource_provider_->num_resources());
|
| + EXPECT_EQ(4u, 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];
|
| + ResourceProvider::ResourceId mapped_id4 = resource_map[id4];
|
| EXPECT_NE(0u, mapped_id1);
|
| EXPECT_NE(0u, mapped_id2);
|
| EXPECT_NE(0u, mapped_id3);
|
| + EXPECT_NE(0u, mapped_id4);
|
| EXPECT_FALSE(resource_provider_->InUseByConsumer(id1));
|
| EXPECT_FALSE(resource_provider_->InUseByConsumer(id2));
|
| EXPECT_FALSE(resource_provider_->InUseByConsumer(id3));
|
| + EXPECT_FALSE(resource_provider_->InUseByConsumer(id4));
|
|
|
| uint8_t result[4] = { 0 };
|
| GetResourcePixels(
|
| @@ -883,22 +934,32 @@ TEST_P(ResourceProviderTest, TransferSoftwareResources) {
|
| resource_provider_.get(), context(), mapped_id2, size, format, result);
|
| EXPECT_EQ(0, memcmp(data2, result, pixel_size));
|
|
|
| + GetResourcePixels(
|
| + resource_provider_.get(), context(), mapped_id3, size, format, result);
|
| + EXPECT_EQ(0, memcmp(data3, result, pixel_size));
|
| +
|
| {
|
| // Check that transfering again the same resource from the child to the
|
| // parent works.
|
| ResourceProvider::ResourceIdArray resource_ids_to_transfer;
|
| resource_ids_to_transfer.push_back(id1);
|
| + resource_ids_to_transfer.push_back(id2);
|
| + resource_ids_to_transfer.push_back(id3);
|
| TransferableResourceArray list;
|
| child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
|
| &list);
|
| - EXPECT_EQ(1u, list.size());
|
| + EXPECT_EQ(3u, list.size());
|
| EXPECT_EQ(id1, list[0].id);
|
| + EXPECT_EQ(id2, list[1].id);
|
| + EXPECT_EQ(id3, list[2].id);
|
| ReturnedResourceArray returned;
|
| TransferableResource::ReturnResources(list, &returned);
|
| child_resource_provider_->ReceiveReturnsFromParent(returned);
|
| - // id1 was exported twice, we returned it only once, it should still be
|
| - // in-use.
|
| + // ids were exported twice, we returned them only once, they should still
|
| + // be in-use.
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
|
| + EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
|
| + EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3));
|
| }
|
| {
|
| EXPECT_EQ(0u, returned_to_child.size());
|
| @@ -908,22 +969,26 @@ TEST_P(ResourceProviderTest, TransferSoftwareResources) {
|
| ResourceProvider::ResourceIdArray no_resources;
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id, no_resources);
|
|
|
| - ASSERT_EQ(3u, returned_to_child.size());
|
| + ASSERT_EQ(4u, returned_to_child.size());
|
| EXPECT_EQ(0u, returned_to_child[0].sync_point);
|
| EXPECT_EQ(0u, returned_to_child[1].sync_point);
|
| EXPECT_EQ(0u, returned_to_child[2].sync_point);
|
| + EXPECT_EQ(0u, returned_to_child[3].sync_point);
|
| EXPECT_EQ(id1, returned_to_child[0].id);
|
| EXPECT_EQ(id2, returned_to_child[1].id);
|
| EXPECT_EQ(id3, returned_to_child[2].id);
|
| + EXPECT_EQ(id4, returned_to_child[3].id);
|
| EXPECT_FALSE(returned_to_child[0].lost);
|
| EXPECT_FALSE(returned_to_child[1].lost);
|
| EXPECT_FALSE(returned_to_child[2].lost);
|
| + EXPECT_FALSE(returned_to_child[3].lost);
|
| child_resource_provider_->ReceiveReturnsFromParent(returned_to_child);
|
| returned_to_child.clear();
|
| }
|
| EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id1));
|
| EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id2));
|
| EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id3));
|
| + EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id4));
|
|
|
| {
|
| ResourceProvider::ScopedReadLockSoftware lock(
|
| @@ -942,21 +1007,32 @@ TEST_P(ResourceProviderTest, TransferSoftwareResources) {
|
| EXPECT_EQ(0, memcmp(data2, sk_bitmap->getPixels(), pixel_size));
|
| }
|
| {
|
| + ResourceProvider::ScopedReadLockSoftware lock(
|
| + child_resource_provider_.get(), id3);
|
| + const SkBitmap* sk_bitmap = lock.sk_bitmap();
|
| + EXPECT_EQ(sk_bitmap->width(), size.width());
|
| + EXPECT_EQ(sk_bitmap->height(), size.height());
|
| + EXPECT_EQ(0, memcmp(data3, sk_bitmap->getPixels(), pixel_size));
|
| + }
|
| + {
|
| // Transfer resources to the parent again.
|
| ResourceProvider::ResourceIdArray resource_ids_to_transfer;
|
| resource_ids_to_transfer.push_back(id1);
|
| resource_ids_to_transfer.push_back(id2);
|
| resource_ids_to_transfer.push_back(id3);
|
| + resource_ids_to_transfer.push_back(id4);
|
| TransferableResourceArray list;
|
| child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
|
| &list);
|
| - ASSERT_EQ(3u, list.size());
|
| + ASSERT_EQ(4u, list.size());
|
| EXPECT_EQ(id1, list[0].id);
|
| EXPECT_EQ(id2, list[1].id);
|
| EXPECT_EQ(id3, list[2].id);
|
| + EXPECT_EQ(id4, list[3].id);
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id2));
|
| EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id3));
|
| + EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id4));
|
| resource_provider_->ReceiveFromChild(child_id, list);
|
| resource_provider_->DeclareUsedResourcesFromChild(child_id,
|
| resource_ids_to_transfer);
|
| @@ -964,20 +1040,23 @@ TEST_P(ResourceProviderTest, TransferSoftwareResources) {
|
|
|
| EXPECT_EQ(0u, returned_to_child.size());
|
|
|
| - EXPECT_EQ(3u, resource_provider_->num_resources());
|
| + EXPECT_EQ(4u, resource_provider_->num_resources());
|
| resource_provider_->DestroyChild(child_id);
|
| EXPECT_EQ(0u, resource_provider_->num_resources());
|
|
|
| - ASSERT_EQ(3u, returned_to_child.size());
|
| + ASSERT_EQ(4u, returned_to_child.size());
|
| EXPECT_EQ(0u, returned_to_child[0].sync_point);
|
| EXPECT_EQ(0u, returned_to_child[1].sync_point);
|
| EXPECT_EQ(0u, returned_to_child[2].sync_point);
|
| + EXPECT_EQ(0u, returned_to_child[3].sync_point);
|
| EXPECT_EQ(id1, returned_to_child[0].id);
|
| EXPECT_EQ(id2, returned_to_child[1].id);
|
| EXPECT_EQ(id3, returned_to_child[2].id);
|
| + EXPECT_EQ(id4, returned_to_child[3].id);
|
| EXPECT_FALSE(returned_to_child[0].lost);
|
| EXPECT_FALSE(returned_to_child[1].lost);
|
| EXPECT_FALSE(returned_to_child[2].lost);
|
| + EXPECT_FALSE(returned_to_child[3].lost);
|
| }
|
|
|
| TEST_P(ResourceProviderTest, TransferSoftwareToNonUber) {
|
|
|