| 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 |