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 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
438 swap_promise_list_.clear(); | 440 swap_promise_list_.clear(); |
439 | 441 |
440 target_tree->set_browser_controls_shrink_blink_size( | 442 target_tree->set_browser_controls_shrink_blink_size( |
441 browser_controls_shrink_blink_size_); | 443 browser_controls_shrink_blink_size_); |
442 target_tree->set_top_controls_height(top_controls_height_); | 444 target_tree->set_top_controls_height(top_controls_height_); |
443 target_tree->set_bottom_controls_height(bottom_controls_height_); | 445 target_tree->set_bottom_controls_height(bottom_controls_height_); |
444 target_tree->PushBrowserControls(nullptr); | 446 target_tree->PushBrowserControls(nullptr); |
445 | 447 |
446 // Active tree already shares the page_scale_factor object with pending | 448 // Active tree already shares the page_scale_factor object with pending |
447 // tree so only the limits need to be provided. | 449 // tree so only the limits need to be provided. |
448 target_tree->PushPageScaleFactorAndLimits(nullptr, min_page_scale_factor(), | 450 target_tree->PushPageScaleFactorAndLimits( |
449 max_page_scale_factor()); | 451 nullptr, nullptr, min_page_scale_factor(), max_page_scale_factor()); |
450 target_tree->SetDeviceScaleFactor(device_scale_factor()); | 452 target_tree->SetDeviceScaleFactor(device_scale_factor()); |
451 target_tree->set_painted_device_scale_factor(painted_device_scale_factor()); | 453 target_tree->set_painted_device_scale_factor(painted_device_scale_factor()); |
452 target_tree->SetDeviceColorSpace(device_color_space_); | 454 target_tree->SetDeviceColorSpace(device_color_space_); |
453 target_tree->elastic_overscroll()->PushPendingToActive(); | 455 target_tree->elastic_overscroll()->PushPendingToActive(); |
454 | 456 |
455 target_tree->pending_page_scale_animation_ = | 457 target_tree->pending_page_scale_animation_ = |
456 std::move(pending_page_scale_animation_); | 458 std::move(pending_page_scale_animation_); |
457 | 459 |
458 target_tree->SetViewportLayersFromIds( | 460 target_tree->SetViewportLayersFromIds( |
459 overscroll_elasticity_layer_id_, page_scale_layer_id_, | 461 overscroll_elasticity_layer_id_, page_scale_layer_id_, |
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
721 if (PageScaleLayer()) { | 723 if (PageScaleLayer()) { |
722 draw_property_utils::UpdatePageScaleFactor( | 724 draw_property_utils::UpdatePageScaleFactor( |
723 property_trees(), PageScaleLayer(), current_page_scale_factor(), | 725 property_trees(), PageScaleLayer(), current_page_scale_factor(), |
724 device_scale_factor(), layer_tree_host_impl_->DrawTransform()); | 726 device_scale_factor(), layer_tree_host_impl_->DrawTransform()); |
725 } else { | 727 } else { |
726 DCHECK(layer_list_.empty() || active_page_scale == 1); | 728 DCHECK(layer_list_.empty() || active_page_scale == 1); |
727 } | 729 } |
728 } | 730 } |
729 } | 731 } |
730 | 732 |
731 void LayerTreeImpl::PushPageScaleFromMainThread(float page_scale_factor, | 733 void LayerTreeImpl::SetSubframePageScaleOnActiveTree( |
732 float min_page_scale_factor, | 734 float active_subframe_page_scale) { |
733 float max_page_scale_factor) { | 735 DCHECK(IsActiveTree()); |
734 PushPageScaleFactorAndLimits(&page_scale_factor, min_page_scale_factor, | 736 if (subframe_page_scale_factor()->SetCurrent( |
735 max_page_scale_factor); | 737 ClampPageScaleFactorToLimits(active_subframe_page_scale))) { |
| 738 DidUpdatePageScale(); |
| 739 } |
736 } | 740 } |
737 | 741 |
738 void LayerTreeImpl::PushPageScaleFactorAndLimits(const float* page_scale_factor, | 742 void LayerTreeImpl::PushPageScaleFromMainThread( |
739 float min_page_scale_factor, | 743 float page_scale_factor, |
740 float max_page_scale_factor) { | 744 float subframe_page_scale_factor, |
741 DCHECK(page_scale_factor || IsActiveTree()); | 745 float min_page_scale_factor, |
| 746 float max_page_scale_factor) { |
| 747 PushPageScaleFactorAndLimits(&page_scale_factor, &subframe_page_scale_factor, |
| 748 min_page_scale_factor, max_page_scale_factor); |
| 749 } |
| 750 |
| 751 void LayerTreeImpl::PushPageScaleFactorAndLimits( |
| 752 const float* page_scale_factor, |
| 753 const float* subframe_page_scale_factor, |
| 754 float min_page_scale_factor, |
| 755 float max_page_scale_factor) { |
| 756 DCHECK(page_scale_factor || subframe_page_scale_factor || IsActiveTree()); |
742 bool changed_page_scale = false; | 757 bool changed_page_scale = false; |
| 758 bool changed_subframe_page_scale = false; |
743 | 759 |
744 changed_page_scale |= | 760 changed_page_scale |= |
745 SetPageScaleFactorLimits(min_page_scale_factor, max_page_scale_factor); | 761 SetPageScaleFactorLimits(min_page_scale_factor, max_page_scale_factor); |
746 | 762 |
747 if (page_scale_factor) { | 763 if (page_scale_factor) { |
748 DCHECK(!IsActiveTree() || !layer_tree_host_impl_->pending_tree()); | 764 DCHECK(!IsActiveTree() || !layer_tree_host_impl_->pending_tree()); |
749 changed_page_scale |= page_scale_factor_->Delta() != 1.f; | 765 changed_page_scale |= page_scale_factor_->Delta() != 1.f; |
750 // TODO(enne): Once CDP goes away, ignore this call below. The only time | 766 // TODO(enne): Once CDP goes away, ignore this call below. The only time |
751 // the property trees will differ is if there's been a page scale on the | 767 // the property trees will differ is if there's been a page scale on the |
752 // compositor thread after the begin frame, which is the delta check above. | 768 // compositor thread after the begin frame, which is the delta check above. |
753 changed_page_scale |= | 769 changed_page_scale |= |
754 page_scale_factor_->PushFromMainThread(*page_scale_factor); | 770 page_scale_factor_->PushFromMainThread(*page_scale_factor); |
755 } | 771 } |
756 | 772 |
| 773 if (subframe_page_scale_factor) { |
| 774 changed_subframe_page_scale |= subframe_page_scale_factor_->Delta() != 1.f; |
| 775 changed_subframe_page_scale |= |
| 776 subframe_page_scale_factor_->PushFromMainThread( |
| 777 *subframe_page_scale_factor); |
| 778 } |
| 779 |
757 if (IsActiveTree()) { | 780 if (IsActiveTree()) { |
758 // TODO(enne): Pushing from pending to active should never require | 781 // TODO(enne): Pushing from pending to active should never require |
759 // DidUpdatePageScale. The values should already be set by the fully | 782 // DidUpdatePageScale. The values should already be set by the fully |
760 // computed property trees being synced from one tree to another. Remove | 783 // computed property trees being synced from one tree to another. Remove |
761 // this once CDP goes away. | 784 // this once CDP goes away. |
762 changed_page_scale |= page_scale_factor_->PushPendingToActive(); | 785 changed_page_scale |= page_scale_factor_->PushPendingToActive(); |
| 786 // TODO(wjmaclean): subframe_page_scale_factor is not involved in CDP so far |
| 787 // as I know, not sure that that means for this next line. |
| 788 changed_subframe_page_scale |= |
| 789 subframe_page_scale_factor_->PushPendingToActive(); |
763 } | 790 } |
764 | 791 |
765 if (changed_page_scale) | 792 if (changed_page_scale || changed_subframe_page_scale) |
766 DidUpdatePageScale(); | 793 DidUpdatePageScale(); |
767 | 794 |
768 if (page_scale_factor) { | 795 if (page_scale_factor) { |
769 if (PageScaleLayer()) { | 796 if (PageScaleLayer()) { |
770 draw_property_utils::UpdatePageScaleFactor( | 797 draw_property_utils::UpdatePageScaleFactor( |
771 property_trees(), PageScaleLayer(), current_page_scale_factor(), | 798 property_trees(), PageScaleLayer(), current_page_scale_factor(), |
772 device_scale_factor(), layer_tree_host_impl_->DrawTransform()); | 799 device_scale_factor(), layer_tree_host_impl_->DrawTransform()); |
773 } else { | 800 } else { |
774 DCHECK(layer_list_.empty() || *page_scale_factor == 1); | 801 DCHECK(layer_list_.empty() || *page_scale_factor == 1); |
775 } | 802 } |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
842 max_page_scale_factor == max_page_scale_factor_) | 869 max_page_scale_factor == max_page_scale_factor_) |
843 return false; | 870 return false; |
844 | 871 |
845 min_page_scale_factor_ = min_page_scale_factor; | 872 min_page_scale_factor_ = min_page_scale_factor; |
846 max_page_scale_factor_ = max_page_scale_factor; | 873 max_page_scale_factor_ = max_page_scale_factor; |
847 | 874 |
848 return true; | 875 return true; |
849 } | 876 } |
850 | 877 |
851 void LayerTreeImpl::DidUpdatePageScale() { | 878 void LayerTreeImpl::DidUpdatePageScale() { |
852 if (IsActiveTree()) | 879 if (IsActiveTree()) { |
853 page_scale_factor()->SetCurrent( | 880 page_scale_factor()->SetCurrent( |
854 ClampPageScaleFactorToLimits(current_page_scale_factor())); | 881 ClampPageScaleFactorToLimits(current_page_scale_factor())); |
| 882 subframe_page_scale_factor()->SetCurrent( |
| 883 ClampPageScaleFactorToLimits(GetSubframePageScaleFactor())); |
| 884 } |
855 | 885 |
856 set_needs_update_draw_properties(); | 886 set_needs_update_draw_properties(); |
857 DidUpdateScrollState(inner_viewport_scroll_layer_id_); | 887 DidUpdateScrollState(inner_viewport_scroll_layer_id_); |
858 } | 888 } |
859 | 889 |
860 void LayerTreeImpl::SetDeviceScaleFactor(float device_scale_factor) { | 890 void LayerTreeImpl::SetDeviceScaleFactor(float device_scale_factor) { |
861 if (device_scale_factor == device_scale_factor_) | 891 if (device_scale_factor == device_scale_factor_) |
862 return; | 892 return; |
863 device_scale_factor_ = device_scale_factor; | 893 device_scale_factor_ = device_scale_factor; |
864 | 894 |
(...skipping 11 matching lines...) Expand all Loading... |
876 } | 906 } |
877 | 907 |
878 SyncedProperty<ScaleGroup>* LayerTreeImpl::page_scale_factor() { | 908 SyncedProperty<ScaleGroup>* LayerTreeImpl::page_scale_factor() { |
879 return page_scale_factor_.get(); | 909 return page_scale_factor_.get(); |
880 } | 910 } |
881 | 911 |
882 const SyncedProperty<ScaleGroup>* LayerTreeImpl::page_scale_factor() const { | 912 const SyncedProperty<ScaleGroup>* LayerTreeImpl::page_scale_factor() const { |
883 return page_scale_factor_.get(); | 913 return page_scale_factor_.get(); |
884 } | 914 } |
885 | 915 |
| 916 SyncedProperty<ScaleGroup>* LayerTreeImpl::subframe_page_scale_factor() { |
| 917 return subframe_page_scale_factor_.get(); |
| 918 } |
| 919 |
| 920 const SyncedProperty<ScaleGroup>* LayerTreeImpl::subframe_page_scale_factor() |
| 921 const { |
| 922 return subframe_page_scale_factor_.get(); |
| 923 } |
| 924 |
886 gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const { | 925 gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const { |
887 if (!InnerViewportContainerLayer()) | 926 if (!InnerViewportContainerLayer()) |
888 return gfx::SizeF(); | 927 return gfx::SizeF(); |
889 | 928 |
890 return gfx::ScaleSize(InnerViewportContainerLayer()->BoundsForScrolling(), | 929 return gfx::ScaleSize(InnerViewportContainerLayer()->BoundsForScrolling(), |
891 1.0f / current_page_scale_factor()); | 930 1.0f / current_page_scale_factor()); |
892 } | 931 } |
893 | 932 |
894 gfx::Rect LayerTreeImpl::RootScrollLayerDeviceViewportBounds() const { | 933 gfx::Rect LayerTreeImpl::RootScrollLayerDeviceViewportBounds() const { |
895 LayerImpl* root_scroll_layer = OuterViewportScrollLayer() | 934 LayerImpl* root_scroll_layer = OuterViewportScrollLayer() |
896 ? OuterViewportScrollLayer() | 935 ? OuterViewportScrollLayer() |
897 : InnerViewportScrollLayer(); | 936 : InnerViewportScrollLayer(); |
898 if (!root_scroll_layer) | 937 if (!root_scroll_layer) |
899 return gfx::Rect(); | 938 return gfx::Rect(); |
900 return MathUtil::MapEnclosingClippedRect( | 939 return MathUtil::MapEnclosingClippedRect( |
901 root_scroll_layer->ScreenSpaceTransform(), | 940 root_scroll_layer->ScreenSpaceTransform(), |
902 gfx::Rect(root_scroll_layer->bounds())); | 941 gfx::Rect(root_scroll_layer->bounds())); |
903 } | 942 } |
904 | 943 |
905 void LayerTreeImpl::ApplySentScrollAndScaleDeltasFromAbortedCommit() { | 944 void LayerTreeImpl::ApplySentScrollAndScaleDeltasFromAbortedCommit() { |
906 DCHECK(IsActiveTree()); | 945 DCHECK(IsActiveTree()); |
907 | 946 |
908 page_scale_factor()->AbortCommit(); | 947 page_scale_factor()->AbortCommit(); |
| 948 subframe_page_scale_factor()->AbortCommit(); |
909 top_controls_shown_ratio()->AbortCommit(); | 949 top_controls_shown_ratio()->AbortCommit(); |
910 elastic_overscroll()->AbortCommit(); | 950 elastic_overscroll()->AbortCommit(); |
911 | 951 |
912 if (layer_list_.empty()) | 952 if (layer_list_.empty()) |
913 return; | 953 return; |
914 | 954 |
915 property_trees()->scroll_tree.ApplySentScrollDeltasFromAbortedCommit(); | 955 property_trees()->scroll_tree.ApplySentScrollDeltasFromAbortedCommit(); |
916 } | 956 } |
917 | 957 |
918 void LayerTreeImpl::SetViewportLayersFromIds( | 958 void LayerTreeImpl::SetViewportLayersFromIds( |
(...skipping 1154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2073 | 2113 |
2074 void LayerTreeImpl::ResetAllChangeTracking() { | 2114 void LayerTreeImpl::ResetAllChangeTracking() { |
2075 layers_that_should_push_properties_.clear(); | 2115 layers_that_should_push_properties_.clear(); |
2076 // Iterate over all layers, including masks. | 2116 // Iterate over all layers, including masks. |
2077 for (auto& layer : *layers_) | 2117 for (auto& layer : *layers_) |
2078 layer->ResetChangeTracking(); | 2118 layer->ResetChangeTracking(); |
2079 property_trees_.ResetAllChangeTracking(); | 2119 property_trees_.ResetAllChangeTracking(); |
2080 } | 2120 } |
2081 | 2121 |
2082 } // namespace cc | 2122 } // namespace cc |
OLD | NEW |