OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "cc/trees/layer_tree_impl.h" | 5 #include "cc/trees/layer_tree_impl.h" |
6 | 6 |
7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
8 #include "cc/animation/keyframed_animation_curve.h" | 8 #include "cc/animation/keyframed_animation_curve.h" |
9 #include "cc/animation/scrollbar_animation_controller.h" | 9 #include "cc/animation/scrollbar_animation_controller.h" |
10 #include "cc/debug/traced_value.h" | 10 #include "cc/debug/traced_value.h" |
11 #include "cc/layers/heads_up_display_layer_impl.h" | 11 #include "cc/layers/heads_up_display_layer_impl.h" |
12 #include "cc/layers/layer.h" | 12 #include "cc/layers/layer.h" |
13 #include "cc/layers/render_surface_impl.h" | 13 #include "cc/layers/render_surface_impl.h" |
14 #include "cc/layers/scrollbar_layer_impl_base.h" | 14 #include "cc/layers/scrollbar_layer_impl_base.h" |
15 #include "cc/trees/layer_tree_host_common.h" | 15 #include "cc/trees/layer_tree_host_common.h" |
16 #include "cc/trees/layer_tree_host_impl.h" | 16 #include "cc/trees/layer_tree_host_impl.h" |
17 #include "ui/gfx/size_conversions.h" | 17 #include "ui/gfx/size_conversions.h" |
18 #include "ui/gfx/vector2d_conversions.h" | 18 #include "ui/gfx/vector2d_conversions.h" |
19 | 19 |
| 20 namespace { |
| 21 const size_t kMaxQueuedSwapPromiseNumber = 100; |
| 22 } // namespace |
| 23 |
20 namespace cc { | 24 namespace cc { |
21 | 25 |
22 LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) | 26 LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl) |
23 : layer_tree_host_impl_(layer_tree_host_impl), | 27 : layer_tree_host_impl_(layer_tree_host_impl), |
24 source_frame_number_(-1), | 28 source_frame_number_(-1), |
25 hud_layer_(0), | 29 hud_layer_(0), |
26 root_scroll_layer_(NULL), | 30 root_scroll_layer_(NULL), |
27 currently_scrolling_layer_(NULL), | 31 currently_scrolling_layer_(NULL), |
28 root_layer_scroll_offset_delegate_(NULL), | 32 root_layer_scroll_offset_delegate_(NULL), |
29 background_color_(0), | 33 background_color_(0), |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 // The request queue should have been processed and does not require a push. | 116 // The request queue should have been processed and does not require a push. |
113 DCHECK_EQ(ui_resource_request_queue_.size(), 0u); | 117 DCHECK_EQ(ui_resource_request_queue_.size(), 0u); |
114 | 118 |
115 if (next_activation_forces_redraw_) { | 119 if (next_activation_forces_redraw_) { |
116 layer_tree_host_impl_->SetFullRootLayerDamage(); | 120 layer_tree_host_impl_->SetFullRootLayerDamage(); |
117 next_activation_forces_redraw_ = false; | 121 next_activation_forces_redraw_ = false; |
118 } | 122 } |
119 | 123 |
120 target_tree->SetLatencyInfo(latency_info_); | 124 target_tree->SetLatencyInfo(latency_info_); |
121 latency_info_.Clear(); | 125 latency_info_.Clear(); |
| 126 |
| 127 target_tree->TakeSwapPromise(&swap_promise_list_); |
| 128 |
122 target_tree->SetPageScaleFactorAndLimits( | 129 target_tree->SetPageScaleFactorAndLimits( |
123 page_scale_factor(), min_page_scale_factor(), max_page_scale_factor()); | 130 page_scale_factor(), min_page_scale_factor(), max_page_scale_factor()); |
124 target_tree->SetPageScaleDelta( | 131 target_tree->SetPageScaleDelta( |
125 target_tree->page_scale_delta() / target_tree->sent_page_scale_delta()); | 132 target_tree->page_scale_delta() / target_tree->sent_page_scale_delta()); |
126 target_tree->set_sent_page_scale_delta(1); | 133 target_tree->set_sent_page_scale_delta(1); |
127 | 134 |
128 if (settings().use_pinch_virtual_viewport) { | 135 if (settings().use_pinch_virtual_viewport) { |
129 target_tree->SetViewportLayersFromIds( | 136 target_tree->SetViewportLayersFromIds( |
130 page_scale_layer_->id(), | 137 page_scale_layer_->id(), |
131 inner_viewport_scroll_layer_->id(), | 138 inner_viewport_scroll_layer_->id(), |
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
689 } | 696 } |
690 | 697 |
691 const ui::LatencyInfo& LayerTreeImpl::GetLatencyInfo() { | 698 const ui::LatencyInfo& LayerTreeImpl::GetLatencyInfo() { |
692 return latency_info_; | 699 return latency_info_; |
693 } | 700 } |
694 | 701 |
695 void LayerTreeImpl::ClearLatencyInfo() { | 702 void LayerTreeImpl::ClearLatencyInfo() { |
696 latency_info_.Clear(); | 703 latency_info_.Clear(); |
697 } | 704 } |
698 | 705 |
| 706 void LayerTreeImpl::QueueSwapPromise(const SwapPromise& swap_promise) { |
| 707 if (swap_promise_list_.size() > kMaxQueuedSwapPromiseNumber) { |
| 708 NOTREACHED() << "LayerTreeImpl::swap_promise_list overflows"; |
| 709 swap_promise_list_.clear(); |
| 710 } |
| 711 swap_promise_list_.push_back(swap_promise); |
| 712 } |
| 713 |
| 714 void LayerTreeImpl::TakeSwapPromise( |
| 715 std::vector<SwapPromise>* new_swap_promise) { |
| 716 swap_promise_list_.insert(swap_promise_list_.end(), |
| 717 new_swap_promise->begin(), |
| 718 new_swap_promise->end()); |
| 719 new_swap_promise->clear(); |
| 720 } |
| 721 |
| 722 void LayerTreeImpl::FinishSwapPromise() { |
| 723 for (size_t i = 0; i < swap_promise_list_.size(); i++) { |
| 724 swap_promise_list_[i].did_swap_callback.Run(); |
| 725 } |
| 726 swap_promise_list_.clear(); |
| 727 } |
| 728 |
| 729 void LayerTreeImpl::BreakSwapPromise(const std::string& msg) { |
| 730 for (size_t i = 0; i < swap_promise_list_.size(); i++) { |
| 731 swap_promise_list_[i].swap_aborted_callback.Run(msg); |
| 732 } |
| 733 swap_promise_list_.clear(); |
| 734 } |
| 735 |
699 void LayerTreeImpl::DidModifyTilePriorities() { | 736 void LayerTreeImpl::DidModifyTilePriorities() { |
700 layer_tree_host_impl_->DidModifyTilePriorities(); | 737 layer_tree_host_impl_->DidModifyTilePriorities(); |
701 } | 738 } |
702 | 739 |
703 void LayerTreeImpl::set_ui_resource_request_queue( | 740 void LayerTreeImpl::set_ui_resource_request_queue( |
704 const UIResourceRequestQueue& queue) { | 741 const UIResourceRequestQueue& queue) { |
705 ui_resource_request_queue_ = queue; | 742 ui_resource_request_queue_ = queue; |
706 } | 743 } |
707 | 744 |
708 ResourceProvider::ResourceId LayerTreeImpl::ResourceIdForUIResource( | 745 ResourceProvider::ResourceId LayerTreeImpl::ResourceIdForUIResource( |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
765 const std::vector<LayerImpl*> LayerTreeImpl::LayersWithCopyOutputRequest() | 802 const std::vector<LayerImpl*> LayerTreeImpl::LayersWithCopyOutputRequest() |
766 const { | 803 const { |
767 // Only the active tree needs to know about layers with copy requests, as | 804 // Only the active tree needs to know about layers with copy requests, as |
768 // they are aborted if not serviced during draw. | 805 // they are aborted if not serviced during draw. |
769 DCHECK(IsActiveTree()); | 806 DCHECK(IsActiveTree()); |
770 | 807 |
771 return layers_with_copy_output_request_; | 808 return layers_with_copy_output_request_; |
772 } | 809 } |
773 | 810 |
774 } // namespace cc | 811 } // namespace cc |
OLD | NEW |