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..7a84626e87220025d47d7a225b9f0b522db9cd1f 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(SyncCompositorHostMsg_ReturnFrame, |
+ DemandDrawHwReceiveFrame) |
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,35 @@ 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, compositor_frame); |
+} |
+ |
+void SynchronousCompositorHost::DemandDrawHwReceiveFrame( |
+ uint32_t output_surface_id, |
+ const cc::CompositorFrame& compositor_frame) { |
+ client_->OnDrawHardwareProcessFrame( |
+ ProcessHardwareFrame(output_surface_id, compositor_frame)); |
+} |
+ |
+SynchronousCompositor::Frame SynchronousCompositorHost::ProcessHardwareFrame( |
+ 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)); |
dcheng
2016/08/31 18:06:44
Hmm...
I wonder if we can try to make this better
boliu
2016/08/31 18:23:53
So uhh, for this, I think we'll just copy what chr
boliu
2016/08/31 18:25:45
Does that involve updating all ParamTraits though?
ojars
2016/09/02 01:29:56
Done.
|
if (!frame.frame->delegated_frame_data) { |
// This can happen if compositor did not swap in this draw. |
frame.frame.reset(); |