| Index: cc/resources/resource_provider.cc
|
| diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
|
| index 15c4dee459fc207444321184f25a0809f50ae0b5..16eb6fb967c8c22640d4e6645f12b0596d468238 100644
|
| --- a/cc/resources/resource_provider.cc
|
| +++ b/cc/resources/resource_provider.cc
|
| @@ -565,6 +565,7 @@ void ResourceProvider::DeleteResourceInternal(ResourceMap::iterator it,
|
| if (resource->origin == Resource::EXTERNAL) {
|
| DCHECK(resource->mailbox.IsValid());
|
| GLuint sync_point = resource->mailbox.sync_point();
|
| + gpu::SyncToken sync_token;
|
| if (resource->type == RESOURCE_TYPE_GL_TEXTURE) {
|
| DCHECK(resource->mailbox.IsTexture());
|
| lost_resource |= lost_output_surface_;
|
| @@ -581,8 +582,8 @@ void ResourceProvider::DeleteResourceInternal(ResourceMap::iterator it,
|
| resource->shared_bitmap = nullptr;
|
| resource->pixels = nullptr;
|
| }
|
| - resource->release_callback_impl.Run(
|
| - sync_point, lost_resource, blocking_main_thread_task_runner_);
|
| + resource->release_callback_impl.Run(sync_point, sync_token, lost_resource,
|
| + blocking_main_thread_task_runner_);
|
| }
|
| if (resource->gl_id) {
|
| GLES2Interface* gl = ContextGL();
|
| @@ -693,6 +694,7 @@ const ResourceProvider::Resource* ResourceProvider::LockForRead(ResourceId id) {
|
| // Mailbox sync_points must be processed by a call to
|
| // WaitSyncPointIfNeeded() prior to calling LockForRead().
|
| DCHECK(!resource->mailbox.sync_point());
|
| + DCHECK(!resource->mailbox.sync_token().HasData());
|
|
|
| GLES2Interface* gl = ContextGL();
|
| DCHECK(gl);
|
| @@ -1142,8 +1144,9 @@ void ResourceProvider::PrepareSendToParent(const ResourceIdArray& resources,
|
| ++it) {
|
| TransferableResource resource;
|
| TransferResource(gl, *it, &resource);
|
| - if (!resource.mailbox_holder.sync_point && !resource.is_software)
|
| - need_sync_point = true;
|
| + need_sync_point |= (!resource.mailbox_holder.sync_point &&
|
| + !resource.mailbox_holder.sync_token.HasData() &&
|
| + !resource.is_software);
|
| ++resources_.find(*it)->second.exported_count;
|
| list->push_back(resource);
|
| }
|
| @@ -1198,9 +1201,9 @@ void ResourceProvider::ReceiveFromChild(
|
| local_id, Resource(0, it->size, Resource::DELEGATED,
|
| it->mailbox_holder.texture_target, it->filter,
|
| TEXTURE_HINT_IMMUTABLE, it->format));
|
| - resource->mailbox = TextureMailbox(it->mailbox_holder.mailbox,
|
| - it->mailbox_holder.texture_target,
|
| - it->mailbox_holder.sync_point);
|
| + resource->mailbox = TextureMailbox(
|
| + it->mailbox_holder.mailbox, it->mailbox_holder.texture_target,
|
| + it->mailbox_holder.sync_point, it->mailbox_holder.sync_token);
|
| resource->read_lock_fences_enabled = it->read_lock_fences_enabled;
|
| resource->is_overlay_candidate = it->is_overlay_candidate;
|
| }
|
| @@ -1258,14 +1261,16 @@ void ResourceProvider::ReceiveReturnsFromParent(
|
| if (resource->exported_count)
|
| continue;
|
|
|
| - if (returned.sync_point) {
|
| + if (returned.sync_point || returned.sync_token.HasData()) {
|
| DCHECK(!resource->has_shared_bitmap_id);
|
| if (resource->origin == Resource::INTERNAL) {
|
| DCHECK(resource->gl_id);
|
| - gl->WaitSyncPointCHROMIUM(returned.sync_point);
|
| + gl->WaitSyncPointCHROMIUM(returned.sync_point,
|
| + returned.sync_token.GetConstData());
|
| } else {
|
| DCHECK(!resource->gl_id);
|
| - resource->mailbox.set_sync_point(returned.sync_point);
|
| + resource->mailbox.set_sync_point(returned.sync_point,
|
| + returned.sync_token);
|
| }
|
| }
|
|
|
| @@ -1338,7 +1343,8 @@ void ResourceProvider::TransferResource(GLES2Interface* gl,
|
| resource->mailbox_holder.mailbox = source->mailbox.mailbox();
|
| resource->mailbox_holder.texture_target = source->mailbox.target();
|
| resource->mailbox_holder.sync_point = source->mailbox.sync_point();
|
| - source->mailbox.set_sync_point(0);
|
| + resource->mailbox_holder.sync_token = source->mailbox.sync_token();
|
| + source->mailbox.set_sync_point(0, gpu::SyncToken());
|
| }
|
| }
|
|
|
| @@ -1407,8 +1413,10 @@ void ResourceProvider::DeleteAndReturnUnusedResourcesToChild(
|
| ReturnedResource returned;
|
| returned.id = child_id;
|
| returned.sync_point = resource.mailbox.sync_point();
|
| - if (!returned.sync_point && resource.type == RESOURCE_TYPE_GL_TEXTURE)
|
| - need_sync_point = true;
|
| + returned.sync_token = resource.mailbox.sync_token();
|
| + need_sync_point |=
|
| + (!returned.sync_point && !returned.sync_token.HasData() &&
|
| + resource.type == RESOURCE_TYPE_GL_TEXTURE);
|
| returned.count = resource.imported_count;
|
| returned.lost = is_lost;
|
| to_return.push_back(returned);
|
| @@ -1553,13 +1561,15 @@ void ResourceProvider::WaitSyncPointIfNeeded(ResourceId id) {
|
| DCHECK(resource->allocated);
|
| if (resource->type != RESOURCE_TYPE_GL_TEXTURE || resource->gl_id)
|
| return;
|
| - if (!resource->mailbox.sync_point())
|
| - return;
|
| - DCHECK(resource->mailbox.IsValid());
|
| - GLES2Interface* gl = ContextGL();
|
| - DCHECK(gl);
|
| - gl->WaitSyncPointCHROMIUM(resource->mailbox.sync_point());
|
| - resource->mailbox.set_sync_point(0);
|
| + if (resource->mailbox.sync_point() ||
|
| + resource->mailbox.sync_token().HasData()) {
|
| + DCHECK(resource->mailbox.IsValid());
|
| + GLES2Interface* gl = ContextGL();
|
| + DCHECK(gl);
|
| + gl->WaitSyncPointCHROMIUM(resource->mailbox.sync_point(),
|
| + resource->mailbox.sync_token().GetConstData());
|
| + resource->mailbox.set_sync_point(0, gpu::SyncToken());
|
| + }
|
| }
|
|
|
| GLint ResourceProvider::GetActiveTextureUnit(GLES2Interface* gl) {
|
|
|