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 current_output_surface_id_(0u), | |
hush (inactive)
2016/03/08 23:55:49
Not sure where we get the correct value of current
boliu
2016/03/09 00:29:59
Yes
hush (inactive)
2016/03/09 02:36:17
yeah. Renaming the variable name to indicate this
| |
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 (current_output_surface_id_ != output_surface_id) { | |
275 returned_resources_.clear(); | |
276 current_output_surface_id_ = 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 = current_output_surface_id_; | |
383 params->ack.resources.swap(returned_resources_); | 391 params->ack.resources.swap(returned_resources_); |
384 if (root_scroll_offset_updated_by_browser_) { | 392 if (root_scroll_offset_updated_by_browser_) { |
385 params->root_scroll_offset = root_scroll_offset_; | 393 params->root_scroll_offset = root_scroll_offset_; |
386 params->update_root_scroll_offset = root_scroll_offset_updated_by_browser_; | 394 params->update_root_scroll_offset = root_scroll_offset_updated_by_browser_; |
387 root_scroll_offset_updated_by_browser_ = false; | 395 root_scroll_offset_updated_by_browser_ = false; |
388 } | 396 } |
389 params->begin_frame_source_paused = !is_active_; | 397 params->begin_frame_source_paused = !is_active_; |
390 | 398 |
391 weak_ptr_factory_.InvalidateWeakPtrs(); | 399 weak_ptr_factory_.InvalidateWeakPtrs(); |
392 } | 400 } |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
427 params.scrollable_size, params.page_scale_factor, | 435 params.scrollable_size, params.page_scale_factor, |
428 params.min_page_scale_factor, params.max_page_scale_factor); | 436 params.min_page_scale_factor, params.max_page_scale_factor); |
429 } | 437 } |
430 } | 438 } |
431 | 439 |
432 void SynchronousCompositorHost::UpdateNeedsBeginFrames() { | 440 void SynchronousCompositorHost::UpdateNeedsBeginFrames() { |
433 rwhva_->OnSetNeedsBeginFrames(is_active_ && need_begin_frame_); | 441 rwhva_->OnSetNeedsBeginFrames(is_active_ && need_begin_frame_); |
434 } | 442 } |
435 | 443 |
436 } // namespace content | 444 } // namespace content |
OLD | NEW |