Chromium Code Reviews| 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 <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <set> | 9 #include <set> |
| 10 | 10 |
| 11 #include "base/auto_reset.h" | |
| 11 #include "base/trace_event/trace_event.h" | 12 #include "base/trace_event/trace_event.h" |
| 12 #include "base/trace_event/trace_event_argument.h" | 13 #include "base/trace_event/trace_event_argument.h" |
| 13 #include "cc/animation/keyframed_animation_curve.h" | 14 #include "cc/animation/keyframed_animation_curve.h" |
| 14 #include "cc/animation/scrollbar_animation_controller.h" | 15 #include "cc/animation/scrollbar_animation_controller.h" |
| 15 #include "cc/animation/scrollbar_animation_controller_linear_fade.h" | 16 #include "cc/animation/scrollbar_animation_controller_linear_fade.h" |
| 16 #include "cc/animation/scrollbar_animation_controller_thinning.h" | 17 #include "cc/animation/scrollbar_animation_controller_thinning.h" |
| 17 #include "cc/base/math_util.h" | 18 #include "cc/base/math_util.h" |
| 18 #include "cc/base/synced_property.h" | 19 #include "cc/base/synced_property.h" |
| 19 #include "cc/base/util.h" | 20 #include "cc/base/util.h" |
| 20 #include "cc/debug/devtools_instrumentation.h" | 21 #include "cc/debug/devtools_instrumentation.h" |
| 21 #include "cc/debug/traced_value.h" | 22 #include "cc/debug/traced_value.h" |
| 23 #include "cc/input/layer_scroll_offset_delegate.h" | |
| 22 #include "cc/input/page_scale_animation.h" | 24 #include "cc/input/page_scale_animation.h" |
| 23 #include "cc/layers/heads_up_display_layer_impl.h" | 25 #include "cc/layers/heads_up_display_layer_impl.h" |
| 24 #include "cc/layers/layer.h" | 26 #include "cc/layers/layer.h" |
| 25 #include "cc/layers/layer_iterator.h" | 27 #include "cc/layers/layer_iterator.h" |
| 26 #include "cc/layers/render_surface_impl.h" | 28 #include "cc/layers/render_surface_impl.h" |
| 27 #include "cc/layers/scrollbar_layer_impl_base.h" | 29 #include "cc/layers/scrollbar_layer_impl_base.h" |
| 28 #include "cc/resources/ui_resource_request.h" | 30 #include "cc/resources/ui_resource_request.h" |
| 29 #include "cc/trees/layer_tree_host_common.h" | 31 #include "cc/trees/layer_tree_host_common.h" |
| 30 #include "cc/trees/layer_tree_host_impl.h" | 32 #include "cc/trees/layer_tree_host_impl.h" |
| 31 #include "cc/trees/occlusion_tracker.h" | 33 #include "cc/trees/occlusion_tracker.h" |
| 32 #include "ui/gfx/geometry/point_conversions.h" | 34 #include "ui/gfx/geometry/point_conversions.h" |
| 33 #include "ui/gfx/geometry/size_conversions.h" | 35 #include "ui/gfx/geometry/size_conversions.h" |
| 34 #include "ui/gfx/geometry/vector2d_conversions.h" | 36 #include "ui/gfx/geometry/vector2d_conversions.h" |
| 35 | 37 |
| 36 namespace cc { | 38 namespace cc { |
| 37 // This class exists to split the LayerScrollOffsetDelegate between the | |
| 38 // InnerViewportScrollLayer and the OuterViewportScrollLayer in a manner | |
| 39 // that never requires the embedder or LayerImpl to know about. | |
| 40 class LayerScrollOffsetDelegateProxy : public LayerImpl::ScrollOffsetDelegate { | |
| 41 public: | |
| 42 LayerScrollOffsetDelegateProxy(LayerImpl* layer, | |
| 43 LayerScrollOffsetDelegate* delegate, | |
| 44 LayerTreeImpl* layer_tree) | |
| 45 : layer_(layer), delegate_(delegate), layer_tree_impl_(layer_tree) {} | |
| 46 virtual ~LayerScrollOffsetDelegateProxy() {} | |
| 47 | |
| 48 gfx::ScrollOffset last_set_scroll_offset() const { | |
| 49 return last_set_scroll_offset_; | |
| 50 } | |
| 51 | |
| 52 // LayerScrollOffsetDelegate implementation. | |
| 53 void SetCurrentScrollOffset(const gfx::ScrollOffset& new_offset) override { | |
| 54 last_set_scroll_offset_ = new_offset; | |
| 55 } | |
| 56 | |
| 57 gfx::ScrollOffset GetCurrentScrollOffset() override { | |
| 58 return layer_tree_impl_->GetDelegatedScrollOffset(layer_); | |
| 59 } | |
| 60 | |
| 61 bool IsExternalFlingActive() const override { | |
| 62 return delegate_->IsExternalFlingActive(); | |
| 63 } | |
| 64 | |
| 65 void Update() const override { | |
| 66 layer_tree_impl_->UpdateScrollOffsetDelegate(); | |
| 67 } | |
| 68 | |
| 69 private: | |
| 70 LayerImpl* layer_; | |
| 71 LayerScrollOffsetDelegate* delegate_; | |
| 72 LayerTreeImpl* layer_tree_impl_; | |
| 73 gfx::ScrollOffset last_set_scroll_offset_; | |
| 74 }; | |
| 75 | 39 |
| 76 LayerTreeImpl::LayerTreeImpl( | 40 LayerTreeImpl::LayerTreeImpl( |
| 77 LayerTreeHostImpl* layer_tree_host_impl, | 41 LayerTreeHostImpl* layer_tree_host_impl, |
| 78 scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor, | 42 scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor, |
| 79 scoped_refptr<SyncedTopControls> top_controls_shown_ratio, | 43 scoped_refptr<SyncedTopControls> top_controls_shown_ratio, |
| 80 scoped_refptr<SyncedElasticOverscroll> elastic_overscroll) | 44 scoped_refptr<SyncedElasticOverscroll> elastic_overscroll) |
| 81 : layer_tree_host_impl_(layer_tree_host_impl), | 45 : layer_tree_host_impl_(layer_tree_host_impl), |
| 82 source_frame_number_(-1), | 46 source_frame_number_(-1), |
| 83 hud_layer_(0), | 47 hud_layer_(0), |
| 84 currently_scrolling_layer_(NULL), | 48 currently_scrolling_layer_(NULL), |
| 85 root_layer_scroll_offset_delegate_(NULL), | 49 root_layer_scroll_offset_delegate_(NULL), |
| 50 is_distributing_root_scroll_(false), | |
| 86 background_color_(0), | 51 background_color_(0), |
| 87 has_transparent_background_(false), | 52 has_transparent_background_(false), |
| 88 overscroll_elasticity_layer_(NULL), | 53 overscroll_elasticity_layer_(NULL), |
| 89 page_scale_layer_(NULL), | 54 page_scale_layer_(NULL), |
| 90 inner_viewport_scroll_layer_(NULL), | 55 inner_viewport_scroll_layer_(NULL), |
| 91 outer_viewport_scroll_layer_(NULL), | 56 outer_viewport_scroll_layer_(NULL), |
| 92 page_scale_factor_(page_scale_factor), | 57 page_scale_factor_(page_scale_factor), |
| 93 min_page_scale_factor_(0), | 58 min_page_scale_factor_(0), |
| 94 max_page_scale_factor_(0), | 59 max_page_scale_factor_(0), |
| 95 elastic_overscroll_(elastic_overscroll), | 60 elastic_overscroll_(elastic_overscroll), |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 141 | 106 |
| 142 // TODO(vmpstr): Early out if there are no requests on any of the layers. For | 107 // TODO(vmpstr): Early out if there are no requests on any of the layers. For |
| 143 // that, we need to inform LayerTreeImpl whenever there are requests when we | 108 // that, we need to inform LayerTreeImpl whenever there are requests when we |
| 144 // get them. | 109 // get them. |
| 145 LayerTreeHostCommon::CallFunctionForSubtree( | 110 LayerTreeHostCommon::CallFunctionForSubtree( |
| 146 root_layer_.get(), [request_ids](LayerImpl* layer) { | 111 root_layer_.get(), [request_ids](LayerImpl* layer) { |
| 147 layer->GatherFrameTimingRequestIds(request_ids); | 112 layer->GatherFrameTimingRequestIds(request_ids); |
| 148 }); | 113 }); |
| 149 } | 114 } |
| 150 | 115 |
| 116 bool LayerTreeImpl::IsExternalFlingActive() const { | |
| 117 return root_layer_scroll_offset_delegate_ && | |
| 118 root_layer_scroll_offset_delegate_->IsExternalFlingActive(); | |
| 119 } | |
| 120 | |
| 121 void LayerTreeImpl::DidUpdateScrollOffset(int layer_id) { | |
| 122 if ((InnerViewportScrollLayer() && | |
| 123 layer_id != InnerViewportScrollLayer()->id()) || | |
| 124 (OuterViewportScrollLayer() && | |
| 125 layer_id != OuterViewportScrollLayer()->id()) || | |
| 126 is_distributing_root_scroll_ || !root_layer_scroll_offset_delegate_) | |
| 127 return; | |
| 128 UpdateRootScrollOffsetDelegate(); | |
| 129 } | |
| 130 | |
| 151 void LayerTreeImpl::SetRootLayer(scoped_ptr<LayerImpl> layer) { | 131 void LayerTreeImpl::SetRootLayer(scoped_ptr<LayerImpl> layer) { |
| 152 if (inner_viewport_scroll_layer_) | |
| 153 inner_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL); | |
| 154 if (outer_viewport_scroll_layer_) | |
| 155 outer_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL); | |
| 156 inner_viewport_scroll_delegate_proxy_ = nullptr; | |
| 157 outer_viewport_scroll_delegate_proxy_ = nullptr; | |
| 158 | |
| 159 root_layer_ = layer.Pass(); | 132 root_layer_ = layer.Pass(); |
| 160 currently_scrolling_layer_ = NULL; | 133 currently_scrolling_layer_ = NULL; |
| 161 inner_viewport_scroll_layer_ = NULL; | 134 inner_viewport_scroll_layer_ = NULL; |
| 162 outer_viewport_scroll_layer_ = NULL; | 135 outer_viewport_scroll_layer_ = NULL; |
| 163 page_scale_layer_ = NULL; | 136 page_scale_layer_ = NULL; |
| 164 | 137 |
| 165 layer_tree_host_impl_->OnCanDrawStateChangedForTree(); | 138 layer_tree_host_impl_->OnCanDrawStateChangedForTree(); |
| 166 } | 139 } |
| 167 | 140 |
| 168 LayerImpl* LayerTreeImpl::InnerViewportScrollLayer() const { | 141 LayerImpl* LayerTreeImpl::InnerViewportScrollLayer() const { |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 194 if (outer_viewport_scroll_layer_) | 167 if (outer_viewport_scroll_layer_) |
| 195 offset += outer_viewport_scroll_layer_->MaxScrollOffset(); | 168 offset += outer_viewport_scroll_layer_->MaxScrollOffset(); |
| 196 | 169 |
| 197 return offset; | 170 return offset; |
| 198 } | 171 } |
| 199 | 172 |
| 200 scoped_ptr<LayerImpl> LayerTreeImpl::DetachLayerTree() { | 173 scoped_ptr<LayerImpl> LayerTreeImpl::DetachLayerTree() { |
| 201 // Clear all data structures that have direct references to the layer tree. | 174 // Clear all data structures that have direct references to the layer tree. |
| 202 scrolling_layer_id_from_previous_tree_ = | 175 scrolling_layer_id_from_previous_tree_ = |
| 203 currently_scrolling_layer_ ? currently_scrolling_layer_->id() : 0; | 176 currently_scrolling_layer_ ? currently_scrolling_layer_->id() : 0; |
| 204 if (inner_viewport_scroll_layer_) | |
| 205 inner_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL); | |
| 206 if (outer_viewport_scroll_layer_) | |
| 207 outer_viewport_scroll_layer_->SetScrollOffsetDelegate(NULL); | |
| 208 inner_viewport_scroll_delegate_proxy_ = nullptr; | |
| 209 outer_viewport_scroll_delegate_proxy_ = nullptr; | |
| 210 inner_viewport_scroll_layer_ = NULL; | 177 inner_viewport_scroll_layer_ = NULL; |
| 211 outer_viewport_scroll_layer_ = NULL; | 178 outer_viewport_scroll_layer_ = NULL; |
| 212 page_scale_layer_ = NULL; | 179 page_scale_layer_ = NULL; |
| 213 currently_scrolling_layer_ = NULL; | 180 currently_scrolling_layer_ = NULL; |
| 214 | 181 |
| 215 render_surface_layer_list_.clear(); | 182 render_surface_layer_list_.clear(); |
| 216 set_needs_update_draw_properties(); | 183 set_needs_update_draw_properties(); |
| 217 return root_layer_.Pass(); | 184 return root_layer_.Pass(); |
| 218 } | 185 } |
| 219 | 186 |
| (...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 524 | 491 |
| 525 outer_viewport_scroll_layer_ = | 492 outer_viewport_scroll_layer_ = |
| 526 LayerById(outer_viewport_scroll_layer_id); | 493 LayerById(outer_viewport_scroll_layer_id); |
| 527 DCHECK(outer_viewport_scroll_layer_ || | 494 DCHECK(outer_viewport_scroll_layer_ || |
| 528 outer_viewport_scroll_layer_id == Layer::INVALID_ID); | 495 outer_viewport_scroll_layer_id == Layer::INVALID_ID); |
| 529 | 496 |
| 530 HideInnerViewportScrollbarsIfNearMinimumScale(); | 497 HideInnerViewportScrollbarsIfNearMinimumScale(); |
| 531 | 498 |
| 532 if (!root_layer_scroll_offset_delegate_) | 499 if (!root_layer_scroll_offset_delegate_) |
| 533 return; | 500 return; |
| 534 | |
| 535 inner_viewport_scroll_delegate_proxy_ = make_scoped_ptr( | |
| 536 new LayerScrollOffsetDelegateProxy(inner_viewport_scroll_layer_, | |
| 537 root_layer_scroll_offset_delegate_, | |
| 538 this)); | |
| 539 | |
| 540 if (outer_viewport_scroll_layer_) | |
| 541 outer_viewport_scroll_delegate_proxy_ = make_scoped_ptr( | |
| 542 new LayerScrollOffsetDelegateProxy(outer_viewport_scroll_layer_, | |
| 543 root_layer_scroll_offset_delegate_, | |
| 544 this)); | |
| 545 } | 501 } |
| 546 | 502 |
| 547 void LayerTreeImpl::ClearViewportLayers() { | 503 void LayerTreeImpl::ClearViewportLayers() { |
| 548 page_scale_layer_ = NULL; | 504 page_scale_layer_ = NULL; |
| 549 inner_viewport_scroll_layer_ = NULL; | 505 inner_viewport_scroll_layer_ = NULL; |
| 550 outer_viewport_scroll_layer_ = NULL; | 506 outer_viewport_scroll_layer_ = NULL; |
| 551 } | 507 } |
| 552 | 508 |
| 553 bool LayerTreeImpl::UpdateDrawProperties(bool update_lcd_text) { | 509 bool LayerTreeImpl::UpdateDrawProperties(bool update_lcd_text) { |
| 554 if (!needs_update_draw_properties_) | 510 if (!needs_update_draw_properties_) |
| (...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1033 for (size_t i = 0; i < swap_promise_list_.size(); i++) | 989 for (size_t i = 0; i < swap_promise_list_.size(); i++) |
| 1034 state->AppendDouble(swap_promise_list_[i]->TraceId()); | 990 state->AppendDouble(swap_promise_list_[i]->TraceId()); |
| 1035 state->EndArray(); | 991 state->EndArray(); |
| 1036 } | 992 } |
| 1037 | 993 |
| 1038 void LayerTreeImpl::SetRootLayerScrollOffsetDelegate( | 994 void LayerTreeImpl::SetRootLayerScrollOffsetDelegate( |
| 1039 LayerScrollOffsetDelegate* root_layer_scroll_offset_delegate) { | 995 LayerScrollOffsetDelegate* root_layer_scroll_offset_delegate) { |
| 1040 if (root_layer_scroll_offset_delegate_ == root_layer_scroll_offset_delegate) | 996 if (root_layer_scroll_offset_delegate_ == root_layer_scroll_offset_delegate) |
| 1041 return; | 997 return; |
| 1042 | 998 |
| 1043 if (!root_layer_scroll_offset_delegate) { | |
| 1044 // Make sure we remove the proxies from their layers before | |
| 1045 // releasing them. | |
| 1046 if (InnerViewportScrollLayer()) | |
| 1047 InnerViewportScrollLayer()->SetScrollOffsetDelegate(NULL); | |
| 1048 if (OuterViewportScrollLayer()) | |
| 1049 OuterViewportScrollLayer()->SetScrollOffsetDelegate(NULL); | |
| 1050 inner_viewport_scroll_delegate_proxy_ = nullptr; | |
| 1051 outer_viewport_scroll_delegate_proxy_ = nullptr; | |
| 1052 } | |
| 1053 | |
| 1054 root_layer_scroll_offset_delegate_ = root_layer_scroll_offset_delegate; | 999 root_layer_scroll_offset_delegate_ = root_layer_scroll_offset_delegate; |
| 1055 | 1000 |
| 1056 if (root_layer_scroll_offset_delegate_) { | 1001 if (root_layer_scroll_offset_delegate_) { |
| 1057 root_layer_scroll_offset_delegate_->UpdateRootLayerState( | 1002 root_layer_scroll_offset_delegate_->UpdateRootLayerState( |
| 1058 TotalScrollOffset(), TotalMaxScrollOffset(), ScrollableSize(), | 1003 TotalScrollOffset(), TotalMaxScrollOffset(), ScrollableSize(), |
| 1059 current_page_scale_factor(), min_page_scale_factor(), | 1004 current_page_scale_factor(), min_page_scale_factor(), |
| 1060 max_page_scale_factor()); | 1005 max_page_scale_factor()); |
| 1061 | 1006 |
| 1062 if (inner_viewport_scroll_layer_) { | 1007 DistributeRootScrollOffset(); |
| 1063 inner_viewport_scroll_delegate_proxy_ = make_scoped_ptr( | |
| 1064 new LayerScrollOffsetDelegateProxy(InnerViewportScrollLayer(), | |
| 1065 root_layer_scroll_offset_delegate_, | |
| 1066 this)); | |
| 1067 inner_viewport_scroll_layer_->SetScrollOffsetDelegate( | |
| 1068 inner_viewport_scroll_delegate_proxy_.get()); | |
| 1069 } | |
| 1070 | |
| 1071 if (outer_viewport_scroll_layer_) { | |
| 1072 outer_viewport_scroll_delegate_proxy_ = make_scoped_ptr( | |
| 1073 new LayerScrollOffsetDelegateProxy(OuterViewportScrollLayer(), | |
| 1074 root_layer_scroll_offset_delegate_, | |
| 1075 this)); | |
| 1076 outer_viewport_scroll_layer_->SetScrollOffsetDelegate( | |
| 1077 outer_viewport_scroll_delegate_proxy_.get()); | |
| 1078 } | |
| 1079 | |
| 1080 if (inner_viewport_scroll_layer_) | |
| 1081 inner_viewport_scroll_layer_->RefreshFromScrollDelegate(); | |
| 1082 if (outer_viewport_scroll_layer_) | |
| 1083 outer_viewport_scroll_layer_->RefreshFromScrollDelegate(); | |
| 1084 | |
| 1085 if (inner_viewport_scroll_layer_) | |
| 1086 UpdateScrollOffsetDelegate(); | |
| 1087 } | 1008 } |
| 1088 } | 1009 } |
| 1089 | 1010 |
| 1090 void LayerTreeImpl::OnRootLayerDelegatedScrollOffsetChanged() { | 1011 void LayerTreeImpl::UpdateRootScrollOffsetDelegate() { |
| 1091 DCHECK(root_layer_scroll_offset_delegate_); | |
| 1092 if (inner_viewport_scroll_layer_) { | |
| 1093 inner_viewport_scroll_layer_->RefreshFromScrollDelegate(); | |
| 1094 } | |
| 1095 if (outer_viewport_scroll_layer_) { | |
| 1096 outer_viewport_scroll_layer_->RefreshFromScrollDelegate(); | |
| 1097 } | |
| 1098 } | |
| 1099 | |
| 1100 void LayerTreeImpl::UpdateScrollOffsetDelegate() { | |
| 1101 DCHECK(InnerViewportScrollLayer()); | |
| 1102 DCHECK(!OuterViewportScrollLayer() || outer_viewport_scroll_delegate_proxy_); | |
| 1103 DCHECK(root_layer_scroll_offset_delegate_); | 1012 DCHECK(root_layer_scroll_offset_delegate_); |
| 1104 | 1013 |
| 1105 gfx::ScrollOffset offset = | 1014 gfx::ScrollOffset offset = InnerViewportScrollLayer()->CurrentScrollOffset(); |
| 1106 inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); | |
| 1107 | 1015 |
| 1108 if (OuterViewportScrollLayer()) | 1016 if (OuterViewportScrollLayer()) |
| 1109 offset += outer_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); | 1017 offset += OuterViewportScrollLayer()->CurrentScrollOffset(); |
| 1110 | 1018 |
| 1111 root_layer_scroll_offset_delegate_->UpdateRootLayerState( | 1019 root_layer_scroll_offset_delegate_->UpdateRootLayerState( |
| 1112 offset, TotalMaxScrollOffset(), ScrollableSize(), | 1020 offset, TotalMaxScrollOffset(), ScrollableSize(), |
| 1113 current_page_scale_factor(), min_page_scale_factor(), | 1021 current_page_scale_factor(), min_page_scale_factor(), |
| 1114 max_page_scale_factor()); | 1022 max_page_scale_factor()); |
| 1115 } | 1023 } |
| 1116 | 1024 |
| 1117 gfx::ScrollOffset LayerTreeImpl::GetDelegatedScrollOffset(LayerImpl* layer) { | 1025 void LayerTreeImpl::DistributeRootScrollOffset() { |
| 1118 DCHECK(root_layer_scroll_offset_delegate_); | 1026 base::AutoReset<bool> is_distributing_root_scroll_auto_reset( |
|
aelias_OOO_until_Jul13
2015/04/07 00:52:20
Could you avoid this by having a new method LayerI
hush (inactive)
2015/04/07 01:29:08
Done.
| |
| 1119 DCHECK(InnerViewportScrollLayer()); | 1027 &is_distributing_root_scroll_, true); |
| 1120 if (layer == InnerViewportScrollLayer() && !OuterViewportScrollLayer()) | 1028 |
| 1121 return root_layer_scroll_offset_delegate_->GetTotalScrollOffset(); | 1029 if (!root_layer_scroll_offset_delegate_) |
| 1030 return; | |
| 1031 | |
| 1032 gfx::ScrollOffset root_offset = | |
| 1033 root_layer_scroll_offset_delegate_->GetTotalScrollOffset(); | |
| 1034 | |
| 1035 if (!InnerViewportScrollLayer()) | |
| 1036 return; | |
| 1037 | |
| 1038 // TODO(hush): Use DCHECK(OuterViewportScrollLayer()); here instead. And fix | |
| 1039 // the broken unit tests. | |
| 1040 if (!OuterViewportScrollLayer()) { | |
|
hush (inactive)
2015/04/07 01:29:08
I just removed this block and fixed the unit tests
| |
| 1041 InnerViewportScrollLayer()->SetCurrentScrollOffset(root_offset); | |
| 1042 UpdateRootScrollOffsetDelegate(); | |
| 1043 return; | |
| 1044 } | |
| 1122 | 1045 |
| 1123 // If we get here, we have both inner/outer viewports, and need to distribute | 1046 // If we get here, we have both inner/outer viewports, and need to distribute |
| 1124 // the scroll offset between them. | 1047 // the scroll offset between them. |
| 1125 DCHECK(inner_viewport_scroll_delegate_proxy_); | |
| 1126 DCHECK(outer_viewport_scroll_delegate_proxy_); | |
| 1127 gfx::ScrollOffset inner_viewport_offset = | 1048 gfx::ScrollOffset inner_viewport_offset = |
| 1128 inner_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); | 1049 InnerViewportScrollLayer()->CurrentScrollOffset(); |
| 1129 gfx::ScrollOffset outer_viewport_offset = | 1050 gfx::ScrollOffset outer_viewport_offset = |
| 1130 outer_viewport_scroll_delegate_proxy_->last_set_scroll_offset(); | 1051 OuterViewportScrollLayer()->CurrentScrollOffset(); |
| 1131 | 1052 |
| 1132 // It may be nothing has changed. | 1053 // It may be nothing has changed. |
| 1133 gfx::ScrollOffset delegate_offset = | 1054 if (inner_viewport_offset + outer_viewport_offset == root_offset) |
| 1134 root_layer_scroll_offset_delegate_->GetTotalScrollOffset(); | 1055 return; |
| 1135 if (inner_viewport_offset + outer_viewport_offset == delegate_offset) { | |
| 1136 if (layer == InnerViewportScrollLayer()) | |
| 1137 return inner_viewport_offset; | |
| 1138 else | |
| 1139 return outer_viewport_offset; | |
| 1140 } | |
| 1141 | 1056 |
| 1142 gfx::ScrollOffset max_outer_viewport_scroll_offset = | 1057 gfx::ScrollOffset max_outer_viewport_scroll_offset = |
| 1143 OuterViewportScrollLayer()->MaxScrollOffset(); | 1058 OuterViewportScrollLayer()->MaxScrollOffset(); |
| 1144 | 1059 |
| 1145 outer_viewport_offset = delegate_offset - inner_viewport_offset; | 1060 outer_viewport_offset = root_offset - inner_viewport_offset; |
| 1146 outer_viewport_offset.SetToMin(max_outer_viewport_scroll_offset); | 1061 outer_viewport_offset.SetToMin(max_outer_viewport_scroll_offset); |
| 1147 outer_viewport_offset.SetToMax(gfx::ScrollOffset()); | 1062 outer_viewport_offset.SetToMax(gfx::ScrollOffset()); |
| 1148 | 1063 |
| 1149 if (layer == OuterViewportScrollLayer()) | 1064 OuterViewportScrollLayer()->SetCurrentScrollOffset(outer_viewport_offset); |
| 1150 return outer_viewport_offset; | 1065 inner_viewport_offset = root_offset - outer_viewport_offset; |
| 1066 InnerViewportScrollLayer()->SetCurrentScrollOffset(inner_viewport_offset); | |
| 1151 | 1067 |
| 1152 inner_viewport_offset = delegate_offset - outer_viewport_offset; | 1068 UpdateRootScrollOffsetDelegate(); |
| 1153 | |
| 1154 return inner_viewport_offset; | |
| 1155 } | 1069 } |
| 1156 | 1070 |
| 1157 void LayerTreeImpl::QueueSwapPromise(scoped_ptr<SwapPromise> swap_promise) { | 1071 void LayerTreeImpl::QueueSwapPromise(scoped_ptr<SwapPromise> swap_promise) { |
| 1158 DCHECK(swap_promise); | 1072 DCHECK(swap_promise); |
| 1159 swap_promise_list_.push_back(swap_promise.Pass()); | 1073 swap_promise_list_.push_back(swap_promise.Pass()); |
| 1160 } | 1074 } |
| 1161 | 1075 |
| 1162 void LayerTreeImpl::PassSwapPromises( | 1076 void LayerTreeImpl::PassSwapPromises( |
| 1163 ScopedPtrVector<SwapPromise>* new_swap_promise) { | 1077 ScopedPtrVector<SwapPromise>* new_swap_promise) { |
| 1164 swap_promise_list_.insert_and_take(swap_promise_list_.end(), | 1078 swap_promise_list_.insert_and_take(swap_promise_list_.end(), |
| (...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1651 scoped_ptr<PendingPageScaleAnimation> pending_animation) { | 1565 scoped_ptr<PendingPageScaleAnimation> pending_animation) { |
| 1652 pending_page_scale_animation_ = pending_animation.Pass(); | 1566 pending_page_scale_animation_ = pending_animation.Pass(); |
| 1653 } | 1567 } |
| 1654 | 1568 |
| 1655 scoped_ptr<PendingPageScaleAnimation> | 1569 scoped_ptr<PendingPageScaleAnimation> |
| 1656 LayerTreeImpl::TakePendingPageScaleAnimation() { | 1570 LayerTreeImpl::TakePendingPageScaleAnimation() { |
| 1657 return pending_page_scale_animation_.Pass(); | 1571 return pending_page_scale_animation_.Pass(); |
| 1658 } | 1572 } |
| 1659 | 1573 |
| 1660 } // namespace cc | 1574 } // namespace cc |
| OLD | NEW |