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