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 |