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 |