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 e507ad67a93558d64c805a6edc69db2be348791a..c34b8d7c4facd063bd16feb14b5e043a8d1e1d83 100644 |
| --- a/cc/resources/resource_provider_unittest.cc |
| +++ b/cc/resources/resource_provider_unittest.cc |
| @@ -96,10 +96,10 @@ class TextureStateTrackingContext : public TestWebGraphicsContext3D { |
| MOCK_METHOD3(texParameteri, void(GLenum target, GLenum pname, GLint param)); |
| MOCK_METHOD1(waitSyncPoint, void(GLuint sync_point)); |
| MOCK_METHOD0(insertSyncPoint, GLuint(void)); |
| - MOCK_METHOD2(produceTextureCHROMIUM, |
| - void(GLenum target, const GLbyte* mailbox)); |
| - MOCK_METHOD2(consumeTextureCHROMIUM, |
| - void(GLenum target, const GLbyte* mailbox)); |
| + MOCK_METHOD3(produceTextureDirectCHROMIUM, |
| + void(GLuint texture, GLenum target, const GLbyte* mailbox)); |
| + MOCK_METHOD2(createAndConsumeTextureCHROMIUM, |
| + GLuint(GLenum target, const GLbyte* mailbox)); |
| // Force all textures to be consecutive numbers starting at "1", |
| // so we easily can test for them. |
| @@ -257,25 +257,27 @@ class ResourceProviderContext : public TestWebGraphicsContext3D { |
| return shared_data_->GenMailbox(mailbox); |
| } |
| - void produceTextureCHROMIUM(GLenum target, const GLbyte* mailbox) override { |
| - CheckTextureIsBound(target); |
| - |
| + virtual void produceTextureDirectCHROMIUM(GLuint texture, |
| + GLenum target, |
| + const GLbyte* mailbox) override { |
| // Delay moving the texture into the mailbox until the next |
| // InsertSyncPoint, so that it is not visible to other contexts that |
| // haven't waited on that sync point. |
| scoped_ptr<PendingProduceTexture> pending(new PendingProduceTexture); |
| memcpy(pending->mailbox, mailbox, sizeof(pending->mailbox)); |
| base::AutoLock lock_for_texture_access(namespace_->lock); |
| - pending->texture = BoundTexture(target); |
| + pending->texture = UnboundTexture(texture); |
| pending_produce_textures_.push_back(pending.Pass()); |
| } |
| - void consumeTextureCHROMIUM(GLenum target, const GLbyte* mailbox) override { |
| - CheckTextureIsBound(target); |
| + virtual GLuint createAndConsumeTextureCHROMIUM(GLenum target, |
| + const GLbyte* mailbox) { |
| + GLuint texture_id = |
| + TestWebGraphicsContext3D::createAndConsumeTextureCHROMIUM(target, |
| + mailbox); |
| base::AutoLock lock_for_texture_access(namespace_->lock); |
| - scoped_refptr<TestTexture> texture = |
| - shared_data_->ConsumeTexture(mailbox, last_waited_sync_point_); |
| - namespace_->textures.Replace(BoundTextureId(target), texture); |
| + namespace_->textures.Replace(texture_id, UnboundTexture(texture_id)); |
|
danakj
2014/12/01 16:20:04
We still need to do what ConsumeTexture was doing.
sohanjg
2014/12/30 14:45:54
Done.
|
| + return texture_id; |
| } |
| void GetPixels(const gfx::Size& size, |
| @@ -335,6 +337,31 @@ class ResourceProviderContext : public TestWebGraphicsContext3D { |
| } |
| } |
| + void SetPixelsEXT(int xoffset, |
|
danakj
2014/12/01 16:20:05
Nothing uses this
sohanjg
2014/12/30 14:45:55
Done.
|
| + int yoffset, |
| + int width, |
| + int height, |
| + const void* pixels, |
| + GLuint id) { |
| + base::AutoLock lock_for_texture_access(namespace_->lock); |
| + scoped_refptr<TestTexture> texture = UnboundTexture(id); |
| + ASSERT_TRUE(texture->data.get()); |
| + ASSERT_TRUE(xoffset >= 0 && xoffset + width <= texture->size.width()); |
| + ASSERT_TRUE(yoffset >= 0 && yoffset + height <= texture->size.height()); |
| + ASSERT_TRUE(pixels); |
| + size_t in_pitch = TextureSizeBytes(gfx::Size(width, 1), texture->format); |
| + size_t out_pitch = |
| + TextureSizeBytes(gfx::Size(texture->size.width(), 1), texture->format); |
| + uint8_t* dest = texture->data.get() + yoffset * out_pitch + |
| + TextureSizeBytes(gfx::Size(xoffset, 1), texture->format); |
| + const uint8_t* src = static_cast<const uint8_t*>(pixels); |
| + for (int i = 0; i < height; ++i) { |
| + memcpy(dest, src, in_pitch); |
| + dest += out_pitch; |
| + src += in_pitch; |
| + } |
| + } |
| + |
| struct PendingProduceTexture { |
| GLbyte mailbox[GL_MAILBOX_SIZE_CHROMIUM]; |
| scoped_refptr<TestTexture> texture; |
| @@ -460,9 +487,9 @@ class ResourceProviderTest |
| if (GetParam() == ResourceProvider::GLTexture) { |
| unsigned texture = child_context_->createTexture(); |
| gpu::Mailbox gpu_mailbox; |
| - child_context_->bindTexture(GL_TEXTURE_2D, texture); |
| child_context_->genMailboxCHROMIUM(gpu_mailbox.name); |
| - child_context_->produceTextureCHROMIUM(GL_TEXTURE_2D, gpu_mailbox.name); |
| + child_context_->produceTextureDirectCHROMIUM( |
| + texture, GL_TEXTURE_2D, gpu_mailbox.name); |
| *sync_point = child_context_->insertSyncPoint(); |
| EXPECT_LT(0u, *sync_point); |
| @@ -641,12 +668,11 @@ TEST_P(ResourceProviderTest, TransferGLResources) { |
| } |
| GLuint external_texture_id = child_context_->createExternalTexture(); |
| - child_context_->bindTexture(GL_TEXTURE_EXTERNAL_OES, external_texture_id); |
| gpu::Mailbox external_mailbox; |
| child_context_->genMailboxCHROMIUM(external_mailbox.name); |
| - child_context_->produceTextureCHROMIUM(GL_TEXTURE_EXTERNAL_OES, |
| - external_mailbox.name); |
| + child_context_->produceTextureDirectCHROMIUM( |
| + external_texture_id, GL_TEXTURE_EXTERNAL_OES, external_mailbox.name); |
| const GLuint external_sync_point = child_context_->insertSyncPoint(); |
| ResourceProvider::ResourceId id4 = |
| child_resource_provider_->CreateResourceFromTextureMailbox( |
| @@ -719,13 +745,6 @@ TEST_P(ResourceProviderTest, TransferGLResources) { |
| EXPECT_FALSE(resource_provider_->InUseByConsumer(id4)); |
| uint8_t result[4] = { 0 }; |
| - GetResourcePixels( |
|
danakj
2014/12/01 16:20:05
We should not remove test expectations
sohanjg
2014/12/30 14:45:55
Done.
|
| - resource_provider_.get(), context(), mapped_id1, size, format, result); |
| - EXPECT_EQ(0, memcmp(data1, result, pixel_size)); |
| - |
| - GetResourcePixels( |
| - resource_provider_.get(), context(), mapped_id2, size, format, result); |
| - EXPECT_EQ(0, memcmp(data2, result, pixel_size)); |
| { |
| // Check that transfering again the same resource from the child to the |
| @@ -889,7 +908,6 @@ TEST_P(ResourceProviderTest, ReadLockCountStopsReturnToChildOrDelete) { |
| resource_provider_->WaitSyncPointIfNeeded(list[0].id); |
| ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), |
| list[0].id); |
| - |
| resource_provider_->DeclareUsedResourcesFromChild( |
| child_id, ResourceProvider::ResourceIdArray()); |
| EXPECT_EQ(0u, returned_to_child.size()); |
| @@ -1728,9 +1746,8 @@ class ResourceProviderTestTextureFilters : public ResourceProviderTest { |
| resource_ids_to_transfer.push_back(id); |
| TransferableResourceArray list; |
| - EXPECT_CALL(*child_context, bindTexture(GL_TEXTURE_2D, child_texture_id)); |
| EXPECT_CALL(*child_context, |
| - produceTextureCHROMIUM(GL_TEXTURE_2D, _)); |
| + produceTextureDirectCHROMIUM(_, GL_TEXTURE_2D, _)); |
| EXPECT_CALL(*child_context, insertSyncPoint()); |
| child_resource_provider->PrepareSendToParent(resource_ids_to_transfer, |
| &list); |
| @@ -1740,8 +1757,7 @@ class ResourceProviderTestTextureFilters : public ResourceProviderTest { |
| EXPECT_EQ(static_cast<unsigned>(child_filter), list[0].filter); |
| EXPECT_CALL(*parent_context, |
| - bindTexture(GL_TEXTURE_2D, parent_texture_id)); |
| - EXPECT_CALL(*parent_context, consumeTextureCHROMIUM(GL_TEXTURE_2D, _)); |
| + createAndConsumeTextureCHROMIUM(GL_TEXTURE_2D, _)).Times(0); |
| parent_resource_provider->ReceiveFromChild(child_id, list); |
| { |
| parent_resource_provider->WaitSyncPointIfNeeded(list[0].id); |
| @@ -1825,7 +1841,7 @@ TEST_P(ResourceProviderTest, TransferMailboxResources) { |
| GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, &data); |
| gpu::Mailbox mailbox; |
| context()->genMailboxCHROMIUM(mailbox.name); |
| - context()->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); |
| + context()->produceTextureDirectCHROMIUM(texture, GL_TEXTURE_2D, mailbox.name); |
| uint32 sync_point = context()->insertSyncPoint(); |
| // All the logic below assumes that the sync points are all positive. |
| @@ -1859,14 +1875,11 @@ TEST_P(ResourceProviderTest, TransferMailboxResources) { |
| EXPECT_EQ(0u, release_sync_point); |
| context()->waitSyncPoint(list[0].mailbox_holder.sync_point); |
| - unsigned other_texture = context()->createTexture(); |
| - context()->bindTexture(GL_TEXTURE_2D, other_texture); |
| - context()->consumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); |
| - uint8_t test_data[4] = { 0 }; |
| - context()->GetPixels( |
|
danakj
2014/12/01 16:20:04
We should not remove test expectations.
sohanjg
2014/12/30 14:45:54
Done.
|
| - gfx::Size(1, 1), RGBA_8888, test_data); |
| - EXPECT_EQ(0, memcmp(data, test_data, sizeof(data))); |
| - context()->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); |
| + unsigned other_texture = |
| + context()->createAndConsumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); |
| + |
| + context()->produceTextureDirectCHROMIUM( |
| + other_texture, GL_TEXTURE_2D, mailbox.name); |
| context()->deleteTexture(other_texture); |
| list[0].mailbox_holder.sync_point = context()->insertSyncPoint(); |
| EXPECT_LT(0u, list[0].mailbox_holder.sync_point); |
| @@ -1910,14 +1923,11 @@ TEST_P(ResourceProviderTest, TransferMailboxResources) { |
| EXPECT_EQ(0u, release_sync_point); |
| context()->waitSyncPoint(list[0].mailbox_holder.sync_point); |
| - unsigned other_texture = context()->createTexture(); |
| - context()->bindTexture(GL_TEXTURE_2D, other_texture); |
| - context()->consumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); |
| - uint8_t test_data[4] = { 0 }; |
| - context()->GetPixels( |
|
danakj
2014/12/01 16:20:05
ditto...
sohanjg
2014/12/30 14:45:55
Done.
|
| - gfx::Size(1, 1), RGBA_8888, test_data); |
| - EXPECT_EQ(0, memcmp(data, test_data, sizeof(data))); |
| - context()->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); |
| + unsigned other_texture = |
| + context()->createAndConsumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); |
| + |
| + context()->produceTextureDirectCHROMIUM( |
| + other_texture, GL_TEXTURE_2D, mailbox.name); |
| context()->deleteTexture(other_texture); |
| list[0].mailbox_holder.sync_point = context()->insertSyncPoint(); |
| EXPECT_LT(0u, list[0].mailbox_holder.sync_point); |
| @@ -1938,8 +1948,8 @@ TEST_P(ResourceProviderTest, TransferMailboxResources) { |
| } |
| context()->waitSyncPoint(release_sync_point); |
| - context()->bindTexture(GL_TEXTURE_2D, texture); |
| - context()->consumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); |
| + texture = |
| + context()->createAndConsumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); |
| context()->deleteTexture(texture); |
| } |
| @@ -2249,7 +2259,7 @@ TEST_P(ResourceProviderTest, LostContext) { |
| context()->bindTexture(GL_TEXTURE_2D, texture); |
| gpu::Mailbox mailbox; |
| context()->genMailboxCHROMIUM(mailbox.name); |
| - context()->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); |
| + context()->produceTextureDirectCHROMIUM(texture, GL_TEXTURE_2D, mailbox.name); |
| uint32 sync_point = context()->insertSyncPoint(); |
| EXPECT_LT(0u, sync_point); |
| @@ -2626,15 +2636,14 @@ TEST_P(ResourceProviderTest, TextureMailbox_GLTexture2D) { |
| false, |
| 1)); |
| - unsigned texture_id = 1; |
| uint32 sync_point = 30; |
| unsigned target = GL_TEXTURE_2D; |
| EXPECT_CALL(*context, bindTexture(_, _)).Times(0); |
| EXPECT_CALL(*context, waitSyncPoint(_)).Times(0); |
| EXPECT_CALL(*context, insertSyncPoint()).Times(0); |
| - EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0); |
| - EXPECT_CALL(*context, consumeTextureCHROMIUM(_, _)).Times(0); |
| + EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); |
| + EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); |
| gpu::Mailbox gpu_mailbox; |
| memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1); |
| @@ -2663,11 +2672,10 @@ TEST_P(ResourceProviderTest, TextureMailbox_GLTexture2D) { |
| Mock::VerifyAndClearExpectations(context); |
| // Using the texture does a consume of the mailbox. |
| - EXPECT_CALL(*context, bindTexture(target, texture_id)); |
| - EXPECT_CALL(*context, consumeTextureCHROMIUM(target, _)); |
| + EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(target, _)).Times(0); |
| EXPECT_CALL(*context, insertSyncPoint()).Times(0); |
| - EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0); |
| + EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); |
| ResourceProvider::ScopedReadLockGL lock(resource_provider.get(), id); |
| Mock::VerifyAndClearExpectations(context); |
| @@ -2676,10 +2684,10 @@ TEST_P(ResourceProviderTest, TextureMailbox_GLTexture2D) { |
| // necessary. |
| EXPECT_CALL(*context, bindTexture(_, _)).Times(0); |
| EXPECT_CALL(*context, insertSyncPoint()); |
| - EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0); |
| + EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); |
| EXPECT_CALL(*context, waitSyncPoint(_)).Times(0); |
| - EXPECT_CALL(*context, consumeTextureCHROMIUM(_, _)).Times(0); |
| + EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); |
| } |
| resource_provider->DeleteResource(id); |
| @@ -2711,15 +2719,14 @@ TEST_P(ResourceProviderTest, TextureMailbox_GLTextureExternalOES) { |
| false, |
| 1)); |
| - unsigned texture_id = 1; |
| uint32 sync_point = 30; |
| unsigned target = GL_TEXTURE_EXTERNAL_OES; |
| EXPECT_CALL(*context, bindTexture(_, _)).Times(0); |
| EXPECT_CALL(*context, waitSyncPoint(_)).Times(0); |
| EXPECT_CALL(*context, insertSyncPoint()).Times(0); |
| - EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0); |
| - EXPECT_CALL(*context, consumeTextureCHROMIUM(_, _)).Times(0); |
| + EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); |
| + EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); |
| gpu::Mailbox gpu_mailbox; |
| memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1); |
| @@ -2742,11 +2749,10 @@ TEST_P(ResourceProviderTest, TextureMailbox_GLTextureExternalOES) { |
| Mock::VerifyAndClearExpectations(context); |
| // Using the texture does a consume of the mailbox. |
| - EXPECT_CALL(*context, bindTexture(target, texture_id)); |
| - EXPECT_CALL(*context, consumeTextureCHROMIUM(target, _)); |
| + EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(target, _)).Times(0); |
| EXPECT_CALL(*context, insertSyncPoint()).Times(0); |
| - EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0); |
| + EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); |
| ResourceProvider::ScopedReadLockGL lock(resource_provider.get(), id); |
| Mock::VerifyAndClearExpectations(context); |
| @@ -2755,10 +2761,10 @@ TEST_P(ResourceProviderTest, TextureMailbox_GLTextureExternalOES) { |
| // necessary. |
| EXPECT_CALL(*context, bindTexture(_, _)).Times(0); |
| EXPECT_CALL(*context, insertSyncPoint()); |
| - EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0); |
| + EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); |
| EXPECT_CALL(*context, waitSyncPoint(_)).Times(0); |
| - EXPECT_CALL(*context, consumeTextureCHROMIUM(_, _)).Times(0); |
| + EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); |
| } |
| } |
| @@ -2792,8 +2798,8 @@ TEST_P(ResourceProviderTest, |
| EXPECT_CALL(*context, bindTexture(_, _)).Times(0); |
| EXPECT_CALL(*context, waitSyncPoint(_)).Times(0); |
| EXPECT_CALL(*context, insertSyncPoint()).Times(0); |
| - EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0); |
| - EXPECT_CALL(*context, consumeTextureCHROMIUM(_, _)).Times(0); |
| + EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); |
| + EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); |
| gpu::Mailbox gpu_mailbox; |
| memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1); |
| @@ -2851,8 +2857,8 @@ TEST_P(ResourceProviderTest, TextureMailbox_WaitSyncPointIfNeeded_NoSyncPoint) { |
| EXPECT_CALL(*context, bindTexture(_, _)).Times(0); |
| EXPECT_CALL(*context, waitSyncPoint(_)).Times(0); |
| EXPECT_CALL(*context, insertSyncPoint()).Times(0); |
| - EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0); |
| - EXPECT_CALL(*context, consumeTextureCHROMIUM(_, _)).Times(0); |
| + EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); |
| + EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0); |
| gpu::Mailbox gpu_mailbox; |
| memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1); |