| Index: content/browser/renderer_host/render_widget_host_impl.cc
|
| diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
|
| index a0e5792847b897233fff0f2798cf85794e706b0a..d43424b2738bfc08c2ffec08ba09168f79336be2 100644
|
| --- a/content/browser/renderer_host/render_widget_host_impl.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_impl.cc
|
| @@ -298,7 +298,6 @@ RenderWidgetHostImpl::RenderWidgetHostImpl(RenderWidgetHostDelegate* delegate,
|
| base::TimeDelta::FromMilliseconds(kNewContentRenderingDelayMs)),
|
| current_content_source_id_(0),
|
| monitoring_composition_info_(false),
|
| - compositor_frame_sink_binding_(this),
|
| weak_factory_(this) {
|
| CHECK(delegate_);
|
| CHECK_NE(MSG_ROUTING_NONE, routing_id_);
|
| @@ -414,10 +413,6 @@ RenderWidgetHostImpl* RenderWidgetHostImpl::From(RenderWidgetHost* rwh) {
|
| void RenderWidgetHostImpl::SetView(RenderWidgetHostViewBase* view) {
|
| if (view) {
|
| view_ = view->GetWeakPtr();
|
| - if (renderer_compositor_frame_sink_.is_bound()) {
|
| - view->DidCreateNewRendererCompositorFrameSink(
|
| - renderer_compositor_frame_sink_.get());
|
| - }
|
| // Views start out not needing begin frames, so only update its state
|
| // if the value has changed.
|
| if (needs_begin_frames_)
|
| @@ -563,7 +558,10 @@ bool RenderWidgetHostImpl::OnMessageReceived(const IPC::Message &msg) {
|
| OnUpdateScreenRectsAck)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_RequestMove, OnRequestMove)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_SetTooltipText, OnSetTooltipText)
|
| - IPC_MESSAGE_HANDLER(ViewHostMsg_BeginFrameDidNotSwap, BeginFrameDidNotSwap)
|
| + IPC_MESSAGE_HANDLER_GENERIC(ViewHostMsg_SwapCompositorFrame,
|
| + OnSwapCompositorFrame(msg))
|
| + IPC_MESSAGE_HANDLER(ViewHostMsg_BeginFrameDidNotSwap,
|
| + OnBeginFrameDidNotSwap)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateRect, OnUpdateRect)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_SetCursor, OnSetCursor)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_TextInputStateChanged,
|
| @@ -872,9 +870,6 @@ bool RenderWidgetHostImpl::CanPauseForPendingResizeOrRepaints() {
|
| if (!repaint_ack_pending_ && !resize_ack_pending_)
|
| return false;
|
|
|
| - if (!renderer_compositor_frame_sink_.is_bound())
|
| - return false;
|
| -
|
| return true;
|
| }
|
|
|
| @@ -1925,7 +1920,31 @@ void RenderWidgetHostImpl::OnRequestMove(const gfx::Rect& pos) {
|
| }
|
| }
|
|
|
| -void RenderWidgetHostImpl::BeginFrameDidNotSwap(const cc::BeginFrameAck& ack) {
|
| +bool RenderWidgetHostImpl::OnSwapCompositorFrame(const IPC::Message& message) {
|
| + // This trace event is used in
|
| + // chrome/browser/extensions/api/cast_streaming/performance_test.cc
|
| + TRACE_EVENT0("test_fps,benchmark", "OnSwapCompositorFrame");
|
| +
|
| + ViewHostMsg_SwapCompositorFrame::Param param;
|
| + if (!ViewHostMsg_SwapCompositorFrame::Read(&message, ¶m))
|
| + return false;
|
| + uint32_t compositor_frame_sink_id = std::get<0>(param);
|
| + cc::LocalSurfaceId local_surface_id = std::get<1>(param);
|
| + cc::CompositorFrame frame(std::move(std::get<2>(param)));
|
| +
|
| + if (compositor_frame_sink_id != last_compositor_frame_sink_id_) {
|
| + if (view_)
|
| + view_->DidCreateNewRendererCompositorFrameSink();
|
| + last_compositor_frame_sink_id_ = compositor_frame_sink_id;
|
| + }
|
| +
|
| + SubmitCompositorFrame(local_surface_id, std::move(frame));
|
| +
|
| + return true;
|
| +}
|
| +
|
| +void RenderWidgetHostImpl::OnBeginFrameDidNotSwap(
|
| + const cc::BeginFrameAck& ack) {
|
| // |has_damage| is not transmitted.
|
| cc::BeginFrameAck modified_ack = ack;
|
| modified_ack.has_damage = false;
|
| @@ -2362,6 +2381,13 @@ bool RenderWidgetHostImpl::GotResponseToLockMouseRequest(bool allowed) {
|
| return true;
|
| }
|
|
|
| +void RenderWidgetHostImpl::SendReclaimCompositorResources(
|
| + bool is_swap_ack,
|
| + const cc::ReturnedResourceArray& resources) {
|
| + Send(new ViewMsg_ReclaimCompositorResources(
|
| + routing_id_, last_compositor_frame_sink_id_, is_swap_ack, resources));
|
| +}
|
| +
|
| void RenderWidgetHostImpl::DelayedAutoResized() {
|
| gfx::Size new_size = new_auto_size_;
|
| // Clear the new_auto_size_ since the empty value is used as a flag to
|
| @@ -2522,31 +2548,6 @@ void RenderWidgetHostImpl::RequestCompositionUpdates(bool immediate_request,
|
| monitor_updates));
|
| }
|
|
|
| -void RenderWidgetHostImpl::RequestMojoCompositorFrameSink(
|
| - cc::mojom::MojoCompositorFrameSinkRequest request,
|
| - cc::mojom::MojoCompositorFrameSinkClientPtr client) {
|
| - if (compositor_frame_sink_binding_.is_bound())
|
| - compositor_frame_sink_binding_.Close();
|
| -#if defined(OS_MACOSX)
|
| - scoped_refptr<base::SingleThreadTaskRunner> task_runner =
|
| - ui::WindowResizeHelperMac::Get()->task_runner();
|
| - // In tests, task_runner might not be initialized.
|
| - if (task_runner)
|
| - compositor_frame_sink_binding_.Bind(std::move(request), task_runner);
|
| - else
|
| - compositor_frame_sink_binding_.Bind(std::move(request));
|
| -#else
|
| - compositor_frame_sink_binding_.Bind(std::move(request));
|
| -#endif
|
| - if (view_)
|
| - view_->DidCreateNewRendererCompositorFrameSink(client.get());
|
| - renderer_compositor_frame_sink_ = std::move(client);
|
| -}
|
| -
|
| -void RenderWidgetHostImpl::SetNeedsBeginFrame(bool needs_begin_frame) {
|
| - OnSetNeedsBeginFrames(needs_begin_frame);
|
| -}
|
| -
|
| void RenderWidgetHostImpl::SubmitCompositorFrame(
|
| const cc::LocalSurfaceId& local_surface_id,
|
| cc::CompositorFrame frame) {
|
| @@ -2603,7 +2604,7 @@ void RenderWidgetHostImpl::SubmitCompositorFrame(
|
| } else {
|
| cc::ReturnedResourceArray resources;
|
| cc::TransferableResource::ReturnResources(frame.resource_list, &resources);
|
| - renderer_compositor_frame_sink_->DidReceiveCompositorFrameAck(resources);
|
| + SendReclaimCompositorResources(true /* is_swap_ack */, resources);
|
| }
|
|
|
| // After navigation, if a frame belonging to the new page is received, stop
|
|
|