| Index: cc/resources/resource_provider_unittest.cc
|
| diff --git a/cc/resources/resource_provider_unittest.cc b/cc/resources/resource_provider_unittest.cc
|
| index 3374e85a384d29da461c0a66846035363e52fbee..1a0e6852955e271ed69551fe1321e14f998a7944 100644
|
| --- a/cc/resources/resource_provider_unittest.cc
|
| +++ b/cc/resources/resource_provider_unittest.cc
|
| @@ -39,7 +39,6 @@
|
| using testing::Mock;
|
| using testing::NiceMock;
|
| using testing::Return;
|
| -using testing::SetArgPointee;
|
| using testing::StrictMock;
|
| using testing::_;
|
|
|
| @@ -104,7 +103,6 @@ class TextureStateTrackingContext : public TestWebGraphicsContext3D {
|
| MOCK_METHOD2(bindTexture, void(GLenum target, GLuint texture));
|
| MOCK_METHOD3(texParameteri, void(GLenum target, GLenum pname, GLint param));
|
| MOCK_METHOD1(waitSyncToken, void(const GLbyte* sync_token));
|
| - MOCK_METHOD0(insertSyncPoint, GLuint(void));
|
| MOCK_METHOD3(produceTextureDirectCHROMIUM,
|
| void(GLuint texture, GLenum target, const GLbyte* mailbox));
|
| MOCK_METHOD2(createAndConsumeTextureCHROMIUM,
|
| @@ -116,7 +114,21 @@ class TextureStateTrackingContext : public TestWebGraphicsContext3D {
|
| base::AutoLock lock(namespace_->lock);
|
| return namespace_->next_texture_id++;
|
| }
|
| +
|
| void RetireTextureId(GLuint) override {}
|
| +
|
| + GLuint64 insertFenceSync() override { return next_fence_sync_++; }
|
| +
|
| + void genSyncToken(GLuint64 fence_sync, GLbyte* sync_token) override {
|
| + gpu::SyncToken sync_token_data(gpu::CommandBufferNamespace::GPU_IO, 0,
|
| + 0x123, fence_sync);
|
| + sync_token_data.SetVerifyFlush();
|
| + memcpy(sync_token, &sync_token_data, sizeof(sync_token_data));
|
| + }
|
| +
|
| + GLuint64 GetNextFenceSync() const { return next_fence_sync_; }
|
| +
|
| + GLuint64 next_fence_sync_ = 1;
|
| };
|
|
|
| // Shared data between multiple ResourceProviderContext. This contains mailbox
|
| @@ -127,7 +139,7 @@ class ContextSharedData {
|
| return make_scoped_ptr(new ContextSharedData());
|
| }
|
|
|
| - uint32_t InsertSyncPoint() { return next_sync_point_++; }
|
| + uint32_t InsertFenceSync() { return next_fence_sync_++; }
|
|
|
| void GenMailbox(GLbyte* mailbox) {
|
| memset(mailbox, 0, GL_MAILBOX_SIZE_CHROMIUM);
|
| @@ -165,9 +177,9 @@ class ContextSharedData {
|
| }
|
|
|
| private:
|
| - ContextSharedData() : next_sync_point_(1), next_mailbox_(1) {}
|
| + ContextSharedData() : next_fence_sync_(1), next_mailbox_(1) {}
|
|
|
| - uint32_t next_sync_point_;
|
| + uint64_t next_fence_sync_;
|
| unsigned next_mailbox_;
|
| typedef base::hash_map<unsigned, scoped_refptr<TestTexture>> TextureMap;
|
| TextureMap textures_;
|
| @@ -182,19 +194,40 @@ class ResourceProviderContext : public TestWebGraphicsContext3D {
|
| }
|
|
|
| GLuint insertSyncPoint() override {
|
| - uint32_t sync_point = shared_data_->InsertSyncPoint();
|
| + const uint32_t sync_point =
|
| + static_cast<uint32_t>(shared_data_->InsertFenceSync());
|
| + gpu::SyncToken sync_token_data(sync_point);
|
| +
|
| // Commit the produceTextureCHROMIUM calls at this point, so that
|
| // they're associated with the sync point.
|
| for (const scoped_ptr<PendingProduceTexture>& pending_texture :
|
| pending_produce_textures_) {
|
| - shared_data_->ProduceTexture(pending_texture->mailbox,
|
| - gpu::SyncToken(sync_point),
|
| + shared_data_->ProduceTexture(pending_texture->mailbox, sync_token_data,
|
| pending_texture->texture);
|
| }
|
| pending_produce_textures_.clear();
|
| return sync_point;
|
| }
|
|
|
| + GLuint64 insertFenceSync() override {
|
| + return shared_data_->InsertFenceSync();
|
| + }
|
| +
|
| + void genSyncToken(GLuint64 fence_sync, GLbyte* sync_token) override {
|
| + gpu::SyncToken sync_token_data(gpu::CommandBufferNamespace::GPU_IO, 0,
|
| + 0x123, fence_sync);
|
| + sync_token_data.SetVerifyFlush();
|
| + // Commit the produceTextureCHROMIUM calls at this point, so that
|
| + // they're associated with the sync point.
|
| + for (const scoped_ptr<PendingProduceTexture>& pending_texture :
|
| + pending_produce_textures_) {
|
| + shared_data_->ProduceTexture(pending_texture->mailbox, sync_token_data,
|
| + pending_texture->texture);
|
| + }
|
| + pending_produce_textures_.clear();
|
| + memcpy(sync_token, &sync_token_data, sizeof(sync_token_data));
|
| + }
|
| +
|
| void waitSyncToken(const GLbyte* sync_token) override {
|
| gpu::SyncToken sync_token_data;
|
| if (sync_token)
|
| @@ -280,7 +313,7 @@ class ResourceProviderContext : public TestWebGraphicsContext3D {
|
| 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
|
| + // sync token, 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));
|
| @@ -477,7 +510,8 @@ class ResourceProviderTest
|
| child_context_->genMailboxCHROMIUM(gpu_mailbox.name);
|
| child_context_->produceTextureDirectCHROMIUM(texture, GL_TEXTURE_2D,
|
| gpu_mailbox.name);
|
| - *sync_token = gpu::SyncToken(child_context_->insertSyncPoint());
|
| + child_context_->genSyncToken(child_context_->insertFenceSync(),
|
| + sync_token->GetData());
|
| EXPECT_TRUE(sync_token->HasData());
|
|
|
| scoped_ptr<SharedBitmap> shared_bitmap;
|
| @@ -633,7 +667,10 @@ TEST_P(ResourceProviderTest, TransferGLResources) {
|
| child_context_->genMailboxCHROMIUM(external_mailbox.name);
|
| child_context_->produceTextureDirectCHROMIUM(
|
| external_texture_id, GL_TEXTURE_EXTERNAL_OES, external_mailbox.name);
|
| - const gpu::SyncToken external_sync_token(child_context_->insertSyncPoint());
|
| + gpu::SyncToken external_sync_token;
|
| + child_context_->genSyncToken(child_context_->insertFenceSync(),
|
| + external_sync_token.GetData());
|
| + EXPECT_TRUE(external_sync_token.HasData());
|
| ResourceId id4 = child_resource_provider_->CreateResourceFromTextureMailbox(
|
| TextureMailbox(external_mailbox, external_sync_token,
|
| GL_TEXTURE_EXTERNAL_OES),
|
| @@ -889,7 +926,10 @@ TEST_P(ResourceProviderTestNoSyncToken, TransferGLResources) {
|
| child_context_->genMailboxCHROMIUM(external_mailbox.name);
|
| child_context_->produceTextureDirectCHROMIUM(
|
| external_texture_id, GL_TEXTURE_EXTERNAL_OES, external_mailbox.name);
|
| - const gpu::SyncToken external_sync_token(child_context_->insertSyncPoint());
|
| + gpu::SyncToken external_sync_token;
|
| + child_context_->genSyncToken(child_context_->insertFenceSync(),
|
| + external_sync_token.GetData());
|
| + EXPECT_TRUE(external_sync_token.HasData());
|
| ResourceId id3 = child_resource_provider_->CreateResourceFromTextureMailbox(
|
| TextureMailbox(external_mailbox, external_sync_token,
|
| GL_TEXTURE_EXTERNAL_OES),
|
| @@ -1961,7 +2001,6 @@ class ResourceProviderTestTextureFilters : public ResourceProviderTest {
|
|
|
| EXPECT_CALL(*child_context,
|
| produceTextureDirectCHROMIUM(_, GL_TEXTURE_2D, _));
|
| - EXPECT_CALL(*child_context, insertSyncPoint());
|
| child_resource_provider->PrepareSendToParent(resource_ids_to_transfer,
|
| &list);
|
| Mock::VerifyAndClearExpectations(child_context);
|
| @@ -2019,7 +2058,6 @@ class ResourceProviderTestTextureFilters : public ResourceProviderTest {
|
| // Transfer resources back from the parent to the child. Set no resources
|
| // as being in use.
|
| ResourceProvider::ResourceIdSet no_resources;
|
| - EXPECT_CALL(*parent_context, insertSyncPoint());
|
| parent_resource_provider->DeclareUsedResourcesFromChild(child_id,
|
| no_resources);
|
| Mock::VerifyAndClearExpectations(parent_context);
|
| @@ -2059,7 +2097,9 @@ TEST_P(ResourceProviderTest, TransferMailboxResources) {
|
| gpu::Mailbox mailbox;
|
| context()->genMailboxCHROMIUM(mailbox.name);
|
| context()->produceTextureDirectCHROMIUM(texture, GL_TEXTURE_2D, mailbox.name);
|
| - gpu::SyncToken sync_token(context()->insertSyncPoint());
|
| + gpu::SyncToken sync_token;
|
| + context()->genSyncToken(context()->insertFenceSync(), sync_token.GetData());
|
| + EXPECT_TRUE(sync_token.HasData());
|
|
|
| // All the logic below assumes that the sync token releases are all positive.
|
| EXPECT_LT(0u, sync_token.release_count());
|
| @@ -2101,8 +2141,9 @@ TEST_P(ResourceProviderTest, TransferMailboxResources) {
|
| context()->produceTextureDirectCHROMIUM(other_texture, GL_TEXTURE_2D,
|
| mailbox.name);
|
| context()->deleteTexture(other_texture);
|
| - list[0].mailbox_holder.sync_token =
|
| - gpu::SyncToken(context()->insertSyncPoint());
|
| + context()->genSyncToken(context()->insertFenceSync(),
|
| + list[0].mailbox_holder.sync_token.GetData());
|
| + EXPECT_TRUE(list[0].mailbox_holder.sync_token.HasData());
|
|
|
| // Receive the resource, then delete it, expect the sync points to be
|
| // consistent.
|
| @@ -2155,9 +2196,9 @@ TEST_P(ResourceProviderTest, TransferMailboxResources) {
|
| context()->produceTextureDirectCHROMIUM(other_texture, GL_TEXTURE_2D,
|
| mailbox.name);
|
| context()->deleteTexture(other_texture);
|
| - list[0].mailbox_holder.sync_token =
|
| - gpu::SyncToken(context()->insertSyncPoint());
|
| - EXPECT_LT(0u, list[0].mailbox_holder.sync_token.release_count());
|
| + context()->genSyncToken(context()->insertFenceSync(),
|
| + list[0].mailbox_holder.sync_token.GetData());
|
| + EXPECT_TRUE(list[0].mailbox_holder.sync_token.HasData());
|
|
|
| // Delete the resource, which shouldn't do anything.
|
| resource_provider_->DeleteResource(resource);
|
| @@ -2490,7 +2531,8 @@ TEST_P(ResourceProviderTest, LostContext) {
|
| gpu::Mailbox mailbox;
|
| context()->genMailboxCHROMIUM(mailbox.name);
|
| context()->produceTextureDirectCHROMIUM(texture, GL_TEXTURE_2D, mailbox.name);
|
| - gpu::SyncToken sync_token(context()->insertSyncPoint());
|
| + gpu::SyncToken sync_token;
|
| + context()->genSyncToken(context()->insertFenceSync(), sync_token.GetData());
|
|
|
| EXPECT_TRUE(sync_token.HasData());
|
|
|
| @@ -2810,12 +2852,13 @@ class ResourceProviderTestTextureMailboxGLFilters
|
| use_image_texture_targets_));
|
|
|
| unsigned texture_id = 1;
|
| - gpu::SyncToken sync_token(30);
|
| + gpu::SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0, 0x12,
|
| + 0x34);
|
| unsigned target = GL_TEXTURE_2D;
|
| + const GLuint64 current_fence_sync = context->GetNextFenceSync();
|
|
|
| EXPECT_CALL(*context, bindTexture(_, _)).Times(0);
|
| EXPECT_CALL(*context, waitSyncToken(_)).Times(0);
|
| - EXPECT_CALL(*context, insertSyncPoint()).Times(0);
|
| EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0);
|
| EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0);
|
|
|
| @@ -2835,6 +2878,7 @@ class ResourceProviderTestTextureMailboxGLFilters
|
| ResourceId id = resource_provider->CreateResourceFromTextureMailbox(
|
| mailbox, std::move(callback));
|
| EXPECT_NE(0u, id);
|
| + EXPECT_EQ(current_fence_sync, context->GetNextFenceSync());
|
|
|
| Mock::VerifyAndClearExpectations(context);
|
|
|
| @@ -2848,7 +2892,6 @@ class ResourceProviderTestTextureMailboxGLFilters
|
| .WillOnce(Return(texture_id));
|
| EXPECT_CALL(*context, bindTexture(target, texture_id));
|
|
|
| - EXPECT_CALL(*context, insertSyncPoint()).Times(0);
|
| EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0);
|
|
|
| // The sampler will reset these if |mailbox_nearest_neighbor| does not
|
| @@ -2863,11 +2906,11 @@ class ResourceProviderTestTextureMailboxGLFilters
|
| ResourceProvider::ScopedSamplerGL lock(
|
| resource_provider.get(), id, sampler_filter);
|
| Mock::VerifyAndClearExpectations(context);
|
| + EXPECT_EQ(current_fence_sync, context->GetNextFenceSync());
|
|
|
| // When done with it, a sync point should be inserted, but no produce is
|
| // necessary.
|
| EXPECT_CALL(*context, bindTexture(_, _)).Times(0);
|
| - EXPECT_CALL(*context, insertSyncPoint());
|
| EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0);
|
|
|
| EXPECT_CALL(*context, waitSyncToken(_)).Times(0);
|
| @@ -2875,7 +2918,7 @@ class ResourceProviderTestTextureMailboxGLFilters
|
| }
|
|
|
| resource_provider->DeleteResource(id);
|
| - EXPECT_FALSE(release_sync_token.HasData());
|
| + EXPECT_TRUE(release_sync_token.HasData());
|
| EXPECT_FALSE(lost_resource);
|
| EXPECT_EQ(main_thread_task_runner, mailbox_task_runner);
|
| }
|
| @@ -2952,12 +2995,12 @@ TEST_P(ResourceProviderTest, TextureMailbox_GLTextureExternalOES) {
|
| gpu_memory_buffer_manager_.get(), NULL, 0, 1,
|
| use_gpu_memory_buffer_resources_, use_image_texture_targets_));
|
|
|
| - gpu::SyncToken sync_token(30);
|
| + gpu::SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0, 0x12, 0x34);
|
| + const GLuint64 current_fence_sync = context->GetNextFenceSync();
|
| unsigned target = GL_TEXTURE_EXTERNAL_OES;
|
|
|
| EXPECT_CALL(*context, bindTexture(_, _)).Times(0);
|
| EXPECT_CALL(*context, waitSyncToken(_)).Times(0);
|
| - EXPECT_CALL(*context, insertSyncPoint()).Times(0);
|
| EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0);
|
| EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0);
|
|
|
| @@ -2971,6 +3014,7 @@ TEST_P(ResourceProviderTest, TextureMailbox_GLTextureExternalOES) {
|
| ResourceId id = resource_provider->CreateResourceFromTextureMailbox(
|
| mailbox, std::move(callback));
|
| EXPECT_NE(0u, id);
|
| + EXPECT_EQ(current_fence_sync, context->GetNextFenceSync());
|
|
|
| Mock::VerifyAndClearExpectations(context);
|
|
|
| @@ -2985,7 +3029,6 @@ TEST_P(ResourceProviderTest, TextureMailbox_GLTextureExternalOES) {
|
| EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(target, _))
|
| .WillOnce(Return(texture_id));
|
|
|
| - EXPECT_CALL(*context, insertSyncPoint()).Times(0);
|
| EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0);
|
|
|
| ResourceProvider::ScopedReadLockGL lock(resource_provider.get(), id);
|
| @@ -2994,7 +3037,6 @@ TEST_P(ResourceProviderTest, TextureMailbox_GLTextureExternalOES) {
|
| // When done with it, a sync point should be inserted, but no produce is
|
| // necessary.
|
| EXPECT_CALL(*context, bindTexture(_, _)).Times(0);
|
| - EXPECT_CALL(*context, insertSyncPoint());
|
| EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0);
|
|
|
| EXPECT_CALL(*context, waitSyncToken(_)).Times(0);
|
| @@ -3022,12 +3064,12 @@ TEST_P(ResourceProviderTest,
|
| gpu_memory_buffer_manager_.get(), NULL, 0, 1,
|
| use_gpu_memory_buffer_resources_, use_image_texture_targets_));
|
|
|
| - gpu::SyncToken sync_token(30);
|
| + gpu::SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0, 0x12, 0x34);
|
| + const GLuint64 current_fence_sync = context->GetNextFenceSync();
|
| unsigned target = GL_TEXTURE_2D;
|
|
|
| EXPECT_CALL(*context, bindTexture(_, _)).Times(0);
|
| EXPECT_CALL(*context, waitSyncToken(_)).Times(0);
|
| - EXPECT_CALL(*context, insertSyncPoint()).Times(0);
|
| EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0);
|
| EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0);
|
|
|
| @@ -3041,6 +3083,7 @@ TEST_P(ResourceProviderTest,
|
| ResourceId id = resource_provider->CreateResourceFromTextureMailbox(
|
| mailbox, std::move(callback));
|
| EXPECT_NE(0u, id);
|
| + EXPECT_EQ(current_fence_sync, context->GetNextFenceSync());
|
|
|
| Mock::VerifyAndClearExpectations(context);
|
|
|
| @@ -3077,11 +3120,11 @@ TEST_P(ResourceProviderTest, TextureMailbox_WaitSyncTokenIfNeeded_NoSyncToken) {
|
| use_gpu_memory_buffer_resources_, use_image_texture_targets_));
|
|
|
| gpu::SyncToken sync_token;
|
| + const GLuint64 current_fence_sync = context->GetNextFenceSync();
|
| unsigned target = GL_TEXTURE_2D;
|
|
|
| EXPECT_CALL(*context, bindTexture(_, _)).Times(0);
|
| EXPECT_CALL(*context, waitSyncToken(_)).Times(0);
|
| - EXPECT_CALL(*context, insertSyncPoint()).Times(0);
|
| EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0);
|
| EXPECT_CALL(*context, createAndConsumeTextureCHROMIUM(_, _)).Times(0);
|
|
|
| @@ -3095,6 +3138,7 @@ TEST_P(ResourceProviderTest, TextureMailbox_WaitSyncTokenIfNeeded_NoSyncToken) {
|
| ResourceId id = resource_provider->CreateResourceFromTextureMailbox(
|
| mailbox, std::move(callback));
|
| EXPECT_NE(0u, id);
|
| + EXPECT_EQ(current_fence_sync, context->GetNextFenceSync());
|
|
|
| Mock::VerifyAndClearExpectations(context);
|
|
|
|
|