// Run the test for a texture client and a surface void TestTextureClientSurface(TextureClient* texture, gfxImageSurface* surface) { // client allocation ASSERT_TRUE(texture->AsTextureClientSurface() != nullptr); TextureClientSurface* client = texture->AsTextureClientSurface(); client->AllocateForSurface(ToIntSize(surface->GetSize())); ASSERT_TRUE(texture->IsAllocated()); // client painting client->UpdateSurface(surface); nsRefPtr<gfxASurface> aSurface = client->GetAsSurface(); nsRefPtr<gfxImageSurface> clientSurface = aSurface->GetAsImageSurface(); ASSERT_TRUE(texture->Lock(OPEN_READ_ONLY)); AssertSurfacesEqual(surface, clientSurface); texture->Unlock(); // client serialization texture->SetID(1); SurfaceDescriptor descriptor; ASSERT_TRUE(texture->ToSurfaceDescriptor(descriptor)); ASSERT_NE(descriptor.type(), SurfaceDescriptor::Tnull_t); // host deserialization RefPtr<TextureHost> host = CreateBackendIndependentTextureHost(texture->GetID(), descriptor, nullptr, texture->GetFlags()); ASSERT_TRUE(host.get() != nullptr); ASSERT_EQ(host->GetFlags(), texture->GetFlags()); ASSERT_EQ(host->GetID(), texture->GetID()); // host read ASSERT_TRUE(host->Lock()); nsRefPtr<gfxImageSurface> hostSurface = host->GetAsSurface(); host->Unlock(); AssertSurfacesEqual(surface, hostSurface.get()); // host deallocation host->DeallocateSharedData(); }
// Run the test for a texture client and a surface void TestTextureClientSurface(TextureClient* texture, gfxImageSurface* surface) { // client allocation ASSERT_TRUE(texture->AsTextureClientSurface() != nullptr); TextureClientSurface* client = texture->AsTextureClientSurface(); client->AllocateForSurface(ToIntSize(surface->GetSize())); ASSERT_TRUE(texture->IsAllocated()); ASSERT_TRUE(texture->Lock(OPEN_READ_WRITE)); // client painting client->UpdateSurface(surface); nsRefPtr<gfxASurface> aSurface = client->GetAsSurface(); nsRefPtr<gfxImageSurface> clientSurface = aSurface->GetAsImageSurface(); AssertSurfacesEqual(surface, clientSurface); texture->Unlock(); // client serialization SurfaceDescriptor descriptor; ASSERT_TRUE(texture->ToSurfaceDescriptor(descriptor)); ASSERT_NE(descriptor.type(), SurfaceDescriptor::Tnull_t); // host deserialization RefPtr<TextureHost> host = CreateBackendIndependentTextureHost(descriptor, nullptr, texture->GetFlags()); ASSERT_TRUE(host.get() != nullptr); ASSERT_EQ(host->GetFlags(), texture->GetFlags()); // host read ASSERT_TRUE(host->Lock()); RefPtr<mozilla::gfx::DataSourceSurface> hostDataSurface = host->GetAsSurface(); host->Unlock(); nsRefPtr<gfxImageSurface> hostSurface = new gfxImageSurface(hostDataSurface->GetData(), ThebesIntSize(hostDataSurface->GetSize()), hostDataSurface->Stride(), SurfaceFormatToImageFormat(hostDataSurface->GetFormat())); AssertSurfacesEqual(surface, hostSurface.get()); }