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