Chromium Code Reviews| 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 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |