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

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: Removed unnecessary return statement Created 4 years, 3 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..181a5addd12905ca1d1694d09713775df847a5cf 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_GENERIC(SyncCompositorHostMsg_ReturnFrame,
+ DemandDrawHwReceiveFrame(message))
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,40 @@ 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, 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 output_surface_id = std::get<0>(param);
+ cc::CompositorFrame compositor_frame = std::move(std::get<1>(param));
+ client_->OnDrawHardwareProcessFrame(
+ ProcessHardwareFrame(output_surface_id, std::move(compositor_frame)));
+ return true;
+}
+
+SynchronousCompositor::Frame SynchronousCompositorHost::ProcessHardwareFrame(
+ uint32_t output_surface_id,
+ cc::CompositorFrame compositor_frame) {
+ SynchronousCompositor::Frame frame;
+ frame.frame.reset(new cc::CompositorFrame);
+ frame.output_surface_id = output_surface_id;
+ *frame.frame = std::move(compositor_frame);
if (!frame.frame->delegated_frame_data) {
// This can happen if compositor did not swap in this draw.
frame.frame.reset();
« no previous file with comments | « content/browser/android/synchronous_compositor_host.h ('k') | content/common/android/sync_compositor_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698