| 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/browser/android/synchronous_compositor_host.h" | 5 #include "content/browser/android/synchronous_compositor_host.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/containers/hash_tables.h" | 9 #include "base/containers/hash_tables.h" |
| 10 #include "base/memory/shared_memory.h" | 10 #include "base/memory/shared_memory.h" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 bool use_in_proc_software_draw) | 33 bool use_in_proc_software_draw) |
| 34 : rwhva_(rwhva), | 34 : rwhva_(rwhva), |
| 35 client_(client), | 35 client_(client), |
| 36 ui_task_runner_( | 36 ui_task_runner_( |
| 37 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)), | 37 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)), |
| 38 routing_id_(rwhva_->GetRenderWidgetHost()->GetRoutingID()), | 38 routing_id_(rwhva_->GetRenderWidgetHost()->GetRoutingID()), |
| 39 sender_(rwhva_->GetRenderWidgetHost()), | 39 sender_(rwhva_->GetRenderWidgetHost()), |
| 40 use_in_process_zero_copy_software_draw_(use_in_proc_software_draw), | 40 use_in_process_zero_copy_software_draw_(use_in_proc_software_draw), |
| 41 is_active_(false), | 41 is_active_(false), |
| 42 bytes_limit_(0u), | 42 bytes_limit_(0u), |
| 43 output_surface_id_for_returned_resources_(0u), |
| 43 root_scroll_offset_updated_by_browser_(false), | 44 root_scroll_offset_updated_by_browser_(false), |
| 44 renderer_param_version_(0u), | 45 renderer_param_version_(0u), |
| 45 need_animate_scroll_(false), | 46 need_animate_scroll_(false), |
| 46 need_invalidate_count_(0u), | 47 need_invalidate_count_(0u), |
| 47 need_begin_frame_(false), | 48 need_begin_frame_(false), |
| 48 did_activate_pending_tree_count_(0u), | 49 did_activate_pending_tree_count_(0u), |
| 49 weak_ptr_factory_(this) { | 50 weak_ptr_factory_(this) { |
| 50 client_->DidInitializeCompositor(this); | 51 client_->DidInitializeCompositor(this); |
| 51 } | 52 } |
| 52 | 53 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 63 IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_OverScroll, OnOverScroll) | 64 IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_OverScroll, OnOverScroll) |
| 64 IPC_MESSAGE_UNHANDLED(handled = false) | 65 IPC_MESSAGE_UNHANDLED(handled = false) |
| 65 IPC_END_MESSAGE_MAP() | 66 IPC_END_MESSAGE_MAP() |
| 66 return handled; | 67 return handled; |
| 67 } | 68 } |
| 68 | 69 |
| 69 void SynchronousCompositorHost::DidBecomeCurrent() { | 70 void SynchronousCompositorHost::DidBecomeCurrent() { |
| 70 client_->DidBecomeCurrent(this); | 71 client_->DidBecomeCurrent(this); |
| 71 } | 72 } |
| 72 | 73 |
| 73 scoped_ptr<cc::CompositorFrame> SynchronousCompositorHost::DemandDrawHw( | 74 SynchronousCompositor::Frame SynchronousCompositorHost::DemandDrawHw( |
| 74 const gfx::Size& surface_size, | 75 const gfx::Size& surface_size, |
| 75 const gfx::Transform& transform, | 76 const gfx::Transform& transform, |
| 76 const gfx::Rect& viewport, | 77 const gfx::Rect& viewport, |
| 77 const gfx::Rect& clip, | 78 const gfx::Rect& clip, |
| 78 const gfx::Rect& viewport_rect_for_tile_priority, | 79 const gfx::Rect& viewport_rect_for_tile_priority, |
| 79 const gfx::Transform& transform_for_tile_priority) { | 80 const gfx::Transform& transform_for_tile_priority) { |
| 80 SyncCompositorDemandDrawHwParams params(surface_size, transform, viewport, | 81 SyncCompositorDemandDrawHwParams params(surface_size, transform, viewport, |
| 81 clip, viewport_rect_for_tile_priority, | 82 clip, viewport_rect_for_tile_priority, |
| 82 transform_for_tile_priority); | 83 transform_for_tile_priority); |
| 83 scoped_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame); | 84 SynchronousCompositor::Frame frame; |
| 85 frame.frame.reset(new cc::CompositorFrame); |
| 84 SyncCompositorCommonBrowserParams common_browser_params; | 86 SyncCompositorCommonBrowserParams common_browser_params; |
| 85 PopulateCommonParams(&common_browser_params); | 87 PopulateCommonParams(&common_browser_params); |
| 86 SyncCompositorCommonRendererParams common_renderer_params; | 88 SyncCompositorCommonRendererParams common_renderer_params; |
| 87 if (!sender_->Send(new SyncCompositorMsg_DemandDrawHw( | 89 if (!sender_->Send(new SyncCompositorMsg_DemandDrawHw( |
| 88 routing_id_, common_browser_params, params, &common_renderer_params, | 90 routing_id_, common_browser_params, params, &common_renderer_params, |
| 89 frame.get()))) { | 91 &frame.output_surface_id, frame.frame.get()))) { |
| 90 return nullptr; | 92 return SynchronousCompositor::Frame(); |
| 91 } | 93 } |
| 92 ProcessCommonParams(common_renderer_params); | 94 ProcessCommonParams(common_renderer_params); |
| 93 if (!frame->delegated_frame_data) { | 95 if (!frame.frame->delegated_frame_data) { |
| 94 // This can happen if compositor did not swap in this draw. | 96 // This can happen if compositor did not swap in this draw. |
| 95 frame.reset(); | 97 frame.frame.reset(); |
| 96 } | 98 } |
| 97 if (frame) | 99 if (frame.frame) |
| 98 UpdateFrameMetaData(frame->metadata); | 100 UpdateFrameMetaData(frame.frame->metadata); |
| 99 return frame; | 101 return frame; |
| 100 } | 102 } |
| 101 | 103 |
| 102 void SynchronousCompositorHost::UpdateFrameMetaData( | 104 void SynchronousCompositorHost::UpdateFrameMetaData( |
| 103 const cc::CompositorFrameMetadata& frame_metadata) { | 105 const cc::CompositorFrameMetadata& frame_metadata) { |
| 104 rwhva_->SynchronousFrameMetadata(frame_metadata); | 106 rwhva_->SynchronousFrameMetadata(frame_metadata); |
| 105 } | 107 } |
| 106 | 108 |
| 107 namespace { | 109 namespace { |
| 108 | 110 |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 software_draw_shm_ = std::move(software_draw_shm); | 262 software_draw_shm_ = std::move(software_draw_shm); |
| 261 ProcessCommonParams(common_renderer_params); | 263 ProcessCommonParams(common_renderer_params); |
| 262 } | 264 } |
| 263 | 265 |
| 264 void SynchronousCompositorHost::SendZeroMemory() { | 266 void SynchronousCompositorHost::SendZeroMemory() { |
| 265 // No need to check return value. | 267 // No need to check return value. |
| 266 sender_->Send(new SyncCompositorMsg_ZeroSharedMemory(routing_id_)); | 268 sender_->Send(new SyncCompositorMsg_ZeroSharedMemory(routing_id_)); |
| 267 } | 269 } |
| 268 | 270 |
| 269 void SynchronousCompositorHost::ReturnResources( | 271 void SynchronousCompositorHost::ReturnResources( |
| 272 uint32_t output_surface_id, |
| 270 const cc::CompositorFrameAck& frame_ack) { | 273 const cc::CompositorFrameAck& frame_ack) { |
| 274 if (output_surface_id_for_returned_resources_ != output_surface_id) { |
| 275 returned_resources_.clear(); |
| 276 output_surface_id_for_returned_resources_ = output_surface_id; |
| 277 } |
| 271 returned_resources_.insert(returned_resources_.end(), | 278 returned_resources_.insert(returned_resources_.end(), |
| 272 frame_ack.resources.begin(), | 279 frame_ack.resources.begin(), |
| 273 frame_ack.resources.end()); | 280 frame_ack.resources.end()); |
| 274 } | 281 } |
| 275 | 282 |
| 276 void SynchronousCompositorHost::SetMemoryPolicy(size_t bytes_limit) { | 283 void SynchronousCompositorHost::SetMemoryPolicy(size_t bytes_limit) { |
| 277 if (bytes_limit_ == bytes_limit) | 284 if (bytes_limit_ == bytes_limit) |
| 278 return; | 285 return; |
| 279 size_t current_bytes_limit = bytes_limit_; | 286 size_t current_bytes_limit = bytes_limit_; |
| 280 bytes_limit_ = bytes_limit; | 287 bytes_limit_ = bytes_limit; |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 373 client_->DidOverscroll(over_scroll_params.accumulated_overscroll, | 380 client_->DidOverscroll(over_scroll_params.accumulated_overscroll, |
| 374 over_scroll_params.latest_overscroll_delta, | 381 over_scroll_params.latest_overscroll_delta, |
| 375 over_scroll_params.current_fling_velocity); | 382 over_scroll_params.current_fling_velocity); |
| 376 } | 383 } |
| 377 | 384 |
| 378 void SynchronousCompositorHost::PopulateCommonParams( | 385 void SynchronousCompositorHost::PopulateCommonParams( |
| 379 SyncCompositorCommonBrowserParams* params) { | 386 SyncCompositorCommonBrowserParams* params) { |
| 380 DCHECK(params); | 387 DCHECK(params); |
| 381 DCHECK(params->ack.resources.empty()); | 388 DCHECK(params->ack.resources.empty()); |
| 382 params->bytes_limit = bytes_limit_; | 389 params->bytes_limit = bytes_limit_; |
| 390 params->output_surface_id_for_returned_resources = |
| 391 output_surface_id_for_returned_resources_; |
| 383 params->ack.resources.swap(returned_resources_); | 392 params->ack.resources.swap(returned_resources_); |
| 384 if (root_scroll_offset_updated_by_browser_) { | 393 if (root_scroll_offset_updated_by_browser_) { |
| 385 params->root_scroll_offset = root_scroll_offset_; | 394 params->root_scroll_offset = root_scroll_offset_; |
| 386 params->update_root_scroll_offset = root_scroll_offset_updated_by_browser_; | 395 params->update_root_scroll_offset = root_scroll_offset_updated_by_browser_; |
| 387 root_scroll_offset_updated_by_browser_ = false; | 396 root_scroll_offset_updated_by_browser_ = false; |
| 388 } | 397 } |
| 389 params->begin_frame_source_paused = !is_active_; | 398 params->begin_frame_source_paused = !is_active_; |
| 390 | 399 |
| 391 weak_ptr_factory_.InvalidateWeakPtrs(); | 400 weak_ptr_factory_.InvalidateWeakPtrs(); |
| 392 } | 401 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 427 params.scrollable_size, params.page_scale_factor, | 436 params.scrollable_size, params.page_scale_factor, |
| 428 params.min_page_scale_factor, params.max_page_scale_factor); | 437 params.min_page_scale_factor, params.max_page_scale_factor); |
| 429 } | 438 } |
| 430 } | 439 } |
| 431 | 440 |
| 432 void SynchronousCompositorHost::UpdateNeedsBeginFrames() { | 441 void SynchronousCompositorHost::UpdateNeedsBeginFrames() { |
| 433 rwhva_->OnSetNeedsBeginFrames(is_active_ && need_begin_frame_); | 442 rwhva_->OnSetNeedsBeginFrames(is_active_ && need_begin_frame_); |
| 434 } | 443 } |
| 435 | 444 |
| 436 } // namespace content | 445 } // namespace content |
| OLD | NEW |