| 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 19127cf328a34587f6cf2a0583b9ec8fb16c9ea5..a510f1917086d0da7a4d92bfa5edac90f7d1e93d 100644
|
| --- a/content/browser/android/synchronous_compositor_host.cc
|
| +++ b/content/browser/android/synchronous_compositor_host.cc
|
| @@ -70,7 +70,6 @@ SynchronousCompositorHost::SynchronousCompositorHost(
|
| ui_task_runner_(BrowserThread::GetTaskRunnerForThread(BrowserThread::UI)),
|
| process_id_(rwhva_->GetRenderWidgetHost()->GetProcess()->GetID()),
|
| routing_id_(rwhva_->GetRenderWidgetHost()->GetRoutingID()),
|
| - rph_observer_(SynchronousCompositorObserver::GetOrCreateFor(process_id_)),
|
| sender_(rwhva_->GetRenderWidgetHost()),
|
| use_in_process_zero_copy_software_draw_(use_in_proc_software_draw),
|
| bytes_limit_(0u),
|
| @@ -91,21 +90,27 @@ bool SynchronousCompositorHost::OnMessageReceived(const IPC::Message& message) {
|
| IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_CompositorFrameSinkCreated,
|
| CompositorFrameSinkCreated)
|
| 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(
|
| +scoped_refptr<SynchronousCompositor::FrameFuture>
|
| +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));
|
| + scoped_refptr<FrameFuture> frame_future = new FrameFuture();
|
| + if (SynchronousCompositorObserver* filter = GetFilter()) {
|
| + filter->SetFrameFuture(routing_id_, frame_future);
|
| + sender_->Send(new SyncCompositorMsg_DemandDrawHwAsync(routing_id_, params));
|
| + } else {
|
| + frame_future->setFrame(nullptr);
|
| + }
|
| + return frame_future;
|
| }
|
|
|
| SynchronousCompositor::Frame SynchronousCompositorHost::DemandDrawHw(
|
| @@ -131,28 +136,6 @@ SynchronousCompositor::Frame SynchronousCompositorHost::DemandDrawHw(
|
| 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 compositor_frame_sink_id = std::get<0>(param);
|
| - cc::CompositorFrame compositor_frame = std::move(std::get<1>(param));
|
| - scoped_refptr<SynchronousCompositor::FrameFuture> frame_future =
|
| - new FrameFuture();
|
| - SynchronousCompositor::Frame frame = ProcessHardwareFrame(
|
| - compositor_frame_sink_id, std::move(compositor_frame));
|
| - if (!frame.frame)
|
| - return true;
|
| - 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;
|
| - frame_future->setFrame(std::move(frame_ptr));
|
| - client_->OnDrawHardwareProcessFrameFuture(std::move(frame_future));
|
| - return true;
|
| -}
|
| -
|
| SynchronousCompositor::Frame SynchronousCompositorHost::ProcessHardwareFrame(
|
| uint32_t compositor_frame_sink_id,
|
| cc::CompositorFrame compositor_frame) {
|
| @@ -175,6 +158,12 @@ void SynchronousCompositorHost::UpdateFrameMetaData(
|
| rwhva_->SynchronousFrameMetadata(std::move(frame_metadata));
|
| }
|
|
|
| +SynchronousCompositorObserver* SynchronousCompositorHost::GetFilter() {
|
| + return static_cast<RenderProcessHostImpl*>(
|
| + rwhva_->GetRenderWidgetHost()->GetProcess())
|
| + ->synchronous_compositor_filter();
|
| +}
|
| +
|
| namespace {
|
|
|
| class ScopedSetSkCanvas {
|
| @@ -387,7 +376,8 @@ void SynchronousCompositorHost::DidOverscroll(
|
|
|
| void SynchronousCompositorHost::DidSendBeginFrame(
|
| ui::WindowAndroid* window_android) {
|
| - rph_observer_->SyncStateAfterVSync(window_android, this);
|
| + if (SynchronousCompositorObserver* filter = GetFilter())
|
| + filter->SyncStateAfterVSync(window_android, this);
|
| }
|
|
|
| void SynchronousCompositorHost::CompositorFrameSinkCreated() {
|
|
|