| Index: content/renderer/gpu/compositor_output_surface.cc
|
| diff --git a/content/renderer/gpu/compositor_output_surface.cc b/content/renderer/gpu/compositor_output_surface.cc
|
| index de11e048870d5df9c093e4b0caf36c5c17496122..ae668f5404afe6073873c348e6511b28c71d92c8 100644
|
| --- a/content/renderer/gpu/compositor_output_surface.cc
|
| +++ b/content/renderer/gpu/compositor_output_surface.cc
|
| @@ -29,6 +29,7 @@ namespace content {
|
| CompositorOutputSurface::CompositorOutputSurface(
|
| int32_t routing_id,
|
| uint32_t output_surface_id,
|
| + std::unique_ptr<cc::BeginFrameSource> begin_frame_source,
|
| scoped_refptr<cc::ContextProvider> context_provider,
|
| scoped_refptr<cc::ContextProvider> worker_context_provider,
|
| scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue)
|
| @@ -40,16 +41,19 @@ CompositorOutputSurface::CompositorOutputSurface(
|
| RenderThreadImpl::current()->compositor_message_filter()),
|
| message_sender_(RenderThreadImpl::current()->sync_message_filter()),
|
| frame_swap_message_queue_(swap_frame_message_queue),
|
| + begin_frame_source_(std::move(begin_frame_source)),
|
| routing_id_(routing_id) {
|
| DCHECK(output_surface_filter_);
|
| DCHECK(frame_swap_message_queue_);
|
| DCHECK(message_sender_);
|
| + DCHECK(begin_frame_source_);
|
| capabilities_.delegated_rendering = true;
|
| }
|
|
|
| CompositorOutputSurface::CompositorOutputSurface(
|
| int32_t routing_id,
|
| uint32_t output_surface_id,
|
| + std::unique_ptr<cc::BeginFrameSource> begin_frame_source,
|
| scoped_refptr<cc::VulkanContextProvider> vulkan_context_provider,
|
| scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue)
|
| : OutputSurface(std::move(vulkan_context_provider)),
|
| @@ -58,10 +62,12 @@ CompositorOutputSurface::CompositorOutputSurface(
|
| RenderThreadImpl::current()->compositor_message_filter()),
|
| message_sender_(RenderThreadImpl::current()->sync_message_filter()),
|
| frame_swap_message_queue_(swap_frame_message_queue),
|
| + begin_frame_source_(std::move(begin_frame_source)),
|
| routing_id_(routing_id) {
|
| DCHECK(output_surface_filter_);
|
| DCHECK(frame_swap_message_queue_);
|
| DCHECK(message_sender_);
|
| + DCHECK(begin_frame_source_);
|
| capabilities_.delegated_rendering = true;
|
| }
|
|
|
| @@ -72,6 +78,9 @@ bool CompositorOutputSurface::BindToClient(
|
| if (!cc::OutputSurface::BindToClient(client))
|
| return false;
|
|
|
| + DCHECK(begin_frame_source_);
|
| + client_->SetBeginFrameSource(begin_frame_source_.get());
|
| +
|
| output_surface_proxy_ = new CompositorOutputSurfaceProxy(this);
|
| output_surface_filter_handler_ =
|
| base::Bind(&CompositorOutputSurfaceProxy::OnMessageReceived,
|
| @@ -94,6 +103,11 @@ bool CompositorOutputSurface::BindToClient(
|
| void CompositorOutputSurface::DetachFromClient() {
|
| if (!HasClient())
|
| return;
|
| + client_->SetBeginFrameSource(nullptr);
|
| + // Destroy the begin frame source on the same thread it was bound on.
|
| + // The OutputSurface itself is destroyed on the main thread.
|
| + begin_frame_source_ = nullptr;
|
| +
|
| if (output_surface_proxy_) {
|
| output_surface_proxy_->ClearOutputSurface();
|
| output_surface_filter_->RemoveHandlerOnCompositorThread(
|
|
|