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

Side by Side Diff: content/renderer/android/synchronous_compositor_proxy.cc

Issue 2096493002: Make cc::CompositorFrames movable [Part 1 of 2] (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Reduce android_webview changes Created 4 years, 6 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/renderer/android/synchronous_compositor_proxy.h" 5 #include "content/renderer/android/synchronous_compositor_proxy.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/memory/shared_memory.h" 9 #include "base/memory/shared_memory.h"
10 #include "cc/ipc/cc_param_traits.h" 10 #include "cc/ipc/cc_param_traits.h"
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 &hardware_draw_reply_, reply_message); 161 &hardware_draw_reply_, reply_message);
162 output_surface_->DemandDrawHw(params.surface_size, params.transform, 162 output_surface_->DemandDrawHw(params.surface_size, params.transform,
163 params.viewport, params.clip, 163 params.viewport, params.clip,
164 params.viewport_rect_for_tile_priority, 164 params.viewport_rect_for_tile_priority,
165 params.transform_for_tile_priority); 165 params.transform_for_tile_priority);
166 } 166 }
167 167
168 if (inside_receive_) { 168 if (inside_receive_) {
169 // Did not swap. 169 // Did not swap.
170 cc::CompositorFrame empty_frame; 170 cc::CompositorFrame empty_frame;
171 SendDemandDrawHwReply(&empty_frame, 0u, reply_message); 171 SendDemandDrawHwReply(std::move(empty_frame), 0u, reply_message);
172 inside_receive_ = false; 172 inside_receive_ = false;
173 } 173 }
174 } 174 }
175 175
176 void SynchronousCompositorProxy::SwapBuffersHw(uint32_t output_surface_id, 176 void SynchronousCompositorProxy::SwapBuffersHw(uint32_t output_surface_id,
177 cc::CompositorFrame* frame) { 177 cc::CompositorFrame frame) {
178 DCHECK(inside_receive_); 178 DCHECK(inside_receive_);
179 DCHECK(hardware_draw_reply_); 179 DCHECK(hardware_draw_reply_);
180 DCHECK(frame); 180 SendDemandDrawHwReply(std::move(frame), output_surface_id,
181 SendDemandDrawHwReply(frame, output_surface_id, hardware_draw_reply_); 181 hardware_draw_reply_);
182 inside_receive_ = false; 182 inside_receive_ = false;
183 } 183 }
184 184
185 void SynchronousCompositorProxy::SendDemandDrawHwReply( 185 void SynchronousCompositorProxy::SendDemandDrawHwReply(
186 cc::CompositorFrame* frame, 186 cc::CompositorFrame frame,
187 uint32_t output_surface_id, 187 uint32_t output_surface_id,
188 IPC::Message* reply_message) { 188 IPC::Message* reply_message) {
189 SyncCompositorCommonRendererParams common_renderer_params; 189 SyncCompositorCommonRendererParams common_renderer_params;
190 PopulateCommonParams(&common_renderer_params); 190 PopulateCommonParams(&common_renderer_params);
191 SyncCompositorMsg_DemandDrawHw::WriteReplyParams( 191 SyncCompositorMsg_DemandDrawHw::WriteReplyParams(
192 reply_message, common_renderer_params, output_surface_id, *frame); 192 reply_message, common_renderer_params, output_surface_id, frame);
193 Send(reply_message); 193 Send(reply_message);
194 } 194 }
195 195
196 struct SynchronousCompositorProxy::SharedMemoryWithSize { 196 struct SynchronousCompositorProxy::SharedMemoryWithSize {
197 base::SharedMemory shm; 197 base::SharedMemory shm;
198 const size_t buffer_size; 198 const size_t buffer_size;
199 bool zeroed; 199 bool zeroed;
200 200
201 SharedMemoryWithSize(base::SharedMemoryHandle shm_handle, size_t buffer_size) 201 SharedMemoryWithSize(base::SharedMemoryHandle shm_handle, size_t buffer_size)
202 : shm(shm_handle, false), buffer_size(buffer_size), zeroed(true) {} 202 : shm(shm_handle, false), buffer_size(buffer_size), zeroed(true) {}
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 DCHECK(sk_canvas_for_draw); 246 DCHECK(sk_canvas_for_draw);
247 output_surface_->DemandDrawSw(sk_canvas_for_draw); 247 output_surface_->DemandDrawSw(sk_canvas_for_draw);
248 } else { 248 } else {
249 DCHECK(!sk_canvas_for_draw); 249 DCHECK(!sk_canvas_for_draw);
250 DoDemandDrawSw(params); 250 DoDemandDrawSw(params);
251 } 251 }
252 } 252 }
253 if (inside_receive_) { 253 if (inside_receive_) {
254 // Did not swap. 254 // Did not swap.
255 cc::CompositorFrame empty_frame; 255 cc::CompositorFrame empty_frame;
256 SendDemandDrawSwReply(false, &empty_frame, reply_message); 256 SendDemandDrawSwReply(false, std::move(empty_frame), reply_message);
danakj 2016/06/24 18:35:11 you can just pass a cc::CompositorFrame() here, no
Fady Samuel 2016/06/24 20:00:24 Done.
257 inside_receive_ = false; 257 inside_receive_ = false;
258 } 258 }
259 } 259 }
260 260
261 void SynchronousCompositorProxy::DoDemandDrawSw( 261 void SynchronousCompositorProxy::DoDemandDrawSw(
262 const SyncCompositorDemandDrawSwParams& params) { 262 const SyncCompositorDemandDrawSwParams& params) {
263 DCHECK(output_surface_); 263 DCHECK(output_surface_);
264 DCHECK(software_draw_shm_->zeroed); 264 DCHECK(software_draw_shm_->zeroed);
265 software_draw_shm_->zeroed = false; 265 software_draw_shm_->zeroed = false;
266 266
267 SkImageInfo info = 267 SkImageInfo info =
268 SkImageInfo::MakeN32Premul(params.size.width(), params.size.height()); 268 SkImageInfo::MakeN32Premul(params.size.width(), params.size.height());
269 size_t stride = info.minRowBytes(); 269 size_t stride = info.minRowBytes();
270 size_t buffer_size = info.getSafeSize(stride); 270 size_t buffer_size = info.getSafeSize(stride);
271 DCHECK_EQ(software_draw_shm_->buffer_size, buffer_size); 271 DCHECK_EQ(software_draw_shm_->buffer_size, buffer_size);
272 272
273 SkBitmap bitmap; 273 SkBitmap bitmap;
274 if (!bitmap.installPixels(info, software_draw_shm_->shm.memory(), stride)) 274 if (!bitmap.installPixels(info, software_draw_shm_->shm.memory(), stride))
275 return; 275 return;
276 SkCanvas canvas(bitmap); 276 SkCanvas canvas(bitmap);
277 canvas.setMatrix(params.transform.matrix()); 277 canvas.setMatrix(params.transform.matrix());
278 canvas.setClipRegion(SkRegion(gfx::RectToSkIRect(params.clip))); 278 canvas.setClipRegion(SkRegion(gfx::RectToSkIRect(params.clip)));
279 279
280 output_surface_->DemandDrawSw(&canvas); 280 output_surface_->DemandDrawSw(&canvas);
281 } 281 }
282 282
283 void SynchronousCompositorProxy::SwapBuffersSw(cc::CompositorFrame* frame) { 283 void SynchronousCompositorProxy::SwapBuffersSw(cc::CompositorFrame frame) {
284 DCHECK(inside_receive_); 284 DCHECK(inside_receive_);
285 DCHECK(software_draw_reply_); 285 DCHECK(software_draw_reply_);
286 DCHECK(frame); 286 SendDemandDrawSwReply(true, std::move(frame), software_draw_reply_);
287 SendDemandDrawSwReply(true, frame, software_draw_reply_);
288 inside_receive_ = false; 287 inside_receive_ = false;
289 } 288 }
290 289
291 void SynchronousCompositorProxy::SendDemandDrawSwReply( 290 void SynchronousCompositorProxy::SendDemandDrawSwReply(
292 bool success, 291 bool success,
293 cc::CompositorFrame* frame, 292 cc::CompositorFrame frame,
294 IPC::Message* reply_message) { 293 IPC::Message* reply_message) {
295 SyncCompositorCommonRendererParams common_renderer_params; 294 SyncCompositorCommonRendererParams common_renderer_params;
296 PopulateCommonParams(&common_renderer_params); 295 PopulateCommonParams(&common_renderer_params);
297 SyncCompositorMsg_DemandDrawSw::WriteReplyParams( 296 SyncCompositorMsg_DemandDrawSw::WriteReplyParams(
298 reply_message, success, common_renderer_params, *frame); 297 reply_message, success, common_renderer_params, frame);
299 Send(reply_message); 298 Send(reply_message);
300 } 299 }
301 300
302 void SynchronousCompositorProxy::SwapBuffers(uint32_t output_surface_id, 301 void SynchronousCompositorProxy::SwapBuffers(uint32_t output_surface_id,
303 cc::CompositorFrame* frame) { 302 cc::CompositorFrame frame) {
304 DCHECK(hardware_draw_reply_ || software_draw_reply_); 303 DCHECK(hardware_draw_reply_ || software_draw_reply_);
305 DCHECK(!(hardware_draw_reply_ && software_draw_reply_)); 304 DCHECK(!(hardware_draw_reply_ && software_draw_reply_));
306 if (hardware_draw_reply_) { 305 if (hardware_draw_reply_) {
307 SwapBuffersHw(output_surface_id, frame); 306 SwapBuffersHw(output_surface_id, std::move(frame));
308 } else if (software_draw_reply_) { 307 } else if (software_draw_reply_) {
309 SwapBuffersSw(frame); 308 SwapBuffersSw(std::move(frame));
310 } 309 }
311 } 310 }
312 311
313 void SynchronousCompositorProxy::OnComputeScroll( 312 void SynchronousCompositorProxy::OnComputeScroll(
314 base::TimeTicks animation_time) { 313 base::TimeTicks animation_time) {
315 if (need_animate_scroll_) { 314 if (need_animate_scroll_) {
316 need_animate_scroll_ = false; 315 need_animate_scroll_ = false;
317 input_handler_proxy_->SynchronouslyAnimate(animation_time); 316 input_handler_proxy_->SynchronouslyAnimate(animation_time);
318 } 317 }
319 } 318 }
(...skipping 10 matching lines...) Expand all
330 329
331 void SynchronousCompositorProxy::SetScroll( 330 void SynchronousCompositorProxy::SetScroll(
332 const gfx::ScrollOffset& new_total_scroll_offset) { 331 const gfx::ScrollOffset& new_total_scroll_offset) {
333 if (total_scroll_offset_ == new_total_scroll_offset) 332 if (total_scroll_offset_ == new_total_scroll_offset)
334 return; 333 return;
335 total_scroll_offset_ = new_total_scroll_offset; 334 total_scroll_offset_ = new_total_scroll_offset;
336 input_handler_proxy_->SynchronouslySetRootScrollOffset(total_scroll_offset_); 335 input_handler_proxy_->SynchronouslySetRootScrollOffset(total_scroll_offset_);
337 } 336 }
338 337
339 } // namespace content 338 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698