| Index: content/renderer/gpu/renderer_compositor_frame_sink.cc
|
| diff --git a/content/renderer/gpu/renderer_compositor_frame_sink.cc b/content/renderer/gpu/renderer_compositor_frame_sink.cc
|
| index 92547a90b705889c5b1a07ac9d0072274613909a..7c14ba3876f18c5018d8d3ab4b265cbf8ca87589 100644
|
| --- a/content/renderer/gpu/renderer_compositor_frame_sink.cc
|
| +++ b/content/renderer/gpu/renderer_compositor_frame_sink.cc
|
| @@ -36,27 +36,22 @@ RendererCompositorFrameSink::RendererCompositorFrameSink(
|
| cc::mojom::MojoCompositorFrameSinkPtrInfo sink_info,
|
| cc::mojom::MojoCompositorFrameSinkClientRequest sink_client_request,
|
| scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue)
|
| - : CompositorFrameSink(std::move(context_provider),
|
| - std::move(worker_context_provider),
|
| - gpu_memory_buffer_manager,
|
| - shared_bitmap_manager),
|
| + : ClientCompositorFrameSink(std::move(context_provider),
|
| + std::move(worker_context_provider),
|
| + gpu_memory_buffer_manager,
|
| + shared_bitmap_manager,
|
| + std::move(synthetic_begin_frame_source),
|
| + std::move(sink_info),
|
| + std::move(sink_client_request),
|
| + false /* enable_surface_synchronization */),
|
| compositor_frame_sink_filter_(
|
| RenderThreadImpl::current()->compositor_message_filter()),
|
| message_sender_(RenderThreadImpl::current()->sync_message_filter()),
|
| frame_swap_message_queue_(swap_frame_message_queue),
|
| - synthetic_begin_frame_source_(std::move(synthetic_begin_frame_source)),
|
| - external_begin_frame_source_(
|
| - synthetic_begin_frame_source_
|
| - ? nullptr
|
| - : base::MakeUnique<cc::ExternalBeginFrameSource>(this)),
|
| - routing_id_(routing_id),
|
| - sink_info_(std::move(sink_info)),
|
| - sink_client_request_(std::move(sink_client_request)),
|
| - sink_client_binding_(this) {
|
| + routing_id_(routing_id) {
|
| DCHECK(compositor_frame_sink_filter_);
|
| DCHECK(frame_swap_message_queue_);
|
| DCHECK(message_sender_);
|
| - thread_checker_.DetachFromThread();
|
| }
|
|
|
| RendererCompositorFrameSink::RendererCompositorFrameSink(
|
| @@ -66,80 +61,47 @@ RendererCompositorFrameSink::RendererCompositorFrameSink(
|
| cc::mojom::MojoCompositorFrameSinkPtrInfo sink_info,
|
| cc::mojom::MojoCompositorFrameSinkClientRequest sink_client_request,
|
| scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue)
|
| - : CompositorFrameSink(std::move(vulkan_context_provider)),
|
| + : ClientCompositorFrameSink(std::move(vulkan_context_provider),
|
| + std::move(synthetic_begin_frame_source),
|
| + std::move(sink_info),
|
| + std::move(sink_client_request),
|
| + false /* enable_surface_synchronization */),
|
| compositor_frame_sink_filter_(
|
| RenderThreadImpl::current()->compositor_message_filter()),
|
| message_sender_(RenderThreadImpl::current()->sync_message_filter()),
|
| frame_swap_message_queue_(swap_frame_message_queue),
|
| - synthetic_begin_frame_source_(std::move(synthetic_begin_frame_source)),
|
| - external_begin_frame_source_(
|
| - synthetic_begin_frame_source_
|
| - ? nullptr
|
| - : base::MakeUnique<cc::ExternalBeginFrameSource>(this)),
|
| - routing_id_(routing_id),
|
| - sink_info_(std::move(sink_info)),
|
| - sink_client_request_(std::move(sink_client_request)),
|
| - sink_client_binding_(this) {
|
| + routing_id_(routing_id) {
|
| DCHECK(compositor_frame_sink_filter_);
|
| DCHECK(frame_swap_message_queue_);
|
| DCHECK(message_sender_);
|
| - thread_checker_.DetachFromThread();
|
| }
|
|
|
| RendererCompositorFrameSink::~RendererCompositorFrameSink() = default;
|
|
|
| bool RendererCompositorFrameSink::BindToClient(
|
| cc::CompositorFrameSinkClient* client) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - if (!cc::CompositorFrameSink::BindToClient(client))
|
| + if (!ClientCompositorFrameSink::BindToClient(client))
|
| return false;
|
|
|
| - sink_.Bind(std::move(sink_info_));
|
| - sink_client_binding_.Bind(std::move(sink_client_request_));
|
| -
|
| - if (synthetic_begin_frame_source_)
|
| - client_->SetBeginFrameSource(synthetic_begin_frame_source_.get());
|
| - else
|
| - client_->SetBeginFrameSource(external_begin_frame_source_.get());
|
| -
|
| compositor_frame_sink_proxy_ = new RendererCompositorFrameSinkProxy(this);
|
| compositor_frame_sink_filter_handler_ =
|
| base::Bind(&RendererCompositorFrameSinkProxy::OnMessageReceived,
|
| compositor_frame_sink_proxy_);
|
| compositor_frame_sink_filter_->AddHandlerOnCompositorThread(
|
| routing_id_, compositor_frame_sink_filter_handler_);
|
| +
|
| return true;
|
| }
|
|
|
| void RendererCompositorFrameSink::DetachFromClient() {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - client_->SetBeginFrameSource(nullptr);
|
| - // Destroy the begin frame source on the same thread it was bound on.
|
| - // The CompositorFrameSink itself is destroyed on the main thread.
|
| - external_begin_frame_source_ = nullptr;
|
| - synthetic_begin_frame_source_ = nullptr;
|
| compositor_frame_sink_proxy_->ClearCompositorFrameSink();
|
| compositor_frame_sink_filter_->RemoveHandlerOnCompositorThread(
|
| routing_id_, compositor_frame_sink_filter_handler_);
|
| - sink_.reset();
|
| - sink_client_binding_.Close();
|
| - cc::CompositorFrameSink::DetachFromClient();
|
| + ClientCompositorFrameSink::DetachFromClient();
|
| }
|
|
|
| void RendererCompositorFrameSink::SubmitCompositorFrame(
|
| cc::CompositorFrame frame) {
|
| - // We should only submit CompositorFrames with valid BeginFrameAcks.
|
| - DCHECK(frame.metadata.begin_frame_ack.has_damage);
|
| - DCHECK_LE(cc::BeginFrameArgs::kStartingFrameNumber,
|
| - frame.metadata.begin_frame_ack.sequence_number);
|
| - auto new_surface_properties =
|
| - RenderWidgetSurfaceProperties::FromCompositorFrame(frame);
|
| - if (!local_surface_id_.is_valid() ||
|
| - new_surface_properties != current_surface_properties_) {
|
| - local_surface_id_ = id_allocator_.GenerateId();
|
| - current_surface_properties_ = new_surface_properties;
|
| - }
|
| -
|
| {
|
| std::unique_ptr<FrameSwapMessageQueue::SendMessageScope>
|
| send_message_scope =
|
| @@ -148,49 +110,24 @@ void RendererCompositorFrameSink::SubmitCompositorFrame(
|
| frame_swap_message_queue_->DrainMessages(&messages);
|
| std::vector<IPC::Message> messages_to_send;
|
| FrameSwapMessageQueue::TransferMessages(&messages, &messages_to_send);
|
| - uint32_t frame_token = 0;
|
| - if (!messages_to_send.empty())
|
| - frame_token = frame_swap_message_queue_->AllocateFrameToken();
|
| - frame.metadata.frame_token = frame_token;
|
| - sink_->SubmitCompositorFrame(local_surface_id_, std::move(frame));
|
| - if (frame_token) {
|
| + if (!messages_to_send.empty()) {
|
| + frame.metadata.frame_token =
|
| + frame_swap_message_queue_->AllocateFrameToken();
|
| message_sender_->Send(new ViewHostMsg_FrameSwapMessages(
|
| - routing_id_, frame_token, messages_to_send));
|
| + routing_id_, frame.metadata.frame_token, messages_to_send));
|
| }
|
| // ~send_message_scope.
|
| }
|
| + auto new_surface_properties =
|
| + RenderWidgetSurfaceProperties::FromCompositorFrame(frame);
|
| + ClientCompositorFrameSink::SubmitCompositorFrame(std::move(frame));
|
| + current_surface_properties_ = new_surface_properties;
|
| }
|
|
|
| -void RendererCompositorFrameSink::DidNotProduceFrame(
|
| - const cc::BeginFrameAck& ack) {
|
| - DCHECK(!ack.has_damage);
|
| - DCHECK_LE(cc::BeginFrameArgs::kStartingFrameNumber, ack.sequence_number);
|
| - sink_->DidNotProduceFrame(ack);
|
| -}
|
| -
|
| -void RendererCompositorFrameSink::OnMessageReceived(
|
| - const IPC::Message& message) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -}
|
| -
|
| -void RendererCompositorFrameSink::DidReceiveCompositorFrameAck(
|
| - const cc::ReturnedResourceArray& resources) {
|
| - ReclaimResources(resources);
|
| - client_->DidReceiveCompositorFrameAck();
|
| -}
|
| -
|
| -void RendererCompositorFrameSink::OnBeginFrame(const cc::BeginFrameArgs& args) {
|
| - if (external_begin_frame_source_)
|
| - external_begin_frame_source_->OnBeginFrame(args);
|
| -}
|
| -
|
| -void RendererCompositorFrameSink::ReclaimResources(
|
| - const cc::ReturnedResourceArray& resources) {
|
| - client_->ReclaimResources(resources);
|
| -}
|
| -
|
| -void RendererCompositorFrameSink::OnNeedsBeginFrames(bool needs_begin_frames) {
|
| - sink_->SetNeedsBeginFrame(needs_begin_frames);
|
| +bool RendererCompositorFrameSink::ShouldAllocateNewLocalSurfaceId(
|
| + const cc::CompositorFrame& frame) {
|
| + return current_surface_properties_ !=
|
| + RenderWidgetSurfaceProperties::FromCompositorFrame(frame);
|
| }
|
|
|
| } // namespace content
|
|
|