| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 #include "ui/gfx/geometry/point_conversions.h" | 49 #include "ui/gfx/geometry/point_conversions.h" |
| 50 #include "ui/gfx/geometry/rect_conversions.h" | 50 #include "ui/gfx/geometry/rect_conversions.h" |
| 51 #include "ui/gfx/geometry/size_conversions.h" | 51 #include "ui/gfx/geometry/size_conversions.h" |
| 52 #include "ui/gfx/geometry/vector2d_conversions.h" | 52 #include "ui/gfx/geometry/vector2d_conversions.h" |
| 53 | 53 |
| 54 namespace cc { | 54 namespace cc { |
| 55 | 55 |
| 56 LayerTreeImpl::LayerTreeImpl( | 56 LayerTreeImpl::LayerTreeImpl( |
| 57 LayerTreeHostImpl* layer_tree_host_impl, | 57 LayerTreeHostImpl* layer_tree_host_impl, |
| 58 scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor, | 58 scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor, |
| 59 scoped_refptr<SyncedProperty<ScaleGroup>> subframe_page_scale_factor, |
| 59 scoped_refptr<SyncedBrowserControls> top_controls_shown_ratio, | 60 scoped_refptr<SyncedBrowserControls> top_controls_shown_ratio, |
| 60 scoped_refptr<SyncedElasticOverscroll> elastic_overscroll) | 61 scoped_refptr<SyncedElasticOverscroll> elastic_overscroll) |
| 61 : layer_tree_host_impl_(layer_tree_host_impl), | 62 : layer_tree_host_impl_(layer_tree_host_impl), |
| 62 source_frame_number_(-1), | 63 source_frame_number_(-1), |
| 63 is_first_frame_after_commit_tracker_(-1), | 64 is_first_frame_after_commit_tracker_(-1), |
| 64 root_layer_for_testing_(nullptr), | 65 root_layer_for_testing_(nullptr), |
| 65 hud_layer_(nullptr), | 66 hud_layer_(nullptr), |
| 66 background_color_(0), | 67 background_color_(0), |
| 67 has_transparent_background_(false), | 68 has_transparent_background_(false), |
| 68 last_scrolled_layer_id_(Layer::INVALID_ID), | 69 last_scrolled_layer_id_(Layer::INVALID_ID), |
| 69 overscroll_elasticity_layer_id_(Layer::INVALID_ID), | 70 overscroll_elasticity_layer_id_(Layer::INVALID_ID), |
| 70 page_scale_layer_id_(Layer::INVALID_ID), | 71 page_scale_layer_id_(Layer::INVALID_ID), |
| 71 inner_viewport_scroll_layer_id_(Layer::INVALID_ID), | 72 inner_viewport_scroll_layer_id_(Layer::INVALID_ID), |
| 72 outer_viewport_scroll_layer_id_(Layer::INVALID_ID), | 73 outer_viewport_scroll_layer_id_(Layer::INVALID_ID), |
| 73 page_scale_factor_(page_scale_factor), | 74 page_scale_factor_(page_scale_factor), |
| 75 subframe_page_scale_factor_(subframe_page_scale_factor), |
| 74 min_page_scale_factor_(0), | 76 min_page_scale_factor_(0), |
| 75 max_page_scale_factor_(0), | 77 max_page_scale_factor_(0), |
| 76 device_scale_factor_(1.f), | 78 device_scale_factor_(1.f), |
| 77 painted_device_scale_factor_(1.f), | 79 painted_device_scale_factor_(1.f), |
| 78 elastic_overscroll_(elastic_overscroll), | 80 elastic_overscroll_(elastic_overscroll), |
| 79 layers_(new OwnedLayerImplList), | 81 layers_(new OwnedLayerImplList), |
| 80 viewport_size_invalid_(false), | 82 viewport_size_invalid_(false), |
| 81 needs_update_draw_properties_(true), | 83 needs_update_draw_properties_(true), |
| 82 needs_full_tree_sync_(true), | 84 needs_full_tree_sync_(true), |
| 83 next_activation_forces_redraw_(false), | 85 next_activation_forces_redraw_(false), |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 swap_promise_list_.clear(); | 446 swap_promise_list_.clear(); |
| 445 | 447 |
| 446 target_tree->set_browser_controls_shrink_blink_size( | 448 target_tree->set_browser_controls_shrink_blink_size( |
| 447 browser_controls_shrink_blink_size_); | 449 browser_controls_shrink_blink_size_); |
| 448 target_tree->set_top_controls_height(top_controls_height_); | 450 target_tree->set_top_controls_height(top_controls_height_); |
| 449 target_tree->set_bottom_controls_height(bottom_controls_height_); | 451 target_tree->set_bottom_controls_height(bottom_controls_height_); |
| 450 target_tree->PushBrowserControls(nullptr); | 452 target_tree->PushBrowserControls(nullptr); |
| 451 | 453 |
| 452 // Active tree already shares the page_scale_factor object with pending | 454 // Active tree already shares the page_scale_factor object with pending |
| 453 // tree so only the limits need to be provided. | 455 // tree so only the limits need to be provided. |
| 454 target_tree->PushPageScaleFactorAndLimits(nullptr, min_page_scale_factor(), | 456 target_tree->PushPageScaleFactorAndLimits( |
| 455 max_page_scale_factor()); | 457 nullptr, nullptr, min_page_scale_factor(), max_page_scale_factor()); |
| 456 target_tree->SetDeviceScaleFactor(device_scale_factor()); | 458 target_tree->SetDeviceScaleFactor(device_scale_factor()); |
| 457 target_tree->set_painted_device_scale_factor(painted_device_scale_factor()); | 459 target_tree->set_painted_device_scale_factor(painted_device_scale_factor()); |
| 458 target_tree->SetDeviceColorSpace(device_color_space_); | 460 target_tree->SetDeviceColorSpace(device_color_space_); |
| 459 target_tree->elastic_overscroll()->PushPendingToActive(); | 461 target_tree->elastic_overscroll()->PushPendingToActive(); |
| 460 | 462 |
| 461 target_tree->pending_page_scale_animation_ = | 463 target_tree->pending_page_scale_animation_ = |
| 462 std::move(pending_page_scale_animation_); | 464 std::move(pending_page_scale_animation_); |
| 463 | 465 |
| 464 target_tree->SetViewportLayersFromIds( | 466 target_tree->SetViewportLayersFromIds( |
| 465 overscroll_elasticity_layer_id_, page_scale_layer_id_, | 467 overscroll_elasticity_layer_id_, page_scale_layer_id_, |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 736 if (PageScaleLayer()) { | 738 if (PageScaleLayer()) { |
| 737 draw_property_utils::UpdatePageScaleFactor( | 739 draw_property_utils::UpdatePageScaleFactor( |
| 738 property_trees(), PageScaleLayer(), current_page_scale_factor(), | 740 property_trees(), PageScaleLayer(), current_page_scale_factor(), |
| 739 device_scale_factor(), layer_tree_host_impl_->DrawTransform()); | 741 device_scale_factor(), layer_tree_host_impl_->DrawTransform()); |
| 740 } else { | 742 } else { |
| 741 DCHECK(layer_list_.empty() || active_page_scale == 1); | 743 DCHECK(layer_list_.empty() || active_page_scale == 1); |
| 742 } | 744 } |
| 743 } | 745 } |
| 744 } | 746 } |
| 745 | 747 |
| 748 void LayerTreeImpl::SetSubframePageScaleOnActiveTree( |
| 749 float active_subframe_page_scale) { |
| 750 DCHECK(IsActiveTree()); |
| 751 if (subframe_page_scale_factor()->SetCurrent( |
| 752 ClampPageScaleFactorToLimits(active_subframe_page_scale))) { |
| 753 DidUpdatePageScale(); |
| 754 } |
| 755 } |
| 756 |
| 746 void LayerTreeImpl::PushPageScaleFromMainThread(float page_scale_factor, | 757 void LayerTreeImpl::PushPageScaleFromMainThread(float page_scale_factor, |
| 747 float min_page_scale_factor, | 758 float min_page_scale_factor, |
| 748 float max_page_scale_factor) { | 759 float max_page_scale_factor) { |
| 749 PushPageScaleFactorAndLimits(&page_scale_factor, min_page_scale_factor, | 760 PushPageScaleFactorAndLimits(&page_scale_factor, nullptr, |
| 750 max_page_scale_factor); | 761 min_page_scale_factor, max_page_scale_factor); |
| 751 } | 762 } |
| 752 | 763 |
| 753 void LayerTreeImpl::PushPageScaleFactorAndLimits(const float* page_scale_factor, | 764 void LayerTreeImpl::PushPageScaleFromMainThread( |
| 754 float min_page_scale_factor, | 765 float page_scale_factor, |
| 755 float max_page_scale_factor) { | 766 float subframe_page_scale_factor, |
| 756 DCHECK(page_scale_factor || IsActiveTree()); | 767 float min_page_scale_factor, |
| 768 float max_page_scale_factor) { |
| 769 PushPageScaleFactorAndLimits(&page_scale_factor, &subframe_page_scale_factor, |
| 770 min_page_scale_factor, max_page_scale_factor); |
| 771 } |
| 772 |
| 773 void LayerTreeImpl::PushPageScaleFactorAndLimits( |
| 774 const float* page_scale_factor, |
| 775 const float* subframe_page_scale_factor, |
| 776 float min_page_scale_factor, |
| 777 float max_page_scale_factor) { |
| 778 DCHECK(page_scale_factor || subframe_page_scale_factor || IsActiveTree()); |
| 757 bool changed_page_scale = false; | 779 bool changed_page_scale = false; |
| 780 bool changed_subframe_page_scale = false; |
| 758 | 781 |
| 759 changed_page_scale |= | 782 changed_page_scale |= |
| 760 SetPageScaleFactorLimits(min_page_scale_factor, max_page_scale_factor); | 783 SetPageScaleFactorLimits(min_page_scale_factor, max_page_scale_factor); |
| 761 | 784 |
| 762 if (page_scale_factor) { | 785 if (page_scale_factor) { |
| 763 DCHECK(!IsActiveTree() || !layer_tree_host_impl_->pending_tree()); | 786 DCHECK(!IsActiveTree() || !layer_tree_host_impl_->pending_tree()); |
| 764 changed_page_scale |= page_scale_factor_->Delta() != 1.f; | 787 changed_page_scale |= page_scale_factor_->Delta() != 1.f; |
| 765 // TODO(enne): Once CDP goes away, ignore this call below. The only time | 788 // TODO(enne): Once CDP goes away, ignore this call below. The only time |
| 766 // the property trees will differ is if there's been a page scale on the | 789 // the property trees will differ is if there's been a page scale on the |
| 767 // compositor thread after the begin frame, which is the delta check above. | 790 // compositor thread after the begin frame, which is the delta check above. |
| 768 changed_page_scale |= | 791 changed_page_scale |= |
| 769 page_scale_factor_->PushFromMainThread(*page_scale_factor); | 792 page_scale_factor_->PushFromMainThread(*page_scale_factor); |
| 770 } | 793 } |
| 771 | 794 |
| 795 if (subframe_page_scale_factor) { |
| 796 changed_subframe_page_scale |= subframe_page_scale_factor_->Delta() != 1.f; |
| 797 changed_subframe_page_scale |= |
| 798 subframe_page_scale_factor_->PushFromMainThread( |
| 799 *subframe_page_scale_factor); |
| 800 } |
| 801 |
| 772 if (IsActiveTree()) { | 802 if (IsActiveTree()) { |
| 773 // TODO(enne): Pushing from pending to active should never require | 803 // TODO(enne): Pushing from pending to active should never require |
| 774 // DidUpdatePageScale. The values should already be set by the fully | 804 // DidUpdatePageScale. The values should already be set by the fully |
| 775 // computed property trees being synced from one tree to another. Remove | 805 // computed property trees being synced from one tree to another. Remove |
| 776 // this once CDP goes away. | 806 // this once CDP goes away. |
| 777 changed_page_scale |= page_scale_factor_->PushPendingToActive(); | 807 changed_page_scale |= page_scale_factor_->PushPendingToActive(); |
| 808 // TODO(wjmaclean): subframe_page_scale_factor is not involved in CDP so far |
| 809 // as I know, not sure that that means for this next line. |
| 810 changed_subframe_page_scale |= |
| 811 subframe_page_scale_factor_->PushPendingToActive(); |
| 778 } | 812 } |
| 779 | 813 |
| 780 if (changed_page_scale) | 814 if (changed_page_scale || changed_subframe_page_scale) |
| 781 DidUpdatePageScale(); | 815 DidUpdatePageScale(); |
| 782 | 816 |
| 783 if (page_scale_factor) { | 817 if (page_scale_factor) { |
| 784 if (PageScaleLayer()) { | 818 if (PageScaleLayer()) { |
| 785 draw_property_utils::UpdatePageScaleFactor( | 819 draw_property_utils::UpdatePageScaleFactor( |
| 786 property_trees(), PageScaleLayer(), current_page_scale_factor(), | 820 property_trees(), PageScaleLayer(), current_page_scale_factor(), |
| 787 device_scale_factor(), layer_tree_host_impl_->DrawTransform()); | 821 device_scale_factor(), layer_tree_host_impl_->DrawTransform()); |
| 788 } else { | 822 } else { |
| 789 DCHECK(layer_list_.empty() || *page_scale_factor == 1); | 823 DCHECK(layer_list_.empty() || *page_scale_factor == 1); |
| 790 } | 824 } |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 857 max_page_scale_factor == max_page_scale_factor_) | 891 max_page_scale_factor == max_page_scale_factor_) |
| 858 return false; | 892 return false; |
| 859 | 893 |
| 860 min_page_scale_factor_ = min_page_scale_factor; | 894 min_page_scale_factor_ = min_page_scale_factor; |
| 861 max_page_scale_factor_ = max_page_scale_factor; | 895 max_page_scale_factor_ = max_page_scale_factor; |
| 862 | 896 |
| 863 return true; | 897 return true; |
| 864 } | 898 } |
| 865 | 899 |
| 866 void LayerTreeImpl::DidUpdatePageScale() { | 900 void LayerTreeImpl::DidUpdatePageScale() { |
| 867 if (IsActiveTree()) | 901 if (IsActiveTree()) { |
| 868 page_scale_factor()->SetCurrent( | 902 page_scale_factor()->SetCurrent( |
| 869 ClampPageScaleFactorToLimits(current_page_scale_factor())); | 903 ClampPageScaleFactorToLimits(current_page_scale_factor())); |
| 904 subframe_page_scale_factor()->SetCurrent( |
| 905 ClampPageScaleFactorToLimits(GetSubframePageScaleFactor())); |
| 906 } |
| 870 | 907 |
| 871 set_needs_update_draw_properties(); | 908 set_needs_update_draw_properties(); |
| 872 DidUpdateScrollState(inner_viewport_scroll_layer_id_); | 909 DidUpdateScrollState(inner_viewport_scroll_layer_id_); |
| 873 } | 910 } |
| 874 | 911 |
| 875 void LayerTreeImpl::SetDeviceScaleFactor(float device_scale_factor) { | 912 void LayerTreeImpl::SetDeviceScaleFactor(float device_scale_factor) { |
| 876 if (device_scale_factor == device_scale_factor_) | 913 if (device_scale_factor == device_scale_factor_) |
| 877 return; | 914 return; |
| 878 device_scale_factor_ = device_scale_factor; | 915 device_scale_factor_ = device_scale_factor; |
| 879 | 916 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 891 } | 928 } |
| 892 | 929 |
| 893 SyncedProperty<ScaleGroup>* LayerTreeImpl::page_scale_factor() { | 930 SyncedProperty<ScaleGroup>* LayerTreeImpl::page_scale_factor() { |
| 894 return page_scale_factor_.get(); | 931 return page_scale_factor_.get(); |
| 895 } | 932 } |
| 896 | 933 |
| 897 const SyncedProperty<ScaleGroup>* LayerTreeImpl::page_scale_factor() const { | 934 const SyncedProperty<ScaleGroup>* LayerTreeImpl::page_scale_factor() const { |
| 898 return page_scale_factor_.get(); | 935 return page_scale_factor_.get(); |
| 899 } | 936 } |
| 900 | 937 |
| 938 SyncedProperty<ScaleGroup>* LayerTreeImpl::subframe_page_scale_factor() { |
| 939 return subframe_page_scale_factor_.get(); |
| 940 } |
| 941 |
| 942 const SyncedProperty<ScaleGroup>* LayerTreeImpl::subframe_page_scale_factor() |
| 943 const { |
| 944 return subframe_page_scale_factor_.get(); |
| 945 } |
| 946 |
| 901 gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const { | 947 gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const { |
| 902 if (!InnerViewportContainerLayer()) | 948 if (!InnerViewportContainerLayer()) |
| 903 return gfx::SizeF(); | 949 return gfx::SizeF(); |
| 904 | 950 |
| 905 return gfx::ScaleSize(InnerViewportContainerLayer()->BoundsForScrolling(), | 951 return gfx::ScaleSize(InnerViewportContainerLayer()->BoundsForScrolling(), |
| 906 1.0f / current_page_scale_factor()); | 952 1.0f / current_page_scale_factor()); |
| 907 } | 953 } |
| 908 | 954 |
| 909 gfx::Rect LayerTreeImpl::RootScrollLayerDeviceViewportBounds() const { | 955 gfx::Rect LayerTreeImpl::RootScrollLayerDeviceViewportBounds() const { |
| 910 LayerImpl* root_scroll_layer = OuterViewportScrollLayer() | 956 LayerImpl* root_scroll_layer = OuterViewportScrollLayer() |
| 911 ? OuterViewportScrollLayer() | 957 ? OuterViewportScrollLayer() |
| 912 : InnerViewportScrollLayer(); | 958 : InnerViewportScrollLayer(); |
| 913 if (!root_scroll_layer) | 959 if (!root_scroll_layer) |
| 914 return gfx::Rect(); | 960 return gfx::Rect(); |
| 915 return MathUtil::MapEnclosingClippedRect( | 961 return MathUtil::MapEnclosingClippedRect( |
| 916 root_scroll_layer->ScreenSpaceTransform(), | 962 root_scroll_layer->ScreenSpaceTransform(), |
| 917 gfx::Rect(root_scroll_layer->bounds())); | 963 gfx::Rect(root_scroll_layer->bounds())); |
| 918 } | 964 } |
| 919 | 965 |
| 920 void LayerTreeImpl::ApplySentScrollAndScaleDeltasFromAbortedCommit() { | 966 void LayerTreeImpl::ApplySentScrollAndScaleDeltasFromAbortedCommit() { |
| 921 DCHECK(IsActiveTree()); | 967 DCHECK(IsActiveTree()); |
| 922 | 968 |
| 923 page_scale_factor()->AbortCommit(); | 969 page_scale_factor()->AbortCommit(); |
| 970 subframe_page_scale_factor()->AbortCommit(); |
| 924 top_controls_shown_ratio()->AbortCommit(); | 971 top_controls_shown_ratio()->AbortCommit(); |
| 925 elastic_overscroll()->AbortCommit(); | 972 elastic_overscroll()->AbortCommit(); |
| 926 | 973 |
| 927 if (layer_list_.empty()) | 974 if (layer_list_.empty()) |
| 928 return; | 975 return; |
| 929 | 976 |
| 930 property_trees()->scroll_tree.ApplySentScrollDeltasFromAbortedCommit(); | 977 property_trees()->scroll_tree.ApplySentScrollDeltasFromAbortedCommit(); |
| 931 } | 978 } |
| 932 | 979 |
| 933 void LayerTreeImpl::SetViewportLayersFromIds( | 980 void LayerTreeImpl::SetViewportLayersFromIds( |
| (...skipping 1172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2106 | 2153 |
| 2107 void LayerTreeImpl::ResetAllChangeTracking() { | 2154 void LayerTreeImpl::ResetAllChangeTracking() { |
| 2108 layers_that_should_push_properties_.clear(); | 2155 layers_that_should_push_properties_.clear(); |
| 2109 // Iterate over all layers, including masks. | 2156 // Iterate over all layers, including masks. |
| 2110 for (auto& layer : *layers_) | 2157 for (auto& layer : *layers_) |
| 2111 layer->ResetChangeTracking(); | 2158 layer->ResetChangeTracking(); |
| 2112 property_trees_.ResetAllChangeTracking(); | 2159 property_trees_.ResetAllChangeTracking(); |
| 2113 } | 2160 } |
| 2114 | 2161 |
| 2115 } // namespace cc | 2162 } // namespace cc |
| OLD | NEW |