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

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: Fix reflector 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 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 base::AutoReset<IPC::Message*> scoped_hardware_draw_reply( 160 base::AutoReset<IPC::Message*> scoped_hardware_draw_reply(
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 std::unique_ptr<cc::CompositorFrame> empty_frame(
171 SendDemandDrawHwReply(&empty_frame, 0u, reply_message); 171 cc::CompositorFrame::Create());
172 SendDemandDrawHwReply(std::move(empty_frame), 0u, reply_message);
172 inside_receive_ = false; 173 inside_receive_ = false;
173 } 174 }
174 } 175 }
175 176
176 void SynchronousCompositorProxy::SwapBuffersHw(uint32_t output_surface_id, 177 void SynchronousCompositorProxy::SwapBuffersHw(
177 cc::CompositorFrame* frame) { 178 uint32_t output_surface_id,
179 std::unique_ptr<cc::CompositorFrame> frame) {
178 DCHECK(inside_receive_); 180 DCHECK(inside_receive_);
179 DCHECK(hardware_draw_reply_); 181 DCHECK(hardware_draw_reply_);
180 DCHECK(frame); 182 DCHECK(frame.get());
danakj 2016/06/23 20:34:41 no .get() needed. unique_ptr is testable
181 SendDemandDrawHwReply(frame, output_surface_id, hardware_draw_reply_); 183 SendDemandDrawHwReply(std::move(frame), output_surface_id,
184 hardware_draw_reply_);
182 inside_receive_ = false; 185 inside_receive_ = false;
183 } 186 }
184 187
185 void SynchronousCompositorProxy::SendDemandDrawHwReply( 188 void SynchronousCompositorProxy::SendDemandDrawHwReply(
186 cc::CompositorFrame* frame, 189 std::unique_ptr<cc::CompositorFrame> frame,
187 uint32_t output_surface_id, 190 uint32_t output_surface_id,
188 IPC::Message* reply_message) { 191 IPC::Message* reply_message) {
189 SyncCompositorCommonRendererParams common_renderer_params; 192 SyncCompositorCommonRendererParams common_renderer_params;
190 PopulateCommonParams(&common_renderer_params); 193 PopulateCommonParams(&common_renderer_params);
191 SyncCompositorMsg_DemandDrawHw::WriteReplyParams( 194 SyncCompositorMsg_DemandDrawHw::WriteReplyParams(
192 reply_message, common_renderer_params, output_surface_id, *frame); 195 reply_message, common_renderer_params, output_surface_id, frame);
193 Send(reply_message); 196 Send(reply_message);
194 } 197 }
195 198
196 struct SynchronousCompositorProxy::SharedMemoryWithSize { 199 struct SynchronousCompositorProxy::SharedMemoryWithSize {
197 base::SharedMemory shm; 200 base::SharedMemory shm;
198 const size_t buffer_size; 201 const size_t buffer_size;
199 bool zeroed; 202 bool zeroed;
200 203
201 SharedMemoryWithSize(base::SharedMemoryHandle shm_handle, size_t buffer_size) 204 SharedMemoryWithSize(base::SharedMemoryHandle shm_handle, size_t buffer_size)
202 : shm(shm_handle, false), buffer_size(buffer_size), zeroed(true) {} 205 : shm(shm_handle, false), buffer_size(buffer_size), zeroed(true) {}
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 if (use_in_process_zero_copy_software_draw_) { 248 if (use_in_process_zero_copy_software_draw_) {
246 DCHECK(sk_canvas_for_draw); 249 DCHECK(sk_canvas_for_draw);
247 output_surface_->DemandDrawSw(sk_canvas_for_draw); 250 output_surface_->DemandDrawSw(sk_canvas_for_draw);
248 } else { 251 } else {
249 DCHECK(!sk_canvas_for_draw); 252 DCHECK(!sk_canvas_for_draw);
250 DoDemandDrawSw(params); 253 DoDemandDrawSw(params);
251 } 254 }
252 } 255 }
253 if (inside_receive_) { 256 if (inside_receive_) {
254 // Did not swap. 257 // Did not swap.
255 cc::CompositorFrame empty_frame; 258 std::unique_ptr<cc::CompositorFrame> empty_frame(
256 SendDemandDrawSwReply(false, &empty_frame, reply_message); 259 cc::CompositorFrame::Create());
260 SendDemandDrawSwReply(false, std::move(empty_frame), reply_message);
257 inside_receive_ = false; 261 inside_receive_ = false;
258 } 262 }
259 } 263 }
260 264
261 void SynchronousCompositorProxy::DoDemandDrawSw( 265 void SynchronousCompositorProxy::DoDemandDrawSw(
262 const SyncCompositorDemandDrawSwParams& params) { 266 const SyncCompositorDemandDrawSwParams& params) {
263 DCHECK(output_surface_); 267 DCHECK(output_surface_);
264 DCHECK(software_draw_shm_->zeroed); 268 DCHECK(software_draw_shm_->zeroed);
265 software_draw_shm_->zeroed = false; 269 software_draw_shm_->zeroed = false;
266 270
267 SkImageInfo info = 271 SkImageInfo info =
268 SkImageInfo::MakeN32Premul(params.size.width(), params.size.height()); 272 SkImageInfo::MakeN32Premul(params.size.width(), params.size.height());
269 size_t stride = info.minRowBytes(); 273 size_t stride = info.minRowBytes();
270 size_t buffer_size = info.getSafeSize(stride); 274 size_t buffer_size = info.getSafeSize(stride);
271 DCHECK_EQ(software_draw_shm_->buffer_size, buffer_size); 275 DCHECK_EQ(software_draw_shm_->buffer_size, buffer_size);
272 276
273 SkBitmap bitmap; 277 SkBitmap bitmap;
274 if (!bitmap.installPixels(info, software_draw_shm_->shm.memory(), stride)) 278 if (!bitmap.installPixels(info, software_draw_shm_->shm.memory(), stride))
275 return; 279 return;
276 SkCanvas canvas(bitmap); 280 SkCanvas canvas(bitmap);
277 canvas.setMatrix(params.transform.matrix()); 281 canvas.setMatrix(params.transform.matrix());
278 canvas.setClipRegion(SkRegion(gfx::RectToSkIRect(params.clip))); 282 canvas.setClipRegion(SkRegion(gfx::RectToSkIRect(params.clip)));
279 283
280 output_surface_->DemandDrawSw(&canvas); 284 output_surface_->DemandDrawSw(&canvas);
281 } 285 }
282 286
283 void SynchronousCompositorProxy::SwapBuffersSw(cc::CompositorFrame* frame) { 287 void SynchronousCompositorProxy::SwapBuffersSw(
288 std::unique_ptr<cc::CompositorFrame> frame) {
284 DCHECK(inside_receive_); 289 DCHECK(inside_receive_);
285 DCHECK(software_draw_reply_); 290 DCHECK(software_draw_reply_);
286 DCHECK(frame); 291 DCHECK(frame);
287 SendDemandDrawSwReply(true, frame, software_draw_reply_); 292 SendDemandDrawSwReply(true, std::move(frame), software_draw_reply_);
288 inside_receive_ = false; 293 inside_receive_ = false;
289 } 294 }
290 295
291 void SynchronousCompositorProxy::SendDemandDrawSwReply( 296 void SynchronousCompositorProxy::SendDemandDrawSwReply(
292 bool success, 297 bool success,
293 cc::CompositorFrame* frame, 298 std::unique_ptr<cc::CompositorFrame> frame,
294 IPC::Message* reply_message) { 299 IPC::Message* reply_message) {
295 SyncCompositorCommonRendererParams common_renderer_params; 300 SyncCompositorCommonRendererParams common_renderer_params;
296 PopulateCommonParams(&common_renderer_params); 301 PopulateCommonParams(&common_renderer_params);
297 SyncCompositorMsg_DemandDrawSw::WriteReplyParams( 302 SyncCompositorMsg_DemandDrawSw::WriteReplyParams(
298 reply_message, success, common_renderer_params, *frame); 303 reply_message, success, common_renderer_params, frame);
299 Send(reply_message); 304 Send(reply_message);
300 } 305 }
301 306
302 void SynchronousCompositorProxy::SwapBuffers(uint32_t output_surface_id, 307 void SynchronousCompositorProxy::SwapBuffers(
303 cc::CompositorFrame* frame) { 308 uint32_t output_surface_id,
309 std::unique_ptr<cc::CompositorFrame> frame) {
304 DCHECK(hardware_draw_reply_ || software_draw_reply_); 310 DCHECK(hardware_draw_reply_ || software_draw_reply_);
305 DCHECK(!(hardware_draw_reply_ && software_draw_reply_)); 311 DCHECK(!(hardware_draw_reply_ && software_draw_reply_));
306 if (hardware_draw_reply_) { 312 if (hardware_draw_reply_) {
307 SwapBuffersHw(output_surface_id, frame); 313 SwapBuffersHw(output_surface_id, std::move(frame));
308 } else if (software_draw_reply_) { 314 } else if (software_draw_reply_) {
309 SwapBuffersSw(frame); 315 SwapBuffersSw(std::move(frame));
310 } 316 }
311 } 317 }
312 318
313 void SynchronousCompositorProxy::OnComputeScroll( 319 void SynchronousCompositorProxy::OnComputeScroll(
314 base::TimeTicks animation_time) { 320 base::TimeTicks animation_time) {
315 if (need_animate_scroll_) { 321 if (need_animate_scroll_) {
316 need_animate_scroll_ = false; 322 need_animate_scroll_ = false;
317 input_handler_proxy_->SynchronouslyAnimate(animation_time); 323 input_handler_proxy_->SynchronouslyAnimate(animation_time);
318 } 324 }
319 } 325 }
(...skipping 10 matching lines...) Expand all
330 336
331 void SynchronousCompositorProxy::SetScroll( 337 void SynchronousCompositorProxy::SetScroll(
332 const gfx::ScrollOffset& new_total_scroll_offset) { 338 const gfx::ScrollOffset& new_total_scroll_offset) {
333 if (total_scroll_offset_ == new_total_scroll_offset) 339 if (total_scroll_offset_ == new_total_scroll_offset)
334 return; 340 return;
335 total_scroll_offset_ = new_total_scroll_offset; 341 total_scroll_offset_ = new_total_scroll_offset;
336 input_handler_proxy_->SynchronouslySetRootScrollOffset(total_scroll_offset_); 342 input_handler_proxy_->SynchronouslySetRootScrollOffset(total_scroll_offset_);
337 } 343 }
338 344
339 } // namespace content 345 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698