Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(950)

Unified Diff: content/browser/android/synchronous_compositor_host.cc

Issue 2418383002: sync compositor: Signal async frame on IO thread (Closed)
Patch Set: typo Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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, &param))
- 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() {
« no previous file with comments | « content/browser/android/synchronous_compositor_host.h ('k') | content/browser/android/synchronous_compositor_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698