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 24 matching lines...) Expand all Loading... | |
35 : rwhva_(rwhva), | 35 : rwhva_(rwhva), |
36 client_(client), | 36 client_(client), |
37 ui_task_runner_( | 37 ui_task_runner_( |
38 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)), | 38 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)), |
39 routing_id_(rwhva_->GetRenderWidgetHost()->GetRoutingID()), | 39 routing_id_(rwhva_->GetRenderWidgetHost()->GetRoutingID()), |
40 sender_(rwhva_->GetRenderWidgetHost()), | 40 sender_(rwhva_->GetRenderWidgetHost()), |
41 async_input_(async_input), | 41 async_input_(async_input), |
42 use_in_process_zero_copy_software_draw_(use_in_proc_software_draw), | 42 use_in_process_zero_copy_software_draw_(use_in_proc_software_draw), |
43 is_active_(false), | 43 is_active_(false), |
44 bytes_limit_(0u), | 44 bytes_limit_(0u), |
45 output_surface_id_for_returned_resources_(0u), | |
no sievers
2016/03/18 20:03:13
This looks like it might be potentially brittle co
boliu
2016/03/19 00:18:16
Doesn't matter anymore, that the id is set in draw
| |
45 root_scroll_offset_updated_by_browser_(false), | 46 root_scroll_offset_updated_by_browser_(false), |
46 renderer_param_version_(0u), | 47 renderer_param_version_(0u), |
47 need_animate_scroll_(false), | 48 need_animate_scroll_(false), |
48 need_invalidate_count_(0u), | 49 need_invalidate_count_(0u), |
49 need_begin_frame_(false), | 50 need_begin_frame_(false), |
50 did_activate_pending_tree_count_(0u), | 51 did_activate_pending_tree_count_(0u), |
51 weak_ptr_factory_(this) { | 52 weak_ptr_factory_(this) { |
52 client_->DidInitializeCompositor(this); | 53 client_->DidInitializeCompositor(this); |
53 } | 54 } |
54 | 55 |
(...skipping 10 matching lines...) Expand all Loading... | |
65 IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_OverScroll, OnOverScroll) | 66 IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_OverScroll, OnOverScroll) |
66 IPC_MESSAGE_UNHANDLED(handled = false) | 67 IPC_MESSAGE_UNHANDLED(handled = false) |
67 IPC_END_MESSAGE_MAP() | 68 IPC_END_MESSAGE_MAP() |
68 return handled; | 69 return handled; |
69 } | 70 } |
70 | 71 |
71 void SynchronousCompositorHost::DidBecomeCurrent() { | 72 void SynchronousCompositorHost::DidBecomeCurrent() { |
72 client_->DidBecomeCurrent(this); | 73 client_->DidBecomeCurrent(this); |
73 } | 74 } |
74 | 75 |
75 scoped_ptr<cc::CompositorFrame> SynchronousCompositorHost::DemandDrawHw( | 76 SynchronousCompositor::Frame SynchronousCompositorHost::DemandDrawHw( |
76 const gfx::Size& surface_size, | 77 const gfx::Size& surface_size, |
77 const gfx::Transform& transform, | 78 const gfx::Transform& transform, |
78 const gfx::Rect& viewport, | 79 const gfx::Rect& viewport, |
79 const gfx::Rect& clip, | 80 const gfx::Rect& clip, |
80 const gfx::Rect& viewport_rect_for_tile_priority, | 81 const gfx::Rect& viewport_rect_for_tile_priority, |
81 const gfx::Transform& transform_for_tile_priority) { | 82 const gfx::Transform& transform_for_tile_priority) { |
82 SyncCompositorDemandDrawHwParams params(surface_size, transform, viewport, | 83 SyncCompositorDemandDrawHwParams params(surface_size, transform, viewport, |
83 clip, viewport_rect_for_tile_priority, | 84 clip, viewport_rect_for_tile_priority, |
84 transform_for_tile_priority); | 85 transform_for_tile_priority); |
85 scoped_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame); | 86 SynchronousCompositor::Frame frame; |
87 frame.frame.reset(new cc::CompositorFrame); | |
86 SyncCompositorCommonBrowserParams common_browser_params; | 88 SyncCompositorCommonBrowserParams common_browser_params; |
87 PopulateCommonParams(&common_browser_params); | 89 PopulateCommonParams(&common_browser_params); |
88 SyncCompositorCommonRendererParams common_renderer_params; | 90 SyncCompositorCommonRendererParams common_renderer_params; |
89 if (!sender_->Send(new SyncCompositorMsg_DemandDrawHw( | 91 if (!sender_->Send(new SyncCompositorMsg_DemandDrawHw( |
90 routing_id_, common_browser_params, params, &common_renderer_params, | 92 routing_id_, common_browser_params, params, &common_renderer_params, |
91 frame.get()))) { | 93 &frame.output_surface_id, frame.frame.get()))) { |
92 return nullptr; | 94 return SynchronousCompositor::Frame(); |
93 } | 95 } |
94 ProcessCommonParams(common_renderer_params); | 96 ProcessCommonParams(common_renderer_params); |
95 if (!frame->delegated_frame_data) { | 97 if (!frame.frame->delegated_frame_data) { |
96 // This can happen if compositor did not swap in this draw. | 98 // This can happen if compositor did not swap in this draw. |
97 frame.reset(); | 99 frame.frame.reset(); |
98 } | 100 } |
99 if (frame) | 101 if (frame.frame) |
100 UpdateFrameMetaData(frame->metadata); | 102 UpdateFrameMetaData(frame.frame->metadata); |
101 return frame; | 103 return frame; |
102 } | 104 } |
103 | 105 |
104 void SynchronousCompositorHost::UpdateFrameMetaData( | 106 void SynchronousCompositorHost::UpdateFrameMetaData( |
105 const cc::CompositorFrameMetadata& frame_metadata) { | 107 const cc::CompositorFrameMetadata& frame_metadata) { |
106 rwhva_->SynchronousFrameMetadata(frame_metadata); | 108 rwhva_->SynchronousFrameMetadata(frame_metadata); |
107 } | 109 } |
108 | 110 |
109 namespace { | 111 namespace { |
110 | 112 |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
262 software_draw_shm_ = std::move(software_draw_shm); | 264 software_draw_shm_ = std::move(software_draw_shm); |
263 ProcessCommonParams(common_renderer_params); | 265 ProcessCommonParams(common_renderer_params); |
264 } | 266 } |
265 | 267 |
266 void SynchronousCompositorHost::SendZeroMemory() { | 268 void SynchronousCompositorHost::SendZeroMemory() { |
267 // No need to check return value. | 269 // No need to check return value. |
268 sender_->Send(new SyncCompositorMsg_ZeroSharedMemory(routing_id_)); | 270 sender_->Send(new SyncCompositorMsg_ZeroSharedMemory(routing_id_)); |
269 } | 271 } |
270 | 272 |
271 void SynchronousCompositorHost::ReturnResources( | 273 void SynchronousCompositorHost::ReturnResources( |
274 uint32_t output_surface_id, | |
272 const cc::CompositorFrameAck& frame_ack) { | 275 const cc::CompositorFrameAck& frame_ack) { |
276 if (output_surface_id_for_returned_resources_ != output_surface_id) { | |
277 if ((output_surface_id_for_returned_resources_ - output_surface_id) < | |
278 0x80000000) { | |
279 return; | |
280 } | |
281 returned_resources_.clear(); | |
282 output_surface_id_for_returned_resources_ = output_surface_id; | |
no sievers
2016/03/18 20:03:13
The logic in the if-block here is a bit confusing.
boliu
2016/03/19 00:18:16
Hmm, yeah, that works. hush actually suggested tha
| |
283 } | |
273 returned_resources_.insert(returned_resources_.end(), | 284 returned_resources_.insert(returned_resources_.end(), |
274 frame_ack.resources.begin(), | 285 frame_ack.resources.begin(), |
275 frame_ack.resources.end()); | 286 frame_ack.resources.end()); |
276 } | 287 } |
277 | 288 |
278 void SynchronousCompositorHost::SetMemoryPolicy(size_t bytes_limit) { | 289 void SynchronousCompositorHost::SetMemoryPolicy(size_t bytes_limit) { |
279 if (bytes_limit_ == bytes_limit) | 290 if (bytes_limit_ == bytes_limit) |
280 return; | 291 return; |
281 size_t current_bytes_limit = bytes_limit_; | 292 size_t current_bytes_limit = bytes_limit_; |
282 bytes_limit_ = bytes_limit; | 293 bytes_limit_ = bytes_limit; |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
382 const DidOverscrollParams& over_scroll_params) { | 393 const DidOverscrollParams& over_scroll_params) { |
383 ProcessCommonParams(params); | 394 ProcessCommonParams(params); |
384 DidOverscroll(over_scroll_params); | 395 DidOverscroll(over_scroll_params); |
385 } | 396 } |
386 | 397 |
387 void SynchronousCompositorHost::PopulateCommonParams( | 398 void SynchronousCompositorHost::PopulateCommonParams( |
388 SyncCompositorCommonBrowserParams* params) { | 399 SyncCompositorCommonBrowserParams* params) { |
389 DCHECK(params); | 400 DCHECK(params); |
390 DCHECK(params->ack.resources.empty()); | 401 DCHECK(params->ack.resources.empty()); |
391 params->bytes_limit = bytes_limit_; | 402 params->bytes_limit = bytes_limit_; |
403 params->output_surface_id_for_returned_resources = | |
404 output_surface_id_for_returned_resources_; | |
392 params->ack.resources.swap(returned_resources_); | 405 params->ack.resources.swap(returned_resources_); |
393 if (root_scroll_offset_updated_by_browser_) { | 406 if (root_scroll_offset_updated_by_browser_) { |
394 params->root_scroll_offset = root_scroll_offset_; | 407 params->root_scroll_offset = root_scroll_offset_; |
395 params->update_root_scroll_offset = root_scroll_offset_updated_by_browser_; | 408 params->update_root_scroll_offset = root_scroll_offset_updated_by_browser_; |
396 root_scroll_offset_updated_by_browser_ = false; | 409 root_scroll_offset_updated_by_browser_ = false; |
397 } | 410 } |
398 params->begin_frame_source_paused = !is_active_; | 411 params->begin_frame_source_paused = !is_active_; |
399 | 412 |
400 weak_ptr_factory_.InvalidateWeakPtrs(); | 413 weak_ptr_factory_.InvalidateWeakPtrs(); |
401 } | 414 } |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
436 params.scrollable_size, params.page_scale_factor, | 449 params.scrollable_size, params.page_scale_factor, |
437 params.min_page_scale_factor, params.max_page_scale_factor); | 450 params.min_page_scale_factor, params.max_page_scale_factor); |
438 } | 451 } |
439 } | 452 } |
440 | 453 |
441 void SynchronousCompositorHost::UpdateNeedsBeginFrames() { | 454 void SynchronousCompositorHost::UpdateNeedsBeginFrames() { |
442 rwhva_->OnSetNeedsBeginFrames(is_active_ && need_begin_frame_); | 455 rwhva_->OnSetNeedsBeginFrames(is_active_ && need_begin_frame_); |
443 } | 456 } |
444 | 457 |
445 } // namespace content | 458 } // namespace content |
OLD | NEW |