Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(216)

Side by Side Diff: cc/trees/layer_tree_impl.cc

Issue 2417783005: [Master/Overview CL] Make PageScaleFactor work for oopif subframe.
Patch Set: Rebase to master@{#429656}. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/trees/layer_tree_impl.h ('k') | cc/trees/layer_tree_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_impl.h ('k') | cc/trees/layer_tree_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698