| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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.h" | 5 #include "cc/trees/layer_tree.h" |
| 6 | 6 |
| 7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
| 8 #include "base/time/time.h" | 8 #include "base/time/time.h" |
| 9 #include "cc/input/page_scale_animation.h" | 9 #include "cc/input/page_scale_animation.h" |
| 10 #include "cc/layers/heads_up_display_layer.h" | 10 #include "cc/layers/heads_up_display_layer.h" |
| 11 #include "cc/layers/heads_up_display_layer_impl.h" | 11 #include "cc/layers/heads_up_display_layer_impl.h" |
| 12 #include "cc/layers/layer.h" | 12 #include "cc/layers/layer.h" |
| 13 #include "cc/trees/layer_tree_host.h" | 13 #include "cc/trees/layer_tree_host.h" |
| 14 #include "cc/trees/layer_tree_host_common.h" | 14 #include "cc/trees/layer_tree_host_common.h" |
| 15 #include "cc/trees/layer_tree_impl.h" | 15 #include "cc/trees/layer_tree_impl.h" |
| 16 #include "cc/trees/mutator_host.h" | 16 #include "cc/trees/mutator_host.h" |
| 17 #include "cc/trees/property_tree_builder.h" | 17 #include "cc/trees/property_tree_builder.h" |
| 18 | 18 |
| 19 namespace cc { | 19 namespace cc { |
| 20 | 20 |
| 21 LayerTree::Inputs::Inputs() | |
| 22 : top_controls_height(0.f), | |
| 23 top_controls_shown_ratio(0.f), | |
| 24 browser_controls_shrink_blink_size(false), | |
| 25 bottom_controls_height(0.f), | |
| 26 device_scale_factor(1.f), | |
| 27 painted_device_scale_factor(1.f), | |
| 28 page_scale_factor(1.f), | |
| 29 min_page_scale_factor(1.f), | |
| 30 max_page_scale_factor(1.f), | |
| 31 background_color(SK_ColorWHITE), | |
| 32 has_transparent_background(false), | |
| 33 have_scroll_event_handlers(false), | |
| 34 event_listener_properties() {} | |
| 35 | |
| 36 LayerTree::Inputs::~Inputs() = default; | |
| 37 | |
| 38 LayerTree::LayerTree(MutatorHost* mutator_host, LayerTreeHost* layer_tree_host) | 21 LayerTree::LayerTree(MutatorHost* mutator_host, LayerTreeHost* layer_tree_host) |
| 39 : needs_full_tree_sync_(true), | 22 : event_listener_properties_(), |
| 40 needs_meta_info_recomputation_(true), | |
| 41 in_paint_layer_contents_(false), | |
| 42 mutator_host_(mutator_host), | 23 mutator_host_(mutator_host), |
| 43 layer_tree_host_(layer_tree_host) { | 24 layer_tree_host_(layer_tree_host) { |
| 44 DCHECK(mutator_host_); | 25 DCHECK(mutator_host_); |
| 45 DCHECK(layer_tree_host_); | 26 DCHECK(layer_tree_host_); |
| 46 mutator_host_->SetMutatorHostClient(this); | 27 mutator_host_->SetMutatorHostClient(this); |
| 47 } | 28 } |
| 48 | 29 |
| 49 LayerTree::~LayerTree() { | 30 LayerTree::~LayerTree() { |
| 50 mutator_host_->SetMutatorHostClient(nullptr); | 31 mutator_host_->SetMutatorHostClient(nullptr); |
| 51 | 32 |
| 52 // We must clear any pointers into the layer tree prior to destroying it. | 33 // We must clear any pointers into the layer tree prior to destroying it. |
| 53 RegisterViewportLayers(nullptr, nullptr, nullptr, nullptr); | 34 RegisterViewportLayers(nullptr, nullptr, nullptr, nullptr); |
| 54 | 35 |
| 55 if (inputs_.root_layer) { | 36 if (root_layer_) { |
| 56 inputs_.root_layer->SetLayerTreeHost(nullptr); | 37 root_layer_->SetLayerTreeHost(nullptr); |
| 57 | 38 |
| 58 // The root layer must be destroyed before the layer tree. We've made a | 39 // The root layer must be destroyed before the layer tree. We've made a |
| 59 // contract with our animation controllers that the animation_host will | 40 // contract with our animation controllers that the animation_host will |
| 60 // outlive them, and we must make good. | 41 // outlive them, and we must make good. |
| 61 inputs_.root_layer = nullptr; | 42 root_layer_ = nullptr; |
| 62 } | 43 } |
| 63 } | 44 } |
| 64 | 45 |
| 65 void LayerTree::SetRootLayer(scoped_refptr<Layer> root_layer) { | 46 void LayerTree::SetRootLayer(scoped_refptr<Layer> root_layer) { |
| 66 if (inputs_.root_layer.get() == root_layer.get()) | 47 if (root_layer_.get() == root_layer.get()) |
| 67 return; | 48 return; |
| 68 | 49 |
| 69 if (inputs_.root_layer.get()) | 50 if (root_layer_.get()) |
| 70 inputs_.root_layer->SetLayerTreeHost(nullptr); | 51 root_layer_->SetLayerTreeHost(nullptr); |
| 71 inputs_.root_layer = root_layer; | 52 root_layer_ = root_layer; |
| 72 if (inputs_.root_layer.get()) { | 53 if (root_layer_.get()) { |
| 73 DCHECK(!inputs_.root_layer->parent()); | 54 DCHECK(!root_layer_->parent()); |
| 74 inputs_.root_layer->SetLayerTreeHost(layer_tree_host_); | 55 root_layer_->SetLayerTreeHost(layer_tree_host_); |
| 75 } | 56 } |
| 76 | 57 |
| 77 if (hud_layer_.get()) | 58 if (hud_layer_.get()) |
| 78 hud_layer_->RemoveFromParent(); | 59 hud_layer_->RemoveFromParent(); |
| 79 | 60 |
| 80 // Reset gpu rasterization tracking. | 61 // Reset gpu rasterization tracking. |
| 81 // This flag is sticky until a new tree comes along. | 62 // This flag is sticky until a new tree comes along. |
| 82 layer_tree_host_->ResetGpuRasterizationTracking(); | 63 layer_tree_host_->ResetGpuRasterizationTracking(); |
| 83 | 64 |
| 84 SetNeedsFullTreeSync(); | 65 SetNeedsFullTreeSync(); |
| 85 } | 66 } |
| 86 | 67 |
| 87 void LayerTree::RegisterViewportLayers( | 68 void LayerTree::RegisterViewportLayers( |
| 88 scoped_refptr<Layer> overscroll_elasticity_layer, | 69 scoped_refptr<Layer> overscroll_elasticity_layer, |
| 89 scoped_refptr<Layer> page_scale_layer, | 70 scoped_refptr<Layer> page_scale_layer, |
| 90 scoped_refptr<Layer> inner_viewport_scroll_layer, | 71 scoped_refptr<Layer> inner_viewport_scroll_layer, |
| 91 scoped_refptr<Layer> outer_viewport_scroll_layer) { | 72 scoped_refptr<Layer> outer_viewport_scroll_layer) { |
| 92 DCHECK(!inner_viewport_scroll_layer || | 73 DCHECK(!inner_viewport_scroll_layer || |
| 93 inner_viewport_scroll_layer != outer_viewport_scroll_layer); | 74 inner_viewport_scroll_layer != outer_viewport_scroll_layer); |
| 94 inputs_.overscroll_elasticity_layer = overscroll_elasticity_layer; | 75 overscroll_elasticity_layer_ = overscroll_elasticity_layer; |
| 95 inputs_.page_scale_layer = page_scale_layer; | 76 page_scale_layer_ = page_scale_layer; |
| 96 inputs_.inner_viewport_scroll_layer = inner_viewport_scroll_layer; | 77 inner_viewport_scroll_layer_ = inner_viewport_scroll_layer; |
| 97 inputs_.outer_viewport_scroll_layer = outer_viewport_scroll_layer; | 78 outer_viewport_scroll_layer_ = outer_viewport_scroll_layer; |
| 98 } | 79 } |
| 99 | 80 |
| 100 void LayerTree::RegisterSelection(const LayerSelection& selection) { | 81 void LayerTree::RegisterSelection(const LayerSelection& selection) { |
| 101 if (inputs_.selection == selection) | 82 if (selection_ == selection) |
| 102 return; | 83 return; |
| 103 | 84 |
| 104 inputs_.selection = selection; | 85 selection_ = selection; |
| 105 SetNeedsCommit(); | 86 SetNeedsCommit(); |
| 106 } | 87 } |
| 107 | 88 |
| 108 void LayerTree::SetHaveScrollEventHandlers(bool have_event_handlers) { | 89 void LayerTree::SetHaveScrollEventHandlers(bool have_event_handlers) { |
| 109 if (inputs_.have_scroll_event_handlers == have_event_handlers) | 90 if (have_scroll_event_handlers_ == have_event_handlers) |
| 110 return; | 91 return; |
| 111 | 92 |
| 112 inputs_.have_scroll_event_handlers = have_event_handlers; | 93 have_scroll_event_handlers_ = have_event_handlers; |
| 113 SetNeedsCommit(); | 94 SetNeedsCommit(); |
| 114 } | 95 } |
| 115 | 96 |
| 116 void LayerTree::SetEventListenerProperties(EventListenerClass event_class, | 97 void LayerTree::SetEventListenerProperties(EventListenerClass event_class, |
| 117 EventListenerProperties properties) { | 98 EventListenerProperties properties) { |
| 118 const size_t index = static_cast<size_t>(event_class); | 99 const size_t index = static_cast<size_t>(event_class); |
| 119 if (inputs_.event_listener_properties[index] == properties) | 100 if (event_listener_properties_[index] == properties) |
| 120 return; | 101 return; |
| 121 | 102 |
| 122 inputs_.event_listener_properties[index] = properties; | 103 event_listener_properties_[index] = properties; |
| 123 SetNeedsCommit(); | 104 SetNeedsCommit(); |
| 124 } | 105 } |
| 125 | 106 |
| 126 void LayerTree::SetViewportSize(const gfx::Size& device_viewport_size) { | 107 void LayerTree::SetViewportSize(const gfx::Size& device_viewport_size) { |
| 127 if (inputs_.device_viewport_size == device_viewport_size) | 108 if (device_viewport_size_ == device_viewport_size) |
| 128 return; | 109 return; |
| 129 | 110 |
| 130 inputs_.device_viewport_size = device_viewport_size; | 111 device_viewport_size_ = device_viewport_size; |
| 131 | 112 |
| 132 SetPropertyTreesNeedRebuild(); | 113 SetPropertyTreesNeedRebuild(); |
| 133 SetNeedsCommit(); | 114 SetNeedsCommit(); |
| 134 } | 115 } |
| 135 | 116 |
| 136 void LayerTree::SetBrowserControlsHeight(float height, bool shrink) { | 117 void LayerTree::SetBrowserControlsHeight(float height, bool shrink) { |
| 137 if (inputs_.top_controls_height == height && | 118 if (top_controls_height_ == height && |
| 138 inputs_.browser_controls_shrink_blink_size == shrink) | 119 browser_controls_shrink_blink_size_ == shrink) |
| 139 return; | 120 return; |
| 140 | 121 |
| 141 inputs_.top_controls_height = height; | 122 top_controls_height_ = height; |
| 142 inputs_.browser_controls_shrink_blink_size = shrink; | 123 browser_controls_shrink_blink_size_ = shrink; |
| 143 SetNeedsCommit(); | 124 SetNeedsCommit(); |
| 144 } | 125 } |
| 145 | 126 |
| 146 void LayerTree::SetBrowserControlsShownRatio(float ratio) { | 127 void LayerTree::SetBrowserControlsShownRatio(float ratio) { |
| 147 if (inputs_.top_controls_shown_ratio == ratio) | 128 if (top_controls_shown_ratio_ == ratio) |
| 148 return; | 129 return; |
| 149 | 130 |
| 150 inputs_.top_controls_shown_ratio = ratio; | 131 top_controls_shown_ratio_ = ratio; |
| 151 SetNeedsCommit(); | 132 SetNeedsCommit(); |
| 152 } | 133 } |
| 153 | 134 |
| 154 void LayerTree::SetBottomControlsHeight(float height) { | 135 void LayerTree::SetBottomControlsHeight(float height) { |
| 155 if (inputs_.bottom_controls_height == height) | 136 if (bottom_controls_height_ == height) |
| 156 return; | 137 return; |
| 157 | 138 |
| 158 inputs_.bottom_controls_height = height; | 139 bottom_controls_height_ = height; |
| 159 SetNeedsCommit(); | 140 SetNeedsCommit(); |
| 160 } | 141 } |
| 161 | 142 |
| 162 void LayerTree::SetPageScaleFactorAndLimits(float page_scale_factor, | 143 void LayerTree::SetPageScaleFactorAndLimits(float page_scale_factor, |
| 163 float min_page_scale_factor, | 144 float min_page_scale_factor, |
| 164 float max_page_scale_factor) { | 145 float max_page_scale_factor) { |
| 165 if (inputs_.page_scale_factor == page_scale_factor && | 146 if (page_scale_factor_ == page_scale_factor && |
| 166 inputs_.min_page_scale_factor == min_page_scale_factor && | 147 min_page_scale_factor_ == min_page_scale_factor && |
| 167 inputs_.max_page_scale_factor == max_page_scale_factor) | 148 max_page_scale_factor_ == max_page_scale_factor) |
| 168 return; | 149 return; |
| 169 | 150 |
| 170 inputs_.page_scale_factor = page_scale_factor; | 151 page_scale_factor_ = page_scale_factor; |
| 171 inputs_.min_page_scale_factor = min_page_scale_factor; | 152 min_page_scale_factor_ = min_page_scale_factor; |
| 172 inputs_.max_page_scale_factor = max_page_scale_factor; | 153 max_page_scale_factor_ = max_page_scale_factor; |
| 173 SetPropertyTreesNeedRebuild(); | 154 SetPropertyTreesNeedRebuild(); |
| 174 SetNeedsCommit(); | 155 SetNeedsCommit(); |
| 175 } | 156 } |
| 176 | 157 |
| 177 void LayerTree::StartPageScaleAnimation(const gfx::Vector2d& target_offset, | 158 void LayerTree::StartPageScaleAnimation(const gfx::Vector2d& target_offset, |
| 178 bool use_anchor, | 159 bool use_anchor, |
| 179 float scale, | 160 float scale, |
| 180 base::TimeDelta duration) { | 161 base::TimeDelta duration) { |
| 181 inputs_.pending_page_scale_animation.reset(new PendingPageScaleAnimation( | 162 pending_page_scale_animation_.reset(new PendingPageScaleAnimation( |
| 182 target_offset, use_anchor, scale, duration)); | 163 target_offset, use_anchor, scale, duration)); |
| 183 | 164 |
| 184 SetNeedsCommit(); | 165 SetNeedsCommit(); |
| 185 } | 166 } |
| 186 | 167 |
| 187 bool LayerTree::HasPendingPageScaleAnimation() const { | 168 bool LayerTree::HasPendingPageScaleAnimation() const { |
| 188 return !!inputs_.pending_page_scale_animation.get(); | 169 return !!pending_page_scale_animation_.get(); |
| 189 } | 170 } |
| 190 | 171 |
| 191 void LayerTree::SetDeviceScaleFactor(float device_scale_factor) { | 172 void LayerTree::SetDeviceScaleFactor(float device_scale_factor) { |
| 192 if (inputs_.device_scale_factor == device_scale_factor) | 173 if (device_scale_factor_ == device_scale_factor) |
| 193 return; | 174 return; |
| 194 inputs_.device_scale_factor = device_scale_factor; | 175 device_scale_factor_ = device_scale_factor; |
| 195 | 176 |
| 196 property_trees_.needs_rebuild = true; | 177 property_trees_.needs_rebuild = true; |
| 197 SetNeedsCommit(); | 178 SetNeedsCommit(); |
| 198 } | 179 } |
| 199 | 180 |
| 200 void LayerTree::SetPaintedDeviceScaleFactor(float painted_device_scale_factor) { | 181 void LayerTree::SetPaintedDeviceScaleFactor(float painted_device_scale_factor) { |
| 201 if (inputs_.painted_device_scale_factor == painted_device_scale_factor) | 182 if (painted_device_scale_factor_ == painted_device_scale_factor) |
| 202 return; | 183 return; |
| 203 inputs_.painted_device_scale_factor = painted_device_scale_factor; | 184 painted_device_scale_factor_ = painted_device_scale_factor; |
| 204 | 185 |
| 205 SetNeedsCommit(); | 186 SetNeedsCommit(); |
| 206 } | 187 } |
| 207 | 188 |
| 208 void LayerTree::SetDeviceColorSpace(const gfx::ColorSpace& device_color_space) { | 189 void LayerTree::SetDeviceColorSpace(const gfx::ColorSpace& device_color_space) { |
| 209 if (inputs_.device_color_space == device_color_space) | 190 if (device_color_space_ == device_color_space) |
| 210 return; | 191 return; |
| 211 inputs_.device_color_space = device_color_space; | 192 device_color_space_ = device_color_space; |
| 212 LayerTreeHostCommon::CallFunctionForEveryLayer( | 193 LayerTreeHostCommon::CallFunctionForEveryLayer( |
| 213 this, [](Layer* layer) { layer->SetNeedsDisplay(); }); | 194 this, [](Layer* layer) { layer->SetNeedsDisplay(); }); |
| 214 } | 195 } |
| 215 | 196 |
| 216 void LayerTree::RegisterLayer(Layer* layer) { | 197 void LayerTree::RegisterLayer(Layer* layer) { |
| 217 DCHECK(!LayerById(layer->id())); | 198 DCHECK(!LayerById(layer->id())); |
| 218 DCHECK(!in_paint_layer_contents_); | 199 DCHECK(!in_paint_layer_contents_); |
| 219 layer_id_map_[layer->id()] = layer; | 200 layer_id_map_[layer->id()] = layer; |
| 220 if (layer->element_id()) { | 201 if (layer->element_id()) { |
| 221 mutator_host_->RegisterElement(layer->element_id(), | 202 mutator_host_->RegisterElement(layer->element_id(), |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 return layers_that_should_push_properties_.find(layer) != | 251 return layers_that_should_push_properties_.find(layer) != |
| 271 layers_that_should_push_properties_.end(); | 252 layers_that_should_push_properties_.end(); |
| 272 } | 253 } |
| 273 | 254 |
| 274 void LayerTree::SetNeedsMetaInfoRecomputation(bool needs_recomputation) { | 255 void LayerTree::SetNeedsMetaInfoRecomputation(bool needs_recomputation) { |
| 275 needs_meta_info_recomputation_ = needs_recomputation; | 256 needs_meta_info_recomputation_ = needs_recomputation; |
| 276 } | 257 } |
| 277 | 258 |
| 278 void LayerTree::SetPageScaleFromImplSide(float page_scale) { | 259 void LayerTree::SetPageScaleFromImplSide(float page_scale) { |
| 279 DCHECK(layer_tree_host_->CommitRequested()); | 260 DCHECK(layer_tree_host_->CommitRequested()); |
| 280 inputs_.page_scale_factor = page_scale; | 261 page_scale_factor_ = page_scale; |
| 281 SetPropertyTreesNeedRebuild(); | 262 SetPropertyTreesNeedRebuild(); |
| 282 } | 263 } |
| 283 | 264 |
| 284 void LayerTree::SetElasticOverscrollFromImplSide( | 265 void LayerTree::SetElasticOverscrollFromImplSide( |
| 285 gfx::Vector2dF elastic_overscroll) { | 266 gfx::Vector2dF elastic_overscroll) { |
| 286 DCHECK(layer_tree_host_->CommitRequested()); | 267 DCHECK(layer_tree_host_->CommitRequested()); |
| 287 elastic_overscroll_ = elastic_overscroll; | 268 elastic_overscroll_ = elastic_overscroll; |
| 288 } | 269 } |
| 289 | 270 |
| 290 void LayerTree::UpdateHudLayer(bool show_hud_info) { | 271 void LayerTree::UpdateHudLayer(bool show_hud_info) { |
| 291 if (show_hud_info) { | 272 if (show_hud_info) { |
| 292 if (!hud_layer_.get()) { | 273 if (!hud_layer_.get()) { |
| 293 hud_layer_ = HeadsUpDisplayLayer::Create(); | 274 hud_layer_ = HeadsUpDisplayLayer::Create(); |
| 294 } | 275 } |
| 295 | 276 |
| 296 if (inputs_.root_layer.get() && !hud_layer_->parent()) | 277 if (root_layer_.get() && !hud_layer_->parent()) |
| 297 inputs_.root_layer->AddChild(hud_layer_); | 278 root_layer_->AddChild(hud_layer_); |
| 298 } else if (hud_layer_.get()) { | 279 } else if (hud_layer_.get()) { |
| 299 hud_layer_->RemoveFromParent(); | 280 hud_layer_->RemoveFromParent(); |
| 300 hud_layer_ = nullptr; | 281 hud_layer_ = nullptr; |
| 301 } | 282 } |
| 302 } | 283 } |
| 303 | 284 |
| 304 void LayerTree::SetNeedsFullTreeSync() { | 285 void LayerTree::SetNeedsFullTreeSync() { |
| 305 needs_full_tree_sync_ = true; | 286 needs_full_tree_sync_ = true; |
| 306 needs_meta_info_recomputation_ = true; | 287 needs_meta_info_recomputation_ = true; |
| 307 | 288 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 326 tree_impl->set_needs_full_tree_sync(needs_full_tree_sync_); | 307 tree_impl->set_needs_full_tree_sync(needs_full_tree_sync_); |
| 327 needs_full_tree_sync_ = false; | 308 needs_full_tree_sync_ = false; |
| 328 | 309 |
| 329 if (hud_layer_.get()) { | 310 if (hud_layer_.get()) { |
| 330 LayerImpl* hud_impl = tree_impl->LayerById(hud_layer_->id()); | 311 LayerImpl* hud_impl = tree_impl->LayerById(hud_layer_->id()); |
| 331 tree_impl->set_hud_layer(static_cast<HeadsUpDisplayLayerImpl*>(hud_impl)); | 312 tree_impl->set_hud_layer(static_cast<HeadsUpDisplayLayerImpl*>(hud_impl)); |
| 332 } else { | 313 } else { |
| 333 tree_impl->set_hud_layer(nullptr); | 314 tree_impl->set_hud_layer(nullptr); |
| 334 } | 315 } |
| 335 | 316 |
| 336 tree_impl->set_background_color(inputs_.background_color); | 317 tree_impl->set_background_color(background_color_); |
| 337 tree_impl->set_has_transparent_background(inputs_.has_transparent_background); | 318 tree_impl->set_has_transparent_background(has_transparent_background_); |
| 338 tree_impl->set_have_scroll_event_handlers(inputs_.have_scroll_event_handlers); | 319 tree_impl->set_have_scroll_event_handlers(have_scroll_event_handlers_); |
| 339 tree_impl->set_event_listener_properties( | 320 tree_impl->set_event_listener_properties( |
| 340 EventListenerClass::kTouchStartOrMove, | 321 EventListenerClass::kTouchStartOrMove, |
| 341 event_listener_properties(EventListenerClass::kTouchStartOrMove)); | 322 event_listener_properties(EventListenerClass::kTouchStartOrMove)); |
| 342 tree_impl->set_event_listener_properties( | 323 tree_impl->set_event_listener_properties( |
| 343 EventListenerClass::kMouseWheel, | 324 EventListenerClass::kMouseWheel, |
| 344 event_listener_properties(EventListenerClass::kMouseWheel)); | 325 event_listener_properties(EventListenerClass::kMouseWheel)); |
| 345 tree_impl->set_event_listener_properties( | 326 tree_impl->set_event_listener_properties( |
| 346 EventListenerClass::kTouchEndOrCancel, | 327 EventListenerClass::kTouchEndOrCancel, |
| 347 event_listener_properties(EventListenerClass::kTouchEndOrCancel)); | 328 event_listener_properties(EventListenerClass::kTouchEndOrCancel)); |
| 348 | 329 |
| 349 if (inputs_.page_scale_layer && inputs_.inner_viewport_scroll_layer) { | 330 if (page_scale_layer_ && inner_viewport_scroll_layer_) { |
| 350 tree_impl->SetViewportLayersFromIds( | 331 tree_impl->SetViewportLayersFromIds( |
| 351 inputs_.overscroll_elasticity_layer | 332 overscroll_elasticity_layer_ ? overscroll_elasticity_layer_->id() |
| 352 ? inputs_.overscroll_elasticity_layer->id() | 333 : Layer::INVALID_ID, |
| 353 : Layer::INVALID_ID, | 334 page_scale_layer_->id(), inner_viewport_scroll_layer_->id(), |
| 354 inputs_.page_scale_layer->id(), | 335 outer_viewport_scroll_layer_ ? outer_viewport_scroll_layer_->id() |
| 355 inputs_.inner_viewport_scroll_layer->id(), | 336 : Layer::INVALID_ID); |
| 356 inputs_.outer_viewport_scroll_layer | 337 DCHECK(inner_viewport_scroll_layer_->IsContainerForFixedPositionLayers()); |
| 357 ? inputs_.outer_viewport_scroll_layer->id() | |
| 358 : Layer::INVALID_ID); | |
| 359 DCHECK(inputs_.inner_viewport_scroll_layer | |
| 360 ->IsContainerForFixedPositionLayers()); | |
| 361 } else { | 338 } else { |
| 362 tree_impl->ClearViewportLayers(); | 339 tree_impl->ClearViewportLayers(); |
| 363 } | 340 } |
| 364 | 341 |
| 365 tree_impl->RegisterSelection(inputs_.selection); | 342 tree_impl->RegisterSelection(selection_); |
| 366 | 343 |
| 367 bool property_trees_changed_on_active_tree = | 344 bool property_trees_changed_on_active_tree = |
| 368 tree_impl->IsActiveTree() && tree_impl->property_trees()->changed; | 345 tree_impl->IsActiveTree() && tree_impl->property_trees()->changed; |
| 369 // Property trees may store damage status. We preserve the sync tree damage | 346 // Property trees may store damage status. We preserve the sync tree damage |
| 370 // status by pushing the damage status from sync tree property trees to main | 347 // status by pushing the damage status from sync tree property trees to main |
| 371 // thread property trees or by moving it onto the layers. | 348 // thread property trees or by moving it onto the layers. |
| 372 if (inputs_.root_layer && property_trees_changed_on_active_tree) { | 349 if (root_layer_ && property_trees_changed_on_active_tree) { |
| 373 if (property_trees_.sequence_number == | 350 if (property_trees_.sequence_number == |
| 374 tree_impl->property_trees()->sequence_number) | 351 tree_impl->property_trees()->sequence_number) |
| 375 tree_impl->property_trees()->PushChangeTrackingTo(&property_trees_); | 352 tree_impl->property_trees()->PushChangeTrackingTo(&property_trees_); |
| 376 else | 353 else |
| 377 tree_impl->MoveChangeTrackingToLayers(); | 354 tree_impl->MoveChangeTrackingToLayers(); |
| 378 } | 355 } |
| 379 // Setting property trees must happen before pushing the page scale. | 356 // Setting property trees must happen before pushing the page scale. |
| 380 tree_impl->SetPropertyTrees(&property_trees_); | 357 tree_impl->SetPropertyTrees(&property_trees_); |
| 381 | 358 |
| 382 tree_impl->PushPageScaleFromMainThread(inputs_.page_scale_factor, | 359 tree_impl->PushPageScaleFromMainThread( |
| 383 inputs_.min_page_scale_factor, | 360 page_scale_factor_, min_page_scale_factor_, max_page_scale_factor_); |
| 384 inputs_.max_page_scale_factor); | |
| 385 | 361 |
| 386 tree_impl->set_browser_controls_shrink_blink_size( | 362 tree_impl->set_browser_controls_shrink_blink_size( |
| 387 inputs_.browser_controls_shrink_blink_size); | 363 browser_controls_shrink_blink_size_); |
| 388 tree_impl->set_top_controls_height(inputs_.top_controls_height); | 364 tree_impl->set_top_controls_height(top_controls_height_); |
| 389 tree_impl->set_bottom_controls_height(inputs_.bottom_controls_height); | 365 tree_impl->set_bottom_controls_height(bottom_controls_height_); |
| 390 tree_impl->PushBrowserControlsFromMainThread( | 366 tree_impl->PushBrowserControlsFromMainThread(top_controls_shown_ratio_); |
| 391 inputs_.top_controls_shown_ratio); | |
| 392 tree_impl->elastic_overscroll()->PushFromMainThread(elastic_overscroll_); | 367 tree_impl->elastic_overscroll()->PushFromMainThread(elastic_overscroll_); |
| 393 if (tree_impl->IsActiveTree()) | 368 if (tree_impl->IsActiveTree()) |
| 394 tree_impl->elastic_overscroll()->PushPendingToActive(); | 369 tree_impl->elastic_overscroll()->PushPendingToActive(); |
| 395 | 370 |
| 396 tree_impl->set_painted_device_scale_factor( | 371 tree_impl->set_painted_device_scale_factor(painted_device_scale_factor_); |
| 397 inputs_.painted_device_scale_factor); | |
| 398 | 372 |
| 399 tree_impl->SetDeviceColorSpace(inputs_.device_color_space); | 373 tree_impl->SetDeviceColorSpace(device_color_space_); |
| 400 | 374 |
| 401 if (inputs_.pending_page_scale_animation) { | 375 if (pending_page_scale_animation_) { |
| 402 tree_impl->SetPendingPageScaleAnimation( | 376 tree_impl->SetPendingPageScaleAnimation( |
| 403 std::move(inputs_.pending_page_scale_animation)); | 377 std::move(pending_page_scale_animation_)); |
| 404 } | 378 } |
| 405 | 379 |
| 406 DCHECK(!tree_impl->ViewportSizeInvalid()); | 380 DCHECK(!tree_impl->ViewportSizeInvalid()); |
| 407 | 381 |
| 408 tree_impl->set_has_ever_been_drawn(false); | 382 tree_impl->set_has_ever_been_drawn(false); |
| 409 } | 383 } |
| 410 | 384 |
| 411 Layer* LayerTree::LayerByElementId(ElementId element_id) const { | 385 Layer* LayerTree::LayerByElementId(ElementId element_id) const { |
| 412 ElementLayersMap::const_iterator iter = element_layers_map_.find(element_id); | 386 ElementLayersMap::const_iterator iter = element_layers_map_.find(element_id); |
| 413 return iter != element_layers_map_.end() ? iter->second : nullptr; | 387 return iter != element_layers_map_.end() ? iter->second : nullptr; |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 507 } | 481 } |
| 508 | 482 |
| 509 gfx::ScrollOffset LayerTree::GetScrollOffsetForAnimation( | 483 gfx::ScrollOffset LayerTree::GetScrollOffsetForAnimation( |
| 510 ElementId element_id) const { | 484 ElementId element_id) const { |
| 511 Layer* layer = LayerByElementId(element_id); | 485 Layer* layer = LayerByElementId(element_id); |
| 512 DCHECK(layer); | 486 DCHECK(layer); |
| 513 return layer->ScrollOffsetForAnimation(); | 487 return layer->ScrollOffsetForAnimation(); |
| 514 } | 488 } |
| 515 | 489 |
| 516 LayerListIterator<Layer> LayerTree::begin() const { | 490 LayerListIterator<Layer> LayerTree::begin() const { |
| 517 return LayerListIterator<Layer>(inputs_.root_layer.get()); | 491 return LayerListIterator<Layer>(root_layer_.get()); |
| 518 } | 492 } |
| 519 | 493 |
| 520 LayerListIterator<Layer> LayerTree::end() const { | 494 LayerListIterator<Layer> LayerTree::end() const { |
| 521 return LayerListIterator<Layer>(nullptr); | 495 return LayerListIterator<Layer>(nullptr); |
| 522 } | 496 } |
| 523 | 497 |
| 524 LayerListReverseIterator<Layer> LayerTree::rbegin() { | 498 LayerListReverseIterator<Layer> LayerTree::rbegin() { |
| 525 return LayerListReverseIterator<Layer>(inputs_.root_layer.get()); | 499 return LayerListReverseIterator<Layer>(root_layer_.get()); |
| 526 } | 500 } |
| 527 | 501 |
| 528 LayerListReverseIterator<Layer> LayerTree::rend() { | 502 LayerListReverseIterator<Layer> LayerTree::rend() { |
| 529 return LayerListReverseIterator<Layer>(nullptr); | 503 return LayerListReverseIterator<Layer>(nullptr); |
| 530 } | 504 } |
| 531 | 505 |
| 532 void LayerTree::SetNeedsDisplayOnAllLayers() { | 506 void LayerTree::SetNeedsDisplayOnAllLayers() { |
| 533 for (auto* layer : *this) | 507 for (auto* layer : *this) |
| 534 layer->SetNeedsDisplay(); | 508 layer->SetNeedsDisplay(); |
| 535 } | 509 } |
| 536 | 510 |
| 537 } // namespace cc | 511 } // namespace cc |
| OLD | NEW |