Index: cc/resources/resource_provider_unittest.cc |
diff --git a/cc/resources/resource_provider_unittest.cc b/cc/resources/resource_provider_unittest.cc |
index 7c65b73098b208ec4ed2916383c0deb148867ffc..4a02e828dcb79b611be09838cc0ed47389ef1ed8 100644 |
--- a/cc/resources/resource_provider_unittest.cc |
+++ b/cc/resources/resource_provider_unittest.cc |
@@ -422,11 +422,11 @@ |
resource_provider_ = ResourceProvider::Create( |
output_surface_.get(), shared_bitmap_manager_.get(), |
gpu_memory_buffer_manager_.get(), main_thread_task_runner_.get(), 0, |
- false, 1, use_image_texture_targets_); |
+ false, 1, false, use_image_texture_targets_); |
child_resource_provider_ = ResourceProvider::Create( |
child_output_surface_.get(), shared_bitmap_manager_.get(), |
gpu_memory_buffer_manager_.get(), main_thread_task_runner_.get(), 0, |
- false, 1, use_image_texture_targets_); |
+ false, 1, false, use_image_texture_targets_); |
} |
ResourceProviderTest() : ResourceProviderTest(true) {} |
@@ -1378,7 +1378,7 @@ |
scoped_ptr<ResourceProvider> child_resource_provider(ResourceProvider::Create( |
child_output_surface.get(), shared_bitmap_manager_.get(), |
- gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, |
+ gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, false, |
use_image_texture_targets_)); |
gfx::Size size(1, 1); |
@@ -1863,7 +1863,7 @@ |
scoped_ptr<ResourceProvider> child_resource_provider( |
ResourceProvider::Create(child_output_surface.get(), |
shared_bitmap_manager.get(), NULL, NULL, 0, |
- false, 1, use_image_texture_targets_)); |
+ false, 1, false, use_image_texture_targets_)); |
scoped_ptr<TextureStateTrackingContext> parent_context_owned( |
new TextureStateTrackingContext); |
@@ -1877,7 +1877,7 @@ |
scoped_ptr<ResourceProvider> parent_resource_provider( |
ResourceProvider::Create(parent_output_surface.get(), |
shared_bitmap_manager.get(), NULL, NULL, 0, |
- false, 1, use_image_texture_targets_)); |
+ false, 1, false, use_image_texture_targets_)); |
gfx::Size size(1, 1); |
ResourceFormat format = RGBA_8888; |
@@ -2509,7 +2509,7 @@ |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager_.get(), |
- gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, |
+ gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, false, |
use_image_texture_targets_)); |
gfx::Size size(1, 1); |
@@ -2592,7 +2592,7 @@ |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager_.get(), |
- gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, |
+ gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, false, |
use_image_texture_targets_)); |
gfx::Size size(1, 1); |
@@ -2640,7 +2640,7 @@ |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager_.get(), |
- gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, |
+ gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, false, |
use_image_texture_targets_)); |
gfx::Size size(1, 1); |
@@ -2691,7 +2691,7 @@ |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager_.get(), |
- gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, |
+ gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, false, |
use_image_texture_targets_)); |
gfx::Size size(1, 1); |
@@ -2757,7 +2757,7 @@ |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager_.get(), |
gpu_memory_buffer_manager_.get(), main_thread_task_runner_.get(), 0, |
- false, 1, use_image_texture_targets_)); |
+ false, 1, false, use_image_texture_targets_)); |
uint32 release_sync_point = 0; |
bool lost_resource = false; |
@@ -2806,7 +2806,8 @@ |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager, gpu_memory_buffer_manager, |
- main_thread_task_runner, 0, false, 1, use_image_texture_targets_)); |
+ main_thread_task_runner, 0, false, 1, false, |
+ use_image_texture_targets_)); |
unsigned texture_id = 1; |
uint32 sync_point = 30; |
@@ -2949,7 +2950,7 @@ |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager_.get(), |
- gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, |
+ gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, false, |
use_image_texture_targets_)); |
uint32 sync_point = 30; |
@@ -3019,7 +3020,7 @@ |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager_.get(), |
- gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, |
+ gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, false, |
use_image_texture_targets_)); |
uint32 sync_point = 30; |
@@ -3073,7 +3074,7 @@ |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager_.get(), |
- gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, |
+ gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, false, |
use_image_texture_targets_)); |
uint32 sync_point = 0; |
@@ -3194,7 +3195,7 @@ |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager_.get(), |
- gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, |
+ gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, false, |
use_image_texture_targets_)); |
gfx::Size size(2, 2); |
@@ -3269,7 +3270,7 @@ |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager_.get(), |
- gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, |
+ gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, false, |
use_image_texture_targets_)); |
gfx::Size size(2, 2); |
@@ -3325,7 +3326,7 @@ |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager_.get(), |
- gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, |
+ gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, false, |
use_image_texture_targets_)); |
gfx::Size size(2, 2); |
@@ -3380,7 +3381,7 @@ |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager_.get(), |
- gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, |
+ gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, false, |
use_image_texture_targets_)); |
id = resource_provider->CreateResource( |
@@ -3423,7 +3424,7 @@ |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager_.get(), |
- gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, |
+ gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, false, |
use_image_texture_targets_)); |
id = resource_provider->CreateResource( |
@@ -3466,7 +3467,7 @@ |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager_.get(), |
- gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, |
+ gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, false, |
use_image_texture_targets_)); |
EXPECT_CALL(*context, NextTextureId()).WillRepeatedly(Return(texture_id)); |
@@ -3507,7 +3508,7 @@ |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager_.get(), |
- gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, |
+ gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, false, |
use_image_texture_targets_)); |
id = resource_provider->CreateResource( |
@@ -3568,6 +3569,89 @@ |
.RetiresOnSaturation(); |
} |
+TEST_P(ResourceProviderTest, CopyResource_GLTexture) { |
+ if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
+ return; |
+ scoped_ptr<AllocationTrackingContext3D> context_owned( |
+ new StrictMock<AllocationTrackingContext3D>); |
+ AllocationTrackingContext3D* context = context_owned.get(); |
+ context_owned->set_support_sync_query(true); |
+ |
+ FakeOutputSurfaceClient output_surface_client; |
+ scoped_ptr<OutputSurface> output_surface( |
+ FakeOutputSurface::Create3d(context_owned.Pass())); |
+ ASSERT_TRUE(output_surface->BindToClient(&output_surface_client)); |
+ |
+ const int kWidth = 2; |
+ const int kHeight = 2; |
+ gfx::Size size(kWidth, kHeight); |
+ ResourceFormat format = RGBA_8888; |
+ ResourceId source_id = 0; |
+ ResourceId dest_id = 0; |
+ const unsigned kSourceTextureId = 123u; |
+ const unsigned kDestTextureId = 321u; |
+ const unsigned kImageId = 234u; |
+ |
+ scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
+ output_surface.get(), shared_bitmap_manager_.get(), |
+ gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, false, |
+ std::vector<unsigned>(static_cast<size_t>(gfx::BufferFormat::LAST) + 1, |
+ GL_TEXTURE_2D))); |
+ |
+ source_id = resource_provider->CreateResource( |
+ size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); |
+ |
+ EXPECT_CALL(*context, NextTextureId()) |
+ .WillOnce(Return(kSourceTextureId)) |
+ .RetiresOnSaturation(); |
+ EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kSourceTextureId)) |
+ .Times(1) |
+ .RetiresOnSaturation(); |
+ EXPECT_CALL(*context, createImageCHROMIUM(_, kWidth, kHeight, GL_RGBA)) |
+ .WillOnce(Return(kImageId)) |
+ .RetiresOnSaturation(); |
+ { |
+ ResourceProvider::ScopedWriteLockGpuMemoryBuffer lock( |
+ resource_provider.get(), source_id); |
+ EXPECT_TRUE(lock.GetGpuMemoryBuffer()); |
+ } |
+ Mock::VerifyAndClearExpectations(context); |
+ |
+ dest_id = resource_provider->CreateResource( |
+ size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format); |
+ |
+ EXPECT_CALL(*context, NextTextureId()) |
+ .WillOnce(Return(kDestTextureId)) |
+ .RetiresOnSaturation(); |
+ EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kDestTextureId)) |
+ .Times(2) |
+ .RetiresOnSaturation(); |
+ EXPECT_CALL(*context, texImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, |
+ GL_UNSIGNED_BYTE, nullptr)) |
+ .Times(1) |
+ .RetiresOnSaturation(); |
+ EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kSourceTextureId)) |
+ .Times(1) |
+ .RetiresOnSaturation(); |
+ EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) |
+ .Times(1) |
+ .RetiresOnSaturation(); |
+ resource_provider->CopyResource(source_id, dest_id, gfx::Rect(size)); |
+ Mock::VerifyAndClearExpectations(context); |
+ |
+ EXPECT_CALL(*context, destroyImageCHROMIUM(kImageId)) |
+ .Times(1) |
+ .RetiresOnSaturation(); |
+ EXPECT_CALL(*context, RetireTextureId(kSourceTextureId)) |
+ .Times(1) |
+ .RetiresOnSaturation(); |
+ EXPECT_CALL(*context, RetireTextureId(kDestTextureId)) |
+ .Times(1) |
+ .RetiresOnSaturation(); |
+ resource_provider->DeleteResource(source_id); |
+ resource_provider->DeleteResource(dest_id); |
+} |
+ |
TEST_P(ResourceProviderTest, CompressedTextureETC1Allocate) { |
if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) |
return; |
@@ -3585,7 +3669,7 @@ |
gfx::Size size(4, 4); |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager_.get(), |
- gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, |
+ gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, false, |
use_image_texture_targets_)); |
int texture_id = 123; |
@@ -3617,7 +3701,7 @@ |
gfx::Size size(4, 4); |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager_.get(), |
- gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, |
+ gpu_memory_buffer_manager_.get(), NULL, 0, false, 1, false, |
use_image_texture_targets_)); |
int texture_id = 123; |
uint8_t pixels[8]; |
@@ -3674,7 +3758,7 @@ |
size_t kTextureAllocationChunkSize = 1; |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager.get(), NULL, NULL, 0, false, |
- kTextureAllocationChunkSize, |
+ kTextureAllocationChunkSize, false, |
ResourceProviderTest::use_image_texture_targets())); |
ResourceId id = resource_provider->CreateResource( |
@@ -3691,7 +3775,7 @@ |
size_t kTextureAllocationChunkSize = 8; |
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
output_surface.get(), shared_bitmap_manager.get(), NULL, NULL, 0, false, |
- kTextureAllocationChunkSize, |
+ kTextureAllocationChunkSize, false, |
ResourceProviderTest::use_image_texture_targets())); |
ResourceId id = resource_provider->CreateResource( |