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

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

Issue 2174203002: OnDrawHardware() implementation with async messages (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Implemented code review Created 4 years, 4 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 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();

Powered by Google App Engine
This is Rietveld 408576698