Chromium Code Reviews| Index: cc/resources/resource_provider_unittest.cc |
| diff --git a/cc/resources/resource_provider_unittest.cc b/cc/resources/resource_provider_unittest.cc |
| index f556be33b7e02617aae98f677c395b2602735420..6eba4199ec53da4ad1c98d516553d5bbdd20caaf 100644 |
| --- a/cc/resources/resource_provider_unittest.cc |
| +++ b/cc/resources/resource_provider_unittest.cc |
| @@ -3027,6 +3027,133 @@ TEST_P(ResourceProviderTest, Image_Bitmap) { |
| resource_provider->DeleteResource(id); |
| } |
| +TEST_P(ResourceProviderTest, CopyResource_GLTexture) { |
| + if (GetParam() != ResourceProvider::GLTexture) |
| + return; |
| + scoped_ptr<AllocationTrackingContext3D> context_owned( |
| + new StrictMock<AllocationTrackingContext3D>); |
| + AllocationTrackingContext3D* context = context_owned.get(); |
| + |
| + FakeOutputSurfaceClient output_surface_client; |
| + scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( |
| + context_owned.PassAs<TestWebGraphicsContext3D>())); |
| + CHECK(output_surface->BindToClient(&output_surface_client)); |
|
piman
2014/04/14 18:39:34
nit: ASSERT_TRUE
reveman
2014/04/14 19:24:09
Done.
|
| + |
| + const int kWidth = 2; |
| + const int kHeight = 2; |
| + gfx::Size size(kWidth, kHeight); |
| + ResourceFormat format = RGBA_8888; |
| + ResourceProvider::ResourceId source_id = 0; |
| + ResourceProvider::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(), 0, false, 1)); |
| + |
| + source_id = resource_provider->CreateResource( |
| + size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); |
| + |
| + const int kStride = 4; |
| + void* dummy_mapped_buffer_address = NULL; |
| + EXPECT_CALL(*context, createImageCHROMIUM(kWidth, kHeight, GL_RGBA8_OES)) |
| + .WillOnce(Return(kImageId)) |
| + .RetiresOnSaturation(); |
| + EXPECT_CALL( |
| + *context, |
| + getImageParameterivCHROMIUM(kImageId, GL_IMAGE_ROWBYTES_CHROMIUM, _)) |
| + .WillOnce(SetArgPointee<2>(kStride)) |
| + .RetiresOnSaturation(); |
| + EXPECT_CALL(*context, mapImageCHROMIUM(kImageId, GL_READ_WRITE)) |
| + .WillOnce(Return(dummy_mapped_buffer_address)) |
| + .RetiresOnSaturation(); |
| + resource_provider->MapImageRasterBuffer(source_id); |
|
piman
2014/04/14 18:39:34
nit: it could be useful to add a Mock::VerifyAndCl
reveman
2014/04/14 19:24:09
Done.
|
| + |
| + EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId)) |
| + .Times(1) |
| + .RetiresOnSaturation(); |
| + resource_provider->UnmapImageRasterBuffer(source_id); |
|
piman
2014/04/14 18:39:34
and here
reveman
2014/04/14 19:24:09
Done.
|
| + |
| + dest_id = resource_provider->CreateResource( |
| + size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); |
| + |
| + EXPECT_CALL(*context, NextTextureId()) |
| + .WillOnce(Return(kDestTextureId)) |
| + .RetiresOnSaturation(); |
| + EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kDestTextureId)) |
| + .Times(1) |
| + .RetiresOnSaturation(); |
| + EXPECT_CALL(*context, NextTextureId()) |
| + .WillOnce(Return(kSourceTextureId)) |
| + .RetiresOnSaturation(); |
| + EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kSourceTextureId)) |
| + .Times(2) |
| + .RetiresOnSaturation(); |
| + EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId)) |
| + .Times(1) |
| + .RetiresOnSaturation(); |
| + resource_provider->CopyResource(source_id, dest_id); |
|
piman
2014/04/14 18:39:34
and here
reveman
2014/04/14 19:24:09
Done.
|
| + |
| + 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, CopyResource_Bitmap) { |
| + if (GetParam() != ResourceProvider::Bitmap) |
| + return; |
| + FakeOutputSurfaceClient output_surface_client; |
| + scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::CreateSoftware( |
| + make_scoped_ptr(new SoftwareOutputDevice))); |
| + CHECK(output_surface->BindToClient(&output_surface_client)); |
| + |
| + gfx::Size size(1, 1); |
| + ResourceFormat format = RGBA_8888; |
| + ResourceProvider::ResourceId source_id = 0; |
| + ResourceProvider::ResourceId dest_id = 0; |
| + const uint32_t kBadBeef = 0xbadbeef; |
| + |
| + scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
| + output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1)); |
| + |
| + source_id = resource_provider->CreateResource( |
| + size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); |
| + |
| + SkBitmap bitmap; |
| + bitmap.allocN32Pixels(size.width(), size.height()); |
| + *(bitmap.getAddr32(0, 0)) = kBadBeef; |
| + SkCanvas* canvas = resource_provider->MapImageRasterBuffer(source_id); |
| + ASSERT_TRUE(!!canvas); |
| + canvas->writePixels(bitmap, 0, 0); |
| + resource_provider->UnmapImageRasterBuffer(source_id); |
| + |
| + dest_id = resource_provider->CreateResource( |
| + size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); |
| + |
| + resource_provider->CopyResource(source_id, dest_id); |
| + |
| + { |
| + ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), |
| + dest_id); |
| + const SkBitmap* sk_bitmap = lock.sk_bitmap(); |
| + EXPECT_EQ(sk_bitmap->width(), size.width()); |
| + EXPECT_EQ(sk_bitmap->height(), size.height()); |
| + EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef); |
| + } |
| + |
| + resource_provider->DeleteResource(source_id); |
| + resource_provider->DeleteResource(dest_id); |
| +} |
| + |
| void InitializeGLAndCheck(ContextSharedData* shared_data, |
| ResourceProvider* resource_provider, |
| FakeOutputSurface* output_surface) { |