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

Side by Side 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: 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/android/synchronous_compositor_host.h" 5 #include "content/browser/android/synchronous_compositor_host.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 SynchronousCompositorHost::~SynchronousCompositorHost() { 81 SynchronousCompositorHost::~SynchronousCompositorHost() {
82 client_->DidDestroyCompositor(this, process_id_, routing_id_); 82 client_->DidDestroyCompositor(this, process_id_, routing_id_);
83 } 83 }
84 84
85 bool SynchronousCompositorHost::OnMessageReceived(const IPC::Message& message) { 85 bool SynchronousCompositorHost::OnMessageReceived(const IPC::Message& message) {
86 bool handled = true; 86 bool handled = true;
87 IPC_BEGIN_MESSAGE_MAP(SynchronousCompositorHost, message) 87 IPC_BEGIN_MESSAGE_MAP(SynchronousCompositorHost, message)
88 IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_OutputSurfaceCreated, 88 IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_OutputSurfaceCreated,
89 OutputSurfaceCreated) 89 OutputSurfaceCreated)
90 IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_UpdateState, ProcessCommonParams) 90 IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_UpdateState, ProcessCommonParams)
91 IPC_MESSAGE_HANDLER(CompositorHostMsg_Frame, ReceiveFrame)
91 IPC_MESSAGE_UNHANDLED(handled = false) 92 IPC_MESSAGE_UNHANDLED(handled = false)
92 IPC_END_MESSAGE_MAP() 93 IPC_END_MESSAGE_MAP()
93 return handled; 94 return handled;
94 } 95 }
95 96
96 SynchronousCompositor::Frame SynchronousCompositorHost::DemandDrawHw( 97 SynchronousCompositor::Frame SynchronousCompositorHost::DemandDrawHw(
97 const gfx::Size& surface_size, 98 const gfx::Size& surface_size,
98 const gfx::Transform& transform, 99 const gfx::Transform& transform,
99 const gfx::Rect& viewport, 100 const gfx::Rect& viewport,
100 const gfx::Rect& clip, 101 const gfx::Rect& clip,
101 const gfx::Rect& viewport_rect_for_tile_priority, 102 const gfx::Rect& viewport_rect_for_tile_priority,
102 const gfx::Transform& transform_for_tile_priority) { 103 const gfx::Transform& transform_for_tile_priority) {
103 SyncCompositorDemandDrawHwParams params(surface_size, transform, viewport, 104 SyncCompositorDemandDrawHwParams params(surface_size, transform, viewport,
104 clip, viewport_rect_for_tile_priority, 105 clip, viewport_rect_for_tile_priority,
105 transform_for_tile_priority); 106 transform_for_tile_priority);
106 SynchronousCompositor::Frame frame; 107 SynchronousCompositor::Frame frame;
107 frame.frame.reset(new cc::CompositorFrame); 108 frame.frame.reset(new cc::CompositorFrame);
108 SyncCompositorCommonRendererParams common_renderer_params; 109 SyncCompositorCommonRendererParams common_renderer_params;
109 if (!sender_->Send(new SyncCompositorMsg_DemandDrawHw( 110
110 routing_id_, params, &common_renderer_params, 111 /* Send an async message instead of a synchronous one.
111 &frame.output_surface_id, frame.frame.get()))) { 112 * Currently not sure what to do in the analogous case
112 return SynchronousCompositor::Frame(); 113 * when sending sync message returns false. */
113 } 114 // if (!sender_->Send(new SyncCompositorMsg_DemandDrawHw(
114 ProcessCommonParams(common_renderer_params); 115 // routing_id_, params, &common_renderer_params,
115 if (!frame.frame->delegated_frame_data) { 116 // &frame.output_surface_id, frame.frame.get()))) {
116 // This can happen if compositor did not swap in this draw. 117 // return SynchronousCompositor::Frame();
117 frame.frame.reset(); 118 // }
118 } 119
119 if (frame.frame) { 120 sender_->Send(new CompositorMsg_DemandDrawHw(routing_id_, params));
120 UpdateFrameMetaData(frame.frame->metadata.Clone()); 121 /* Now that the sent message is async, the following processing
121 } 122 * of the result has to be done upon receiving the reply. */
122 return frame; 123
124 // ProcessCommonParams(common_renderer_params);
125 // if (!frame.frame->delegated_frame_data) {
126 // // This can happen if compositor did not swap in this draw.
127 // frame.frame.reset();
128 // }
129 // if (frame.frame) {
130 // UpdateFrameMetaData(frame.frame->metadata.Clone());
131 // }
132 // return frame;
133 //
134 return nullptr;
135 }
136
137 void SynchronousCompositorHost::ReceiveFrame(
138 content::SyncCompositorCommonRendererParams params,
139 uint32_t output_surface_id,
140 cc::CompositorFrame) {
141 // TODO: the return message is received in this class, but
142 // the received frame should be processed in BVR class (should it?)
143 // because other data is stored there (e.g. current frame consumer)
144 //
145 // Either:
146 // 1. pass the received frame back to browser view renderer (is it
147 // appropriate?)
148 // or
149 // 2. pass the necessary things from bvr to here
123 } 150 }
124 151
125 void SynchronousCompositorHost::UpdateFrameMetaData( 152 void SynchronousCompositorHost::UpdateFrameMetaData(
126 cc::CompositorFrameMetadata frame_metadata) { 153 cc::CompositorFrameMetadata frame_metadata) {
127 rwhva_->SynchronousFrameMetadata(std::move(frame_metadata)); 154 rwhva_->SynchronousFrameMetadata(std::move(frame_metadata));
128 } 155 }
129 156
130 namespace { 157 namespace {
131 158
132 class ScopedSetSkCanvas { 159 class ScopedSetSkCanvas {
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 if (params.page_scale_factor) { 408 if (params.page_scale_factor) {
382 client_->UpdateRootLayerState( 409 client_->UpdateRootLayerState(
383 this, gfx::ScrollOffsetToVector2dF(params.total_scroll_offset), 410 this, gfx::ScrollOffsetToVector2dF(params.total_scroll_offset),
384 gfx::ScrollOffsetToVector2dF(params.max_scroll_offset), 411 gfx::ScrollOffsetToVector2dF(params.max_scroll_offset),
385 params.scrollable_size, params.page_scale_factor, 412 params.scrollable_size, params.page_scale_factor,
386 params.min_page_scale_factor, params.max_page_scale_factor); 413 params.min_page_scale_factor, params.max_page_scale_factor);
387 } 414 }
388 } 415 }
389 416
390 } // namespace content 417 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698