| Index: cc/resources/video_resource_updater.cc
|
| diff --git a/cc/resources/video_resource_updater.cc b/cc/resources/video_resource_updater.cc
|
| index b2f8629459f87bc5d8a65dba0787dd7460391948..08b81a7143042159825045c25babce3d6ab46541 100644
|
| --- a/cc/resources/video_resource_updater.cc
|
| +++ b/cc/resources/video_resource_updater.cc
|
| @@ -72,27 +72,31 @@ VideoFrameExternalResources::ResourceType ResourceTypeForVideoFrame(
|
| class SyncPointClientImpl : public media::VideoFrame::SyncPointClient {
|
| public:
|
| explicit SyncPointClientImpl(gpu::gles2::GLES2Interface* gl,
|
| - uint32 sync_point)
|
| - : gl_(gl), sync_point_(sync_point) {}
|
| + uint32 sync_point,
|
| + const gpu::SyncToken& sync_token)
|
| + : gl_(gl), sync_point_(sync_point), sync_token_(sync_token) {}
|
| ~SyncPointClientImpl() override {}
|
| uint32 InsertSyncPoint() override {
|
| if (sync_point_)
|
| return sync_point_;
|
| return gl_->InsertSyncPointCHROMIUM();
|
| }
|
| - void WaitSyncPoint(uint32 sync_point) override {
|
| - if (!sync_point)
|
| - return;
|
| - gl_->WaitSyncPointCHROMIUM(sync_point);
|
| - if (sync_point_) {
|
| - gl_->WaitSyncPointCHROMIUM(sync_point_);
|
| - sync_point_ = 0;
|
| + void WaitSyncPoint(uint32 sync_point,
|
| + const gpu::SyncToken& sync_token) override {
|
| + if (sync_point || sync_token.HasData()) {
|
| + gl_->WaitSyncPointCHROMIUM(sync_point, sync_token.GetConstData());
|
| + if (sync_point_ || sync_token_.HasData()) {
|
| + gl_->WaitSyncPointCHROMIUM(sync_point_, sync_token_.GetConstData());
|
| + sync_point_ = 0;
|
| + sync_token_.Clear();
|
| + }
|
| }
|
| }
|
|
|
| private:
|
| gpu::gles2::GLES2Interface* gl_;
|
| uint32 sync_point_;
|
| + gpu::SyncToken sync_token_;
|
| };
|
|
|
| } // namespace
|
| @@ -381,8 +385,8 @@ VideoFrameExternalResources VideoResourceUpdater::CreateForSoftwarePlanes(
|
| SetPlaneResourceUniqueId(video_frame.get(), i, &plane_resource);
|
| }
|
|
|
| - external_resources.mailboxes.push_back(
|
| - TextureMailbox(plane_resource.mailbox, GL_TEXTURE_2D, 0));
|
| + external_resources.mailboxes.push_back(TextureMailbox(
|
| + plane_resource.mailbox, GL_TEXTURE_2D, 0, gpu::SyncToken()));
|
| external_resources.release_callbacks.push_back(
|
| base::Bind(&RecycleResource, AsWeakPtr(), plane_resource.resource_id));
|
| }
|
| @@ -396,6 +400,7 @@ void VideoResourceUpdater::ReturnTexture(
|
| base::WeakPtr<VideoResourceUpdater> updater,
|
| const scoped_refptr<media::VideoFrame>& video_frame,
|
| uint32 sync_point,
|
| + const gpu::SyncToken& sync_token,
|
| bool lost_resource,
|
| BlockingTaskRunner* main_thread_task_runner) {
|
| // TODO(dshwang) this case should be forwarded to the decoder as lost
|
| @@ -406,7 +411,7 @@ void VideoResourceUpdater::ReturnTexture(
|
| // returned by the compositor and emit a WaitSyncPointCHROMIUM on
|
| // |video_frame|'s previous sync point using the current GL context.
|
| SyncPointClientImpl client(updater->context_provider_->ContextGL(),
|
| - sync_point);
|
| + sync_point, sync_token);
|
| video_frame->UpdateReleaseSyncPoint(&client);
|
| }
|
|
|
| @@ -434,7 +439,8 @@ VideoFrameExternalResources VideoResourceUpdater::CreateForHardwarePlanes(
|
| break;
|
| external_resources.mailboxes.push_back(
|
| TextureMailbox(mailbox_holder.mailbox, mailbox_holder.texture_target,
|
| - mailbox_holder.sync_point, video_frame->coded_size(),
|
| + mailbox_holder.sync_point, mailbox_holder.sync_token,
|
| + video_frame->coded_size(),
|
| video_frame->metadata()->IsTrue(
|
| media::VideoFrameMetadata::ALLOW_OVERLAY)));
|
| external_resources.release_callbacks.push_back(
|
| @@ -448,6 +454,7 @@ void VideoResourceUpdater::RecycleResource(
|
| base::WeakPtr<VideoResourceUpdater> updater,
|
| ResourceId resource_id,
|
| uint32 sync_point,
|
| + const gpu::SyncToken& sync_token,
|
| bool lost_resource,
|
| BlockingTaskRunner* main_thread_task_runner) {
|
| if (!updater.get()) {
|
| @@ -464,8 +471,9 @@ void VideoResourceUpdater::RecycleResource(
|
| return;
|
|
|
| ContextProvider* context_provider = updater->context_provider_;
|
| - if (context_provider && sync_point) {
|
| - context_provider->ContextGL()->WaitSyncPointCHROMIUM(sync_point);
|
| + if (context_provider && (sync_point || sync_token.HasData())) {
|
| + context_provider->ContextGL()->WaitSyncPointCHROMIUM(
|
| + sync_point, sync_token.GetConstData());
|
| }
|
|
|
| if (lost_resource) {
|
|
|