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

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

Issue 2652643004: Make PageScaleFactor work for oopif subframes.
Patch Set: Put function prototype in correct place. Created 3 years, 10 months 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') | content/browser/frame_host/render_frame_host_delegate.h » ('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 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_impl.h ('k') | content/browser/frame_host/render_frame_host_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698