| Index: cc/resources/resource_provider_unittest.cc
|
| diff --git a/cc/resources/resource_provider_unittest.cc b/cc/resources/resource_provider_unittest.cc
|
| index fdd7fc0da760113e46ecfde488a66ddcf4413c69..24b91bf440a2453c5a8a8a081151699bf80fdfe5 100644
|
| --- a/cc/resources/resource_provider_unittest.cc
|
| +++ b/cc/resources/resource_provider_unittest.cc
|
| @@ -97,10 +97,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,
|
| + unsigned(GLenum target, const GLbyte* mailbox));
|
|
|
| // Force all textures to be consecutive numbers starting at "1",
|
| // so we easily can test for them.
|
| @@ -258,25 +258,27 @@ class ResourceProviderContext : public TestWebGraphicsContext3D {
|
| return shared_data_->GenMailbox(mailbox);
|
| }
|
|
|
| - void produceTextureCHROMIUM(GLenum target, const GLbyte* mailbox) override {
|
| - CheckTextureIsBound(target);
|
| -
|
| + 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);
|
| + GLuint createAndConsumeTextureCHROMIUM(GLenum target,
|
| + const GLbyte* mailbox) override {
|
| + GLuint texture_id = createTexture();
|
| 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, texture);
|
| + return texture_id;
|
| }
|
|
|
| void GetPixels(const gfx::Size& size,
|
| @@ -461,9 +463,9 @@ class ResourceProviderTest
|
| if (GetParam() == ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) {
|
| 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);
|
|
|
| @@ -666,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(
|
| @@ -1745,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);
|
| @@ -1757,8 +1757,9 @@ 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, _))
|
| + .WillOnce(Return(parent_texture_id));
|
| +
|
| parent_resource_provider->ReceiveFromChild(child_id, list);
|
| {
|
| parent_resource_provider->WaitSyncPointIfNeeded(list[0].id);
|
| @@ -1842,7 +1843,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.
|
| @@ -1876,14 +1877,15 @@ 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);
|
| + unsigned other_texture =
|
| + context()->createAndConsumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name);
|
| uint8_t test_data[4] = { 0 };
|
| context()->GetPixels(
|
| gfx::Size(1, 1), RGBA_8888, test_data);
|
| EXPECT_EQ(0, memcmp(data, test_data, sizeof(data)));
|
| - context()->produceTextureCHROMIUM(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);
|
| @@ -1927,14 +1929,15 @@ 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);
|
| + unsigned other_texture =
|
| + context()->createAndConsumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name);
|
| uint8_t test_data[4] = { 0 };
|
| context()->GetPixels(
|
| gfx::Size(1, 1), RGBA_8888, test_data);
|
| EXPECT_EQ(0, memcmp(data, test_data, sizeof(data)));
|
| - context()->produceTextureCHROMIUM(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);
|
| @@ -1955,8 +1958,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);
|
| }
|
|
|
| @@ -2264,7 +2267,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);
|
| @@ -2644,8 +2647,8 @@ class ResourceProviderTestTextureMailboxGLFilters
|
| 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);
|
| @@ -2674,12 +2677,12 @@ class ResourceProviderTestTextureMailboxGLFilters
|
| resource_provider->WaitSyncPointIfNeeded(id);
|
| Mock::VerifyAndClearExpectations(context);
|
|
|
| - // Using the texture does a consume of the mailbox.
|
| - EXPECT_CALL(*context, bindTexture(target, texture_id)).Times(2);
|
| - EXPECT_CALL(*context, consumeTextureCHROMIUM(target, _));
|
| + EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(target, _))
|
| + .WillOnce(Return(texture_id));
|
| + EXPECT_CALL(*context, bindTexture(target, texture_id));
|
|
|
| EXPECT_CALL(*context, insertSyncPoint()).Times(0);
|
| - EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0);
|
| + EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0);
|
|
|
| // The sampler will reset these if |mailbox_nearest_neighbor| does not
|
| // match |sampler_filter|.
|
| @@ -2698,10 +2701,10 @@ class ResourceProviderTestTextureMailboxGLFilters
|
| // 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);
|
| @@ -2786,15 +2789,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);
|
| @@ -2816,12 +2818,13 @@ TEST_P(ResourceProviderTest, TextureMailbox_GLTextureExternalOES) {
|
| resource_provider->WaitSyncPointIfNeeded(id);
|
| Mock::VerifyAndClearExpectations(context);
|
|
|
| - // Using the texture does a consume of the mailbox.
|
| - EXPECT_CALL(*context, bindTexture(target, texture_id));
|
| - EXPECT_CALL(*context, consumeTextureCHROMIUM(target, _));
|
| + unsigned texture_id = 1;
|
| +
|
| + EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(target, _))
|
| + .WillOnce(Return(texture_id));
|
|
|
| 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);
|
| @@ -2830,10 +2833,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);
|
| }
|
| }
|
|
|
| @@ -2867,8 +2870,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);
|
| @@ -2926,8 +2929,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);
|
|
|