| Index: cc/resources/video_resource_updater.cc
|
| diff --git a/cc/resources/video_resource_updater.cc b/cc/resources/video_resource_updater.cc
|
| index c0d6923fcf11724b20d5a06714a14862bbec59d5..dea3176c43d65f9e59193049b459298e25c51f24 100644
|
| --- a/cc/resources/video_resource_updater.cc
|
| +++ b/cc/resources/video_resource_updater.cc
|
| @@ -27,15 +27,28 @@ const ResourceFormat kRGBResourceFormat = RGBA_8888;
|
|
|
| class SyncPointClientImpl : public media::VideoFrame::SyncPointClient {
|
| public:
|
| - explicit SyncPointClientImpl(gpu::gles2::GLES2Interface* gl) : gl_(gl) {}
|
| + explicit SyncPointClientImpl(gpu::gles2::GLES2Interface* gl,
|
| + uint32 sync_point)
|
| + : gl_(gl), sync_point_(sync_point) {}
|
| ~SyncPointClientImpl() override {}
|
| - uint32 InsertSyncPoint() override { return gl_->InsertSyncPointCHROMIUM(); }
|
| + 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;
|
| + }
|
| }
|
|
|
| private:
|
| gpu::gles2::GLES2Interface* gl_;
|
| + uint32 sync_point_;
|
| };
|
|
|
| } // namespace
|
| @@ -375,10 +388,11 @@ void VideoResourceUpdater::ReturnTexture(
|
| // resource.
|
| if (lost_resource || !updater.get())
|
| return;
|
| - // VideoFrame::UpdateReleaseSyncPoint() creates new sync point using the same
|
| - // GL context which created the given |sync_point|, so discard the
|
| - // |sync_point|.
|
| - SyncPointClientImpl client(updater->context_provider_->ContextGL());
|
| + // Update the release sync point in |video_frame| with |sync_point|
|
| + // 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);
|
| video_frame->UpdateReleaseSyncPoint(&client);
|
| }
|
|
|
|
|