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 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 |