| 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 "content/common/android/sync_compositor_messages.h" | 10 #include "content/common/android/sync_compositor_messages.h" |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 &hardware_draw_reply_, reply_message); | 211 &hardware_draw_reply_, reply_message); |
| 212 output_surface_->DemandDrawHw(params.surface_size, params.transform, | 212 output_surface_->DemandDrawHw(params.surface_size, params.transform, |
| 213 params.viewport, params.clip, | 213 params.viewport, params.clip, |
| 214 params.viewport_rect_for_tile_priority, | 214 params.viewport_rect_for_tile_priority, |
| 215 params.transform_for_tile_priority); | 215 params.transform_for_tile_priority); |
| 216 } | 216 } |
| 217 | 217 |
| 218 if (inside_receive_) { | 218 if (inside_receive_) { |
| 219 // Did not swap. | 219 // Did not swap. |
| 220 cc::CompositorFrame empty_frame; | 220 cc::CompositorFrame empty_frame; |
| 221 SendDemandDrawHwReply(&empty_frame, reply_message); | 221 SendDemandDrawHwReply(&empty_frame, 0u, reply_message); |
| 222 inside_receive_ = false; | 222 inside_receive_ = false; |
| 223 } else { | 223 } else { |
| 224 DeliverMessages(); | 224 DeliverMessages(); |
| 225 } | 225 } |
| 226 } | 226 } |
| 227 | 227 |
| 228 void SynchronousCompositorProxy::SwapBuffersHw(cc::CompositorFrame* frame) { | 228 void SynchronousCompositorProxy::SwapBuffersHw(uint32_t output_surface_id, |
| 229 cc::CompositorFrame* frame) { |
| 229 DCHECK(inside_receive_); | 230 DCHECK(inside_receive_); |
| 230 DCHECK(hardware_draw_reply_); | 231 DCHECK(hardware_draw_reply_); |
| 231 DCHECK(frame); | 232 DCHECK(frame); |
| 232 SendDemandDrawHwReply(frame, hardware_draw_reply_); | 233 SendDemandDrawHwReply(frame, output_surface_id, hardware_draw_reply_); |
| 233 inside_receive_ = false; | 234 inside_receive_ = false; |
| 234 } | 235 } |
| 235 | 236 |
| 236 void SynchronousCompositorProxy::SendDemandDrawHwReply( | 237 void SynchronousCompositorProxy::SendDemandDrawHwReply( |
| 237 cc::CompositorFrame* frame, | 238 cc::CompositorFrame* frame, |
| 239 uint32_t output_surface_id, |
| 238 IPC::Message* reply_message) { | 240 IPC::Message* reply_message) { |
| 239 SyncCompositorCommonRendererParams common_renderer_params; | 241 SyncCompositorCommonRendererParams common_renderer_params; |
| 240 PopulateCommonParams(&common_renderer_params); | 242 PopulateCommonParams(&common_renderer_params); |
| 241 // Not using WriteParams because cc::CompositorFrame is not copy-able. | 243 // Not using WriteParams because cc::CompositorFrame is not copy-able. |
| 242 IPC::ParamTraits<SyncCompositorCommonRendererParams>::Write( | 244 IPC::ParamTraits<SyncCompositorCommonRendererParams>::Write( |
| 243 reply_message, common_renderer_params); | 245 reply_message, common_renderer_params); |
| 246 IPC::ParamTraits<uint32_t>::Write(reply_message, output_surface_id); |
| 244 IPC::ParamTraits<cc::CompositorFrame>::Write(reply_message, *frame); | 247 IPC::ParamTraits<cc::CompositorFrame>::Write(reply_message, *frame); |
| 245 Send(reply_message); | 248 Send(reply_message); |
| 246 } | 249 } |
| 247 | 250 |
| 248 struct SynchronousCompositorProxy::SharedMemoryWithSize { | 251 struct SynchronousCompositorProxy::SharedMemoryWithSize { |
| 249 base::SharedMemory shm; | 252 base::SharedMemory shm; |
| 250 const size_t buffer_size; | 253 const size_t buffer_size; |
| 251 bool zeroed; | 254 bool zeroed; |
| 252 | 255 |
| 253 SharedMemoryWithSize(base::SharedMemoryHandle shm_handle, size_t buffer_size) | 256 SharedMemoryWithSize(base::SharedMemoryHandle shm_handle, size_t buffer_size) |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 359 SyncCompositorCommonRendererParams common_renderer_params; | 362 SyncCompositorCommonRendererParams common_renderer_params; |
| 360 PopulateCommonParams(&common_renderer_params); | 363 PopulateCommonParams(&common_renderer_params); |
| 361 // Not using WriteParams because cc::CompositorFrame is not copy-able. | 364 // Not using WriteParams because cc::CompositorFrame is not copy-able. |
| 362 IPC::ParamTraits<bool>::Write(reply_message, success); | 365 IPC::ParamTraits<bool>::Write(reply_message, success); |
| 363 IPC::ParamTraits<SyncCompositorCommonRendererParams>::Write( | 366 IPC::ParamTraits<SyncCompositorCommonRendererParams>::Write( |
| 364 reply_message, common_renderer_params); | 367 reply_message, common_renderer_params); |
| 365 IPC::ParamTraits<cc::CompositorFrame>::Write(reply_message, *frame); | 368 IPC::ParamTraits<cc::CompositorFrame>::Write(reply_message, *frame); |
| 366 Send(reply_message); | 369 Send(reply_message); |
| 367 } | 370 } |
| 368 | 371 |
| 369 void SynchronousCompositorProxy::SwapBuffers(cc::CompositorFrame* frame) { | 372 void SynchronousCompositorProxy::SwapBuffers(uint32_t output_surface_id, |
| 373 cc::CompositorFrame* frame) { |
| 370 DCHECK(hardware_draw_reply_ || software_draw_reply_); | 374 DCHECK(hardware_draw_reply_ || software_draw_reply_); |
| 371 DCHECK(!(hardware_draw_reply_ && software_draw_reply_)); | 375 DCHECK(!(hardware_draw_reply_ && software_draw_reply_)); |
| 372 if (hardware_draw_reply_) { | 376 if (hardware_draw_reply_) { |
| 373 SwapBuffersHw(frame); | 377 SwapBuffersHw(output_surface_id, frame); |
| 374 } else if (software_draw_reply_) { | 378 } else if (software_draw_reply_) { |
| 375 SwapBuffersSw(frame); | 379 SwapBuffersSw(frame); |
| 376 } | 380 } |
| 377 } | 381 } |
| 378 | 382 |
| 379 void SynchronousCompositorProxy::OnComputeScroll( | 383 void SynchronousCompositorProxy::OnComputeScroll( |
| 380 const SyncCompositorCommonBrowserParams& common_params, | 384 const SyncCompositorCommonBrowserParams& common_params, |
| 381 base::TimeTicks animation_time) { | 385 base::TimeTicks animation_time) { |
| 382 ProcessCommonParams(common_params); | 386 ProcessCommonParams(common_params); |
| 383 if (need_animate_scroll_) { | 387 if (need_animate_scroll_) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 402 } | 406 } |
| 403 if (common_params.update_root_scroll_offset && | 407 if (common_params.update_root_scroll_offset && |
| 404 total_scroll_offset_ != common_params.root_scroll_offset) { | 408 total_scroll_offset_ != common_params.root_scroll_offset) { |
| 405 total_scroll_offset_ = common_params.root_scroll_offset; | 409 total_scroll_offset_ = common_params.root_scroll_offset; |
| 406 input_handler_proxy_->SynchronouslySetRootScrollOffset( | 410 input_handler_proxy_->SynchronouslySetRootScrollOffset( |
| 407 total_scroll_offset_); | 411 total_scroll_offset_); |
| 408 } | 412 } |
| 409 begin_frame_source_->SetBeginFrameSourcePaused( | 413 begin_frame_source_->SetBeginFrameSourcePaused( |
| 410 common_params.begin_frame_source_paused); | 414 common_params.begin_frame_source_paused); |
| 411 if (!common_params.ack.resources.empty()) { | 415 if (!common_params.ack.resources.empty()) { |
| 412 output_surface_->ReturnResources(common_params.ack); | 416 output_surface_->ReturnResources( |
| 417 common_params.output_surface_id_for_returned_resources, |
| 418 common_params.ack); |
| 413 } | 419 } |
| 414 } | 420 } |
| 415 | 421 |
| 416 } // namespace content | 422 } // namespace content |
| OLD | NEW |