| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/resources/resource_provider.h" | 5 #include "cc/resources/resource_provider.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/containers/hash_tables.h" | 10 #include "base/containers/hash_tables.h" |
| (...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 580 { | 580 { |
| 581 // Check that transfering again the same resource from the child to the | 581 // Check that transfering again the same resource from the child to the |
| 582 // parent works. | 582 // parent works. |
| 583 ResourceProvider::ResourceIdArray resource_ids_to_transfer; | 583 ResourceProvider::ResourceIdArray resource_ids_to_transfer; |
| 584 resource_ids_to_transfer.push_back(id1); | 584 resource_ids_to_transfer.push_back(id1); |
| 585 TransferableResourceArray list; | 585 TransferableResourceArray list; |
| 586 child_resource_provider->PrepareSendToParent(resource_ids_to_transfer, | 586 child_resource_provider->PrepareSendToParent(resource_ids_to_transfer, |
| 587 &list); | 587 &list); |
| 588 EXPECT_EQ(1u, list.size()); | 588 EXPECT_EQ(1u, list.size()); |
| 589 EXPECT_EQ(id1, list[0].id); | 589 EXPECT_EQ(id1, list[0].id); |
| 590 child_resource_provider->ReceiveFromParent(list); | 590 ReturnedResourceArray returned; |
| 591 ReturnResources(list, &returned); |
| 592 child_resource_provider->ReceiveFromParent(returned); |
| 591 // id1 was exported twice, we returned it only once, it should still be | 593 // id1 was exported twice, we returned it only once, it should still be |
| 592 // in-use. | 594 // in-use. |
| 593 EXPECT_TRUE(child_resource_provider->InUseByConsumer(id1)); | 595 EXPECT_TRUE(child_resource_provider->InUseByConsumer(id1)); |
| 594 } | 596 } |
| 595 { | 597 { |
| 596 // Transfer resources back from the parent to the child. | 598 // Transfer resources back from the parent to the child. |
| 597 ResourceProvider::ResourceIdArray resource_ids_to_transfer; | 599 ResourceProvider::ResourceIdArray resource_ids_to_transfer; |
| 598 resource_ids_to_transfer.push_back(mapped_id1); | 600 resource_ids_to_transfer.push_back(mapped_id1); |
| 599 resource_ids_to_transfer.push_back(mapped_id2); | 601 resource_ids_to_transfer.push_back(mapped_id2); |
| 600 TransferableResourceArray list; | 602 ReturnedResourceArray list; |
| 601 resource_provider_->PrepareSendToChild( | 603 resource_provider_->PrepareSendToChild( |
| 602 child_id, resource_ids_to_transfer, &list); | 604 child_id, resource_ids_to_transfer, &list); |
| 603 ASSERT_EQ(2u, list.size()); | 605 ASSERT_EQ(2u, list.size()); |
| 604 EXPECT_NE(0u, list[0].sync_point); | 606 EXPECT_NE(0u, list[0].sync_point); |
| 605 EXPECT_NE(0u, list[1].sync_point); | 607 EXPECT_NE(0u, list[1].sync_point); |
| 606 child_resource_provider->ReceiveFromParent(list); | 608 child_resource_provider->ReceiveFromParent(list); |
| 607 } | 609 } |
| 608 EXPECT_FALSE(child_resource_provider->InUseByConsumer(id1)); | 610 EXPECT_FALSE(child_resource_provider->InUseByConsumer(id1)); |
| 609 EXPECT_FALSE(child_resource_provider->InUseByConsumer(id2)); | 611 EXPECT_FALSE(child_resource_provider->InUseByConsumer(id2)); |
| 610 | 612 |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 685 child_resource_provider->DeleteResource(id); | 687 child_resource_provider->DeleteResource(id); |
| 686 EXPECT_EQ(1u, child_resource_provider->num_resources()); | 688 EXPECT_EQ(1u, child_resource_provider->num_resources()); |
| 687 { | 689 { |
| 688 // Transfer resources back from the parent to the child. | 690 // Transfer resources back from the parent to the child. |
| 689 ResourceProvider::ResourceIdMap resource_map = | 691 ResourceProvider::ResourceIdMap resource_map = |
| 690 resource_provider_->GetChildToParentMap(child_id); | 692 resource_provider_->GetChildToParentMap(child_id); |
| 691 ResourceProvider::ResourceId mapped_id = resource_map[id]; | 693 ResourceProvider::ResourceId mapped_id = resource_map[id]; |
| 692 EXPECT_NE(0u, mapped_id); | 694 EXPECT_NE(0u, mapped_id); |
| 693 ResourceProvider::ResourceIdArray resource_ids_to_transfer; | 695 ResourceProvider::ResourceIdArray resource_ids_to_transfer; |
| 694 resource_ids_to_transfer.push_back(mapped_id); | 696 resource_ids_to_transfer.push_back(mapped_id); |
| 695 TransferableResourceArray list; | 697 ReturnedResourceArray list; |
| 696 resource_provider_->PrepareSendToChild( | 698 resource_provider_->PrepareSendToChild( |
| 697 child_id, resource_ids_to_transfer, &list); | 699 child_id, resource_ids_to_transfer, &list); |
| 698 ASSERT_EQ(1u, list.size()); | 700 ASSERT_EQ(1u, list.size()); |
| 699 EXPECT_NE(0u, list[0].sync_point); | 701 EXPECT_NE(0u, list[0].sync_point); |
| 700 child_resource_provider->ReceiveFromParent(list); | 702 child_resource_provider->ReceiveFromParent(list); |
| 701 } | 703 } |
| 702 EXPECT_EQ(0u, child_resource_provider->num_resources()); | 704 EXPECT_EQ(0u, child_resource_provider->num_resources()); |
| 703 } | 705 } |
| 704 | 706 |
| 705 TEST_P(ResourceProviderTest, TextureFilters) { | 707 TEST_P(ResourceProviderTest, TextureFilters) { |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 747 EXPECT_NE(0u, mapped_id); | 749 EXPECT_NE(0u, mapped_id); |
| 748 EXPECT_EQ(static_cast<unsigned>(GL_NEAREST), | 750 EXPECT_EQ(static_cast<unsigned>(GL_NEAREST), |
| 749 GetResourceFilter(resource_provider_.get(), mapped_id)); | 751 GetResourceFilter(resource_provider_.get(), mapped_id)); |
| 750 SetResourceFilter(resource_provider_.get(), mapped_id, GL_LINEAR); | 752 SetResourceFilter(resource_provider_.get(), mapped_id, GL_LINEAR); |
| 751 EXPECT_EQ(static_cast<unsigned>(GL_LINEAR), | 753 EXPECT_EQ(static_cast<unsigned>(GL_LINEAR), |
| 752 GetResourceFilter(resource_provider_.get(), mapped_id)); | 754 GetResourceFilter(resource_provider_.get(), mapped_id)); |
| 753 { | 755 { |
| 754 // Transfer resources back from the parent to the child. | 756 // Transfer resources back from the parent to the child. |
| 755 ResourceProvider::ResourceIdArray resource_ids_to_transfer; | 757 ResourceProvider::ResourceIdArray resource_ids_to_transfer; |
| 756 resource_ids_to_transfer.push_back(mapped_id); | 758 resource_ids_to_transfer.push_back(mapped_id); |
| 757 TransferableResourceArray list; | 759 ReturnedResourceArray list; |
| 758 resource_provider_->PrepareSendToChild( | 760 resource_provider_->PrepareSendToChild( |
| 759 child_id, resource_ids_to_transfer, &list); | 761 child_id, resource_ids_to_transfer, &list); |
| 760 ASSERT_EQ(1u, list.size()); | 762 ASSERT_EQ(1u, list.size()); |
| 761 EXPECT_EQ(static_cast<unsigned>(GL_LINEAR), list[0].filter); | 763 EXPECT_EQ(static_cast<unsigned>(GL_LINEAR), list[0].filter); |
| 762 child_resource_provider->ReceiveFromParent(list); | 764 child_resource_provider->ReceiveFromParent(list); |
| 763 } | 765 } |
| 764 EXPECT_EQ(static_cast<unsigned>(GL_LINEAR), | 766 EXPECT_EQ(static_cast<unsigned>(GL_LINEAR), |
| 765 GetResourceFilter(child_resource_provider.get(), id)); | 767 GetResourceFilter(child_resource_provider.get(), id)); |
| 766 SetResourceFilter(child_resource_provider.get(), id, GL_NEAREST); | 768 SetResourceFilter(child_resource_provider.get(), id, GL_NEAREST); |
| 767 EXPECT_EQ(static_cast<unsigned>(GL_NEAREST), | 769 EXPECT_EQ(static_cast<unsigned>(GL_NEAREST), |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 821 uint8_t test_data[4] = { 0 }; | 823 uint8_t test_data[4] = { 0 }; |
| 822 context()->GetPixels(gfx::Size(1, 1), GL_RGBA, test_data); | 824 context()->GetPixels(gfx::Size(1, 1), GL_RGBA, test_data); |
| 823 EXPECT_EQ(0, memcmp(data, test_data, sizeof(data))); | 825 EXPECT_EQ(0, memcmp(data, test_data, sizeof(data))); |
| 824 context()->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); | 826 context()->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); |
| 825 context()->deleteTexture(other_texture); | 827 context()->deleteTexture(other_texture); |
| 826 list[0].sync_point = context()->insertSyncPoint(); | 828 list[0].sync_point = context()->insertSyncPoint(); |
| 827 EXPECT_LT(0u, list[0].sync_point); | 829 EXPECT_LT(0u, list[0].sync_point); |
| 828 | 830 |
| 829 // Receive the resource, then delete it, expect the sync points to be | 831 // Receive the resource, then delete it, expect the sync points to be |
| 830 // consistent. | 832 // consistent. |
| 831 resource_provider_->ReceiveFromParent(list); | 833 ReturnedResourceArray returned; |
| 834 ReturnResources(list, &returned); |
| 835 resource_provider_->ReceiveFromParent(returned); |
| 832 EXPECT_EQ(1, context()->texture_count()); | 836 EXPECT_EQ(1, context()->texture_count()); |
| 833 EXPECT_EQ(0u, release_sync_point); | 837 EXPECT_EQ(0u, release_sync_point); |
| 834 | 838 |
| 835 resource_provider_->DeleteResource(resource); | 839 resource_provider_->DeleteResource(resource); |
| 836 EXPECT_LE(list[0].sync_point, release_sync_point); | 840 EXPECT_LE(list[0].sync_point, release_sync_point); |
| 837 EXPECT_FALSE(lost_resource); | 841 EXPECT_FALSE(lost_resource); |
| 838 } | 842 } |
| 839 | 843 |
| 840 // We're going to do the same thing as above, but testing the case where we | 844 // We're going to do the same thing as above, but testing the case where we |
| 841 // delete the resource before we receive it back. | 845 // delete the resource before we receive it back. |
| (...skipping 28 matching lines...) Expand all Loading... |
| 870 list[0].sync_point = context()->insertSyncPoint(); | 874 list[0].sync_point = context()->insertSyncPoint(); |
| 871 EXPECT_LT(0u, list[0].sync_point); | 875 EXPECT_LT(0u, list[0].sync_point); |
| 872 | 876 |
| 873 // Delete the resource, which shouldn't do anything. | 877 // Delete the resource, which shouldn't do anything. |
| 874 resource_provider_->DeleteResource(resource); | 878 resource_provider_->DeleteResource(resource); |
| 875 EXPECT_EQ(1, context()->texture_count()); | 879 EXPECT_EQ(1, context()->texture_count()); |
| 876 EXPECT_EQ(0u, release_sync_point); | 880 EXPECT_EQ(0u, release_sync_point); |
| 877 | 881 |
| 878 // Then receive the resource which should release the mailbox, expect the | 882 // Then receive the resource which should release the mailbox, expect the |
| 879 // sync points to be consistent. | 883 // sync points to be consistent. |
| 880 resource_provider_->ReceiveFromParent(list); | 884 ReturnedResourceArray returned; |
| 885 ReturnResources(list, &returned); |
| 886 resource_provider_->ReceiveFromParent(returned); |
| 881 EXPECT_LE(list[0].sync_point, release_sync_point); | 887 EXPECT_LE(list[0].sync_point, release_sync_point); |
| 882 EXPECT_FALSE(lost_resource); | 888 EXPECT_FALSE(lost_resource); |
| 883 } | 889 } |
| 884 | 890 |
| 885 context()->waitSyncPoint(release_sync_point); | 891 context()->waitSyncPoint(release_sync_point); |
| 886 context()->bindTexture(GL_TEXTURE_2D, texture); | 892 context()->bindTexture(GL_TEXTURE_2D, texture); |
| 887 context()->consumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); | 893 context()->consumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); |
| 888 context()->deleteTexture(texture); | 894 context()->deleteTexture(texture); |
| 889 } | 895 } |
| 890 | 896 |
| (...skipping 848 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1739 output_surface.get()); | 1745 output_surface.get()); |
| 1740 } | 1746 } |
| 1741 | 1747 |
| 1742 INSTANTIATE_TEST_CASE_P( | 1748 INSTANTIATE_TEST_CASE_P( |
| 1743 ResourceProviderTests, | 1749 ResourceProviderTests, |
| 1744 ResourceProviderTest, | 1750 ResourceProviderTest, |
| 1745 ::testing::Values(ResourceProvider::GLTexture, ResourceProvider::Bitmap)); | 1751 ::testing::Values(ResourceProvider::GLTexture, ResourceProvider::Bitmap)); |
| 1746 | 1752 |
| 1747 } // namespace | 1753 } // namespace |
| 1748 } // namespace cc | 1754 } // namespace cc |
| OLD | NEW |