OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |