| Index: content/browser/android/synchronous_compositor_host.cc
|
| diff --git a/content/browser/android/synchronous_compositor_host.cc b/content/browser/android/synchronous_compositor_host.cc
|
| index 288bb586a276132d8520c5c41dcbafc021aa2b33..181a5addd12905ca1d1694d09713775df847a5cf 100644
|
| --- a/content/browser/android/synchronous_compositor_host.cc
|
| +++ b/content/browser/android/synchronous_compositor_host.cc
|
| @@ -91,11 +91,23 @@ bool SynchronousCompositorHost::OnMessageReceived(const IPC::Message& message) {
|
| IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_OutputSurfaceCreated,
|
| OutputSurfaceCreated)
|
| IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_UpdateState, ProcessCommonParams)
|
| + IPC_MESSAGE_HANDLER_GENERIC(SyncCompositorHostMsg_ReturnFrame,
|
| + DemandDrawHwReceiveFrame(message))
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| IPC_END_MESSAGE_MAP()
|
| return handled;
|
| }
|
|
|
| +void SynchronousCompositorHost::DemandDrawHwAsync(
|
| + const gfx::Size& viewport_size,
|
| + const gfx::Rect& viewport_rect_for_tile_priority,
|
| + const gfx::Transform& transform_for_tile_priority) {
|
| + SyncCompositorDemandDrawHwParams params(viewport_size,
|
| + viewport_rect_for_tile_priority,
|
| + transform_for_tile_priority);
|
| + sender_->Send(new SyncCompositorMsg_DemandDrawHwAsync(routing_id_, params));
|
| +}
|
| +
|
| SynchronousCompositor::Frame SynchronousCompositorHost::DemandDrawHw(
|
| const gfx::Size& viewport_size,
|
| const gfx::Rect& viewport_rect_for_tile_priority,
|
| @@ -103,15 +115,40 @@ SynchronousCompositor::Frame SynchronousCompositorHost::DemandDrawHw(
|
| SyncCompositorDemandDrawHwParams params(viewport_size,
|
| viewport_rect_for_tile_priority,
|
| transform_for_tile_priority);
|
| - SynchronousCompositor::Frame frame;
|
| - frame.frame.reset(new cc::CompositorFrame);
|
| + uint32_t output_surface_id;
|
| + cc::CompositorFrame compositor_frame;
|
| SyncCompositorCommonRendererParams common_renderer_params;
|
| +
|
| if (!sender_->Send(new SyncCompositorMsg_DemandDrawHw(
|
| - routing_id_, params, &common_renderer_params,
|
| - &frame.output_surface_id, frame.frame.get()))) {
|
| + routing_id_, params, &common_renderer_params, &output_surface_id,
|
| + &compositor_frame))) {
|
| return SynchronousCompositor::Frame();
|
| }
|
| +
|
| ProcessCommonParams(common_renderer_params);
|
| +
|
| + return ProcessHardwareFrame(output_surface_id, std::move(compositor_frame));
|
| +}
|
| +
|
| +bool SynchronousCompositorHost::DemandDrawHwReceiveFrame(
|
| + const IPC::Message& message) {
|
| + SyncCompositorHostMsg_ReturnFrame::Param param;
|
| + if (!SyncCompositorHostMsg_ReturnFrame::Read(&message, ¶m))
|
| + return false;
|
| + uint32_t output_surface_id = std::get<0>(param);
|
| + cc::CompositorFrame compositor_frame = std::move(std::get<1>(param));
|
| + client_->OnDrawHardwareProcessFrame(
|
| + ProcessHardwareFrame(output_surface_id, std::move(compositor_frame)));
|
| + return true;
|
| +}
|
| +
|
| +SynchronousCompositor::Frame SynchronousCompositorHost::ProcessHardwareFrame(
|
| + uint32_t output_surface_id,
|
| + cc::CompositorFrame compositor_frame) {
|
| + SynchronousCompositor::Frame frame;
|
| + frame.frame.reset(new cc::CompositorFrame);
|
| + frame.output_surface_id = output_surface_id;
|
| + *frame.frame = std::move(compositor_frame);
|
| if (!frame.frame->delegated_frame_data) {
|
| // This can happen if compositor did not swap in this draw.
|
| frame.frame.reset();
|
|
|