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 <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 3731 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3742 ResourceFormat format = RGBA_8888; | 3742 ResourceFormat format = RGBA_8888; |
3743 size_t pixel_size = TextureSizeBytes(size, format); | 3743 size_t pixel_size = TextureSizeBytes(size, format); |
3744 ASSERT_EQ(4U, pixel_size); | 3744 ASSERT_EQ(4U, pixel_size); |
3745 | 3745 |
3746 ResourceId id = resource_provider_->CreateResource( | 3746 ResourceId id = resource_provider_->CreateResource( |
3747 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); | 3747 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); |
3748 resource_provider_->AllocateForTesting(id); | 3748 resource_provider_->AllocateForTesting(id); |
3749 { | 3749 { |
3750 ResourceProvider::ScopedReadLockGpuMemoryBuffer lock( | 3750 ResourceProvider::ScopedReadLockGpuMemoryBuffer lock( |
3751 resource_provider_.get(), id); | 3751 resource_provider_.get(), id); |
3752 EXPECT_FALSE(lock.GetGpuMemoryBuffer()); | 3752 EXPECT_FALSE(lock.gpu_memory_buffer()); |
3753 } | 3753 } |
3754 } | 3754 } |
3755 | 3755 |
3756 TEST_P(ResourceProviderTest, GpuMemoryBufferReadLockSucceed) { | 3756 TEST_P(ResourceProviderTest, GpuMemoryBufferReadLockSucceed) { |
3757 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) | 3757 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
3758 return; | 3758 return; |
3759 | 3759 |
3760 gfx::Size size(1, 1); | 3760 gfx::Size size(1, 1); |
3761 ResourceFormat format = RGBA_8888; | 3761 ResourceFormat format = RGBA_8888; |
3762 size_t pixel_size = TextureSizeBytes(size, format); | 3762 size_t pixel_size = TextureSizeBytes(size, format); |
3763 ASSERT_EQ(4U, pixel_size); | 3763 ASSERT_EQ(4U, pixel_size); |
3764 | 3764 |
3765 ResourceId id = resource_provider_->CreateResource( | 3765 ResourceId id = resource_provider_->CreateResource( |
3766 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); | 3766 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); |
3767 gfx::GpuMemoryBuffer* gpu_memory_buffer = nullptr; | 3767 gfx::GpuMemoryBuffer* gpu_memory_buffer = nullptr; |
3768 { | 3768 { |
3769 ResourceProvider::ScopedWriteLockGpuMemoryBuffer lock( | 3769 ResourceProvider::ScopedWriteLockGpuMemoryBuffer lock( |
3770 resource_provider_.get(), id); | 3770 resource_provider_.get(), id); |
3771 gpu_memory_buffer = lock.GetGpuMemoryBuffer(); | 3771 gpu_memory_buffer = lock.GetGpuMemoryBuffer(); |
3772 EXPECT_TRUE(lock.GetGpuMemoryBuffer()); | 3772 EXPECT_TRUE(lock.GetGpuMemoryBuffer()); |
3773 } | 3773 } |
3774 { | 3774 { |
3775 ResourceProvider::ScopedReadLockGpuMemoryBuffer lock( | 3775 ResourceProvider::ScopedReadLockGpuMemoryBuffer lock( |
3776 resource_provider_.get(), id); | 3776 resource_provider_.get(), id); |
3777 EXPECT_EQ(gpu_memory_buffer, lock.GetGpuMemoryBuffer()); | 3777 EXPECT_EQ(gpu_memory_buffer, lock.gpu_memory_buffer()); |
3778 } | 3778 } |
3779 } | 3779 } |
3780 | 3780 |
3781 TEST_P(ResourceProviderTest, ChildGpuMemoryBufferReadLock) { | 3781 TEST_P(ResourceProviderTest, ChildGpuMemoryBufferReadLock) { |
3782 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) | 3782 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
3783 return; | 3783 return; |
3784 | 3784 |
3785 gfx::Size size(1, 1); | 3785 gfx::Size size(1, 1); |
3786 ResourceFormat format = RGBA_8888; | 3786 ResourceFormat format = RGBA_8888; |
3787 size_t pixel_size = TextureSizeBytes(size, format); | 3787 size_t pixel_size = TextureSizeBytes(size, format); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3824 &list); | 3824 &list); |
3825 resource_provider_->ReceiveFromChild(child_id, list); | 3825 resource_provider_->ReceiveFromChild(child_id, list); |
3826 resource_provider_->WaitSyncTokenIfNeeded(list[0].id); | 3826 resource_provider_->WaitSyncTokenIfNeeded(list[0].id); |
3827 resource_provider_->WaitSyncTokenIfNeeded(list[1].id); | 3827 resource_provider_->WaitSyncTokenIfNeeded(list[1].id); |
3828 } | 3828 } |
3829 | 3829 |
3830 // The non-gmb resource should not have a GpuMemoryBuffer when locked. | 3830 // The non-gmb resource should not have a GpuMemoryBuffer when locked. |
3831 { | 3831 { |
3832 ResourceProvider::ScopedReadLockGpuMemoryBuffer lock( | 3832 ResourceProvider::ScopedReadLockGpuMemoryBuffer lock( |
3833 resource_provider_.get(), list[0].id); | 3833 resource_provider_.get(), list[0].id); |
3834 EXPECT_FALSE(lock.GetGpuMemoryBuffer()); | 3834 EXPECT_FALSE(lock.gpu_memory_buffer()); |
3835 } | 3835 } |
3836 | 3836 |
3837 // The gmb resource should have a GpuMemoryBuffer when locked | 3837 // The gmb resource should have a GpuMemoryBuffer when locked |
3838 { | 3838 { |
3839 ResourceProvider::ScopedReadLockGpuMemoryBuffer lock( | 3839 ResourceProvider::ScopedReadLockGpuMemoryBuffer lock( |
3840 resource_provider_.get(), list[1].id); | 3840 resource_provider_.get(), list[1].id); |
3841 gfx::GpuMemoryBuffer* parent_gmb = lock.GetGpuMemoryBuffer(); | 3841 gfx::GpuMemoryBuffer* parent_gmb = lock.gpu_memory_buffer(); |
3842 EXPECT_TRUE(parent_gmb); | 3842 EXPECT_TRUE(parent_gmb); |
3843 EXPECT_NE(child_gmb, parent_gmb); | 3843 EXPECT_NE(child_gmb, parent_gmb); |
3844 | 3844 |
3845 // Verify that the IsInUseByMacOSWindowServer signal is shared between | 3845 // Verify that the IsInUseByMacOSWindowServer signal is shared between |
3846 // parent and child. | 3846 // parent and child. |
3847 EXPECT_FALSE(parent_gmb->IsInUseByMacOSWindowServer()); | 3847 EXPECT_FALSE(parent_gmb->IsInUseByMacOSWindowServer()); |
3848 child_gpu_memory_buffer_manager_ | 3848 child_gpu_memory_buffer_manager_ |
3849 ->SetGpuMemoryBufferIsInUseByMacOSWindowServer(child_gmb, true); | 3849 ->SetGpuMemoryBufferIsInUseByMacOSWindowServer(child_gmb, true); |
3850 EXPECT_TRUE(parent_gmb->IsInUseByMacOSWindowServer()); | 3850 EXPECT_TRUE(parent_gmb->IsInUseByMacOSWindowServer()); |
3851 child_gpu_memory_buffer_manager_ | 3851 child_gpu_memory_buffer_manager_ |
3852 ->SetGpuMemoryBufferIsInUseByMacOSWindowServer(child_gmb, false); | 3852 ->SetGpuMemoryBufferIsInUseByMacOSWindowServer(child_gmb, false); |
3853 EXPECT_FALSE(parent_gmb->IsInUseByMacOSWindowServer()); | 3853 EXPECT_FALSE(parent_gmb->IsInUseByMacOSWindowServer()); |
3854 } | 3854 } |
3855 | 3855 |
3856 // Transfer back to the child.{ | 3856 // Transfer back to the child.{ |
3857 { | 3857 { |
3858 ResourceProvider::ResourceIdSet resource_ids_to_receive; | 3858 ResourceProvider::ResourceIdSet resource_ids_to_receive; |
3859 resource_ids_to_receive.insert(child_resource); | 3859 resource_ids_to_receive.insert(child_resource); |
3860 resource_ids_to_receive.insert(child_gmb_resource); | 3860 resource_ids_to_receive.insert(child_gmb_resource); |
3861 resource_provider_->DeclareUsedResourcesFromChild(child_id, | 3861 resource_provider_->DeclareUsedResourcesFromChild(child_id, |
3862 resource_ids_to_receive); | 3862 resource_ids_to_receive); |
3863 } | 3863 } |
3864 resource_provider_->DestroyChild(child_id); | 3864 resource_provider_->DestroyChild(child_id); |
3865 | 3865 |
3866 EXPECT_EQ(0u, resource_provider_->num_resources()); | 3866 EXPECT_EQ(0u, resource_provider_->num_resources()); |
3867 } | 3867 } |
3868 | 3868 |
3869 } // namespace | 3869 } // namespace |
3870 } // namespace cc | 3870 } // namespace cc |
OLD | NEW |