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 faca49c3ed948ced19929a5e7c97b3f581750c65..d13115fae570b3ee82c4e663c690cba77deb32a8 100644 |
--- a/content/browser/android/synchronous_compositor_host.cc |
+++ b/content/browser/android/synchronous_compositor_host.cc |
@@ -90,11 +90,25 @@ bool SynchronousCompositorHost::OnMessageReceived(const IPC::Message& message) { |
IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_OutputSurfaceCreated, |
OutputSurfaceCreated) |
IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_UpdateState, ProcessCommonParams) |
+ IPC_MESSAGE_HANDLER(CompositorHostMsg_Frame, DemandDrawHwReceiveFrame) |
IPC_MESSAGE_UNHANDLED(handled = false) |
IPC_END_MESSAGE_MAP() |
return handled; |
} |
+SynchronousCompositor::Frame SynchronousCompositorHost::DemandDrawHw_Async( |
+ 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 CompositorMsg_DemandDrawHw(routing_id_, params)); |
+ |
+ SynchronousCompositor::Frame frame; |
+ return frame; |
+} |
+ |
SynchronousCompositor::Frame SynchronousCompositorHost::DemandDrawHw( |
const gfx::Size& viewport_size, |
const gfx::Rect& viewport_rect_for_tile_priority, |
@@ -121,6 +135,26 @@ SynchronousCompositor::Frame SynchronousCompositorHost::DemandDrawHw( |
return frame; |
} |
+void SynchronousCompositorHost::DemandDrawHwReceiveFrame( |
+ uint32_t output_surface_id, |
+ const cc::CompositorFrame& compositor_frame) { |
+ SynchronousCompositor::Frame frame; |
+ frame.frame.reset(new cc::CompositorFrame); |
+ frame.output_surface_id = output_surface_id; |
+ *frame.frame = std::move(const_cast<cc::CompositorFrame&>(compositor_frame)); |
+ frame.output_surface_id = output_surface_id; |
+ |
+ if (!frame.frame->delegated_frame_data) { |
+ // This can happen if compositor did not swap in this draw. |
+ frame.frame.reset(); |
+ } |
+ if (frame.frame) { |
+ UpdateFrameMetaData(frame.frame->metadata.Clone()); |
+ } |
+ |
+ client_->OnDrawHardwareProcessFrame(std::move(frame)); |
+} |
+ |
void SynchronousCompositorHost::UpdateFrameMetaData( |
cc::CompositorFrameMetadata frame_metadata) { |
rwhva_->SynchronousFrameMetadata(std::move(frame_metadata)); |