| 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 |