| Index: content/browser/android/synchronous_compositor_observer.cc
|
| diff --git a/content/browser/android/synchronous_compositor_observer.cc b/content/browser/android/synchronous_compositor_observer.cc
|
| index bbf778510d8fa626117f3936b826edc8eff23304..7ee5ad6cf005a7597d5d10e34f0b39850babeb74 100644
|
| --- a/content/browser/android/synchronous_compositor_observer.cc
|
| +++ b/content/browser/android/synchronous_compositor_observer.cc
|
| @@ -30,7 +30,8 @@ SynchronousCompositorObserver* SynchronousCompositorObserver::GetOrCreateFor(
|
| }
|
|
|
| SynchronousCompositorObserver::SynchronousCompositorObserver(int process_id)
|
| - : render_process_host_(RenderProcessHost::FromID(process_id)),
|
| + : BrowserMessageFilter(SyncCompositorMsgStart),
|
| + render_process_host_(RenderProcessHost::FromID(process_id)),
|
| window_android_in_vsync_(nullptr) {
|
| DCHECK(render_process_host_);
|
| DCHECK(!base::ContainsKey(g_instances.Get(), render_process_host_->GetID()));
|
| @@ -68,6 +69,52 @@ void SynchronousCompositorObserver::SyncStateAfterVSync(
|
| window_android_in_vsync_->AddObserver(this);
|
| }
|
|
|
| +bool SynchronousCompositorObserver::OnMessageReceived(
|
| + const IPC::Message& message) {
|
| + bool handled = true;
|
| + IPC_BEGIN_MESSAGE_MAP(SynchronousCompositorObserver, message)
|
| + IPC_MESSAGE_HANDLER_GENERIC(SyncCompositorHostMsg_ReturnFrame,
|
| + ReceiveFrame(message))
|
| + IPC_MESSAGE_UNHANDLED(handled = false)
|
| + IPC_END_MESSAGE_MAP()
|
| + return handled;
|
| +}
|
| +
|
| +bool SynchronousCompositorObserver::ReceiveFrame(const IPC::Message& message) {
|
| + SyncCompositorHostMsg_ReturnFrame::Param param;
|
| + if (!SyncCompositorHostMsg_ReturnFrame::Read(&message, ¶m))
|
| + return false;
|
| + uint32_t compositor_frame_sink_id = std::get<0>(param);
|
| + cc::CompositorFrame compositor_frame = std::move(std::get<1>(param));
|
| +
|
| + content::SynchronousCompositor::Frame frame;
|
| + frame.frame.reset(new cc::CompositorFrame);
|
| + frame.compositor_frame_sink_id = compositor_frame_sink_id;
|
| + *frame.frame = std::move(compositor_frame);
|
| +
|
| + if (!frame.frame->delegated_frame_data) {
|
| + frame.frame.reset();
|
| + }
|
| +
|
| + std::unique_ptr<SynchronousCompositor::Frame> frame_ptr =
|
| + base::MakeUnique<SynchronousCompositor::Frame>();
|
| + frame_ptr->frame = std::move(frame.frame);
|
| + frame_ptr->compositor_frame_sink_id = frame.compositor_frame_sink_id;
|
| +
|
| + int routing_id = message.routing_id();
|
| +
|
| + future_map_[routing_id]->setFrame(std::move(frame_ptr));
|
| +
|
| + return true;
|
| +}
|
| +
|
| +void SynchronousCompositorObserver::SetFrameFuture(
|
| + const int routing_id,
|
| + const scoped_refptr<content::SynchronousCompositor::FrameFuture>&
|
| + frame_future) {
|
| + future_map_[routing_id] = std::move(frame_future);
|
| +}
|
| +
|
| void SynchronousCompositorObserver::OnCompositingDidCommit() {
|
| NOTREACHED();
|
| }
|
|
|