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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 56 scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor, | 56 scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor, |
| 57 scoped_refptr<SyncedBrowserControls> top_controls_shown_ratio, | 57 scoped_refptr<SyncedBrowserControls> top_controls_shown_ratio, |
| 58 scoped_refptr<SyncedElasticOverscroll> elastic_overscroll) | 58 scoped_refptr<SyncedElasticOverscroll> elastic_overscroll) |
| 59 : layer_tree_host_impl_(layer_tree_host_impl), | 59 : layer_tree_host_impl_(layer_tree_host_impl), |
| 60 source_frame_number_(-1), | 60 source_frame_number_(-1), |
| 61 is_first_frame_after_commit_tracker_(-1), | 61 is_first_frame_after_commit_tracker_(-1), |
| 62 root_layer_for_testing_(nullptr), | 62 root_layer_for_testing_(nullptr), |
| 63 hud_layer_(nullptr), | 63 hud_layer_(nullptr), |
| 64 background_color_(0), | 64 background_color_(0), |
| 65 has_transparent_background_(false), | 65 has_transparent_background_(false), |
| 66 last_scrolled_layer_id_(Layer::INVALID_ID), | 66 last_scrolled_scroll_node_index_(ScrollTree::kInvalidNodeId), |
| 67 overscroll_elasticity_layer_id_(Layer::INVALID_ID), | 67 overscroll_elasticity_layer_id_(Layer::INVALID_ID), |
| 68 page_scale_layer_id_(Layer::INVALID_ID), | 68 page_scale_layer_id_(Layer::INVALID_ID), |
| 69 inner_viewport_scroll_layer_id_(Layer::INVALID_ID), | 69 inner_viewport_scroll_layer_id_(Layer::INVALID_ID), |
| 70 outer_viewport_scroll_layer_id_(Layer::INVALID_ID), | 70 outer_viewport_scroll_layer_id_(Layer::INVALID_ID), |
| 71 page_scale_factor_(page_scale_factor), | 71 page_scale_factor_(page_scale_factor), |
| 72 min_page_scale_factor_(0), | 72 min_page_scale_factor_(0), |
| 73 max_page_scale_factor_(0), | 73 max_page_scale_factor_(0), |
| 74 device_scale_factor_(1.f), | 74 device_scale_factor_(1.f), |
| 75 painted_device_scale_factor_(1.f), | 75 painted_device_scale_factor_(1.f), |
| 76 elastic_overscroll_(elastic_overscroll), | 76 elastic_overscroll_(elastic_overscroll), |
| (...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 429 outer_container->bounds_delta()); | 429 outer_container->bounds_delta()); |
| 430 if (inner_scroll) | 430 if (inner_scroll) |
| 431 property_trees_.SetInnerViewportScrollBoundsDelta( | 431 property_trees_.SetInnerViewportScrollBoundsDelta( |
| 432 inner_scroll->bounds_delta()); | 432 inner_scroll->bounds_delta()); |
| 433 } | 433 } |
| 434 | 434 |
| 435 void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { | 435 void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { |
| 436 // The request queue should have been processed and does not require a push. | 436 // The request queue should have been processed and does not require a push. |
| 437 DCHECK_EQ(ui_resource_request_queue_.size(), 0u); | 437 DCHECK_EQ(ui_resource_request_queue_.size(), 0u); |
| 438 | 438 |
| 439 LayerImpl* layer = target_tree->CurrentlyScrollingLayer(); | 439 auto* currently_scrolling_node = target_tree->CurrentlyScrollingNode(); |
|
ajuma
2017/02/28 22:59:37
This gets a pointer to a node in the target tree's
pdr.
2017/03/01 07:21:03
You're right, and fixing this makes the TreeSynch
ajuma
2017/03/01 15:29:20
I think the longer term approach would be to use t
| |
| 440 target_tree->SetPropertyTrees(&property_trees_); | 440 target_tree->SetPropertyTrees(&property_trees_); |
| 441 target_tree->SetCurrentlyScrollingLayer(layer); | 441 target_tree->SetCurrentlyScrollingNode(currently_scrolling_node); |
| 442 target_tree->property_trees()->scroll_tree.PushScrollUpdatesFromPendingTree( | 442 target_tree->property_trees()->scroll_tree.PushScrollUpdatesFromPendingTree( |
| 443 &property_trees_, target_tree); | 443 &property_trees_, target_tree); |
| 444 | 444 |
| 445 // This needs to be called early so that we don't clamp with incorrect max | 445 // This needs to be called early so that we don't clamp with incorrect max |
| 446 // offsets when UpdateViewportContainerSizes is called from e.g. | 446 // offsets when UpdateViewportContainerSizes is called from e.g. |
| 447 // PushBrowserControls | 447 // PushBrowserControls |
| 448 target_tree->UpdatePropertyTreesForBoundsDelta(); | 448 target_tree->UpdatePropertyTreesForBoundsDelta(); |
| 449 | 449 |
| 450 if (next_activation_forces_redraw_) { | 450 if (next_activation_forces_redraw_) { |
| 451 target_tree->ForceRedrawNextActivation(); | 451 target_tree->ForceRedrawNextActivation(); |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 622 ? InnerViewportScrollLayer()->scroll_clip_layer() | 622 ? InnerViewportScrollLayer()->scroll_clip_layer() |
| 623 : NULL; | 623 : NULL; |
| 624 } | 624 } |
| 625 | 625 |
| 626 LayerImpl* LayerTreeImpl::OuterViewportContainerLayer() const { | 626 LayerImpl* LayerTreeImpl::OuterViewportContainerLayer() const { |
| 627 return OuterViewportScrollLayer() | 627 return OuterViewportScrollLayer() |
| 628 ? OuterViewportScrollLayer()->scroll_clip_layer() | 628 ? OuterViewportScrollLayer()->scroll_clip_layer() |
| 629 : NULL; | 629 : NULL; |
| 630 } | 630 } |
| 631 | 631 |
| 632 LayerImpl* LayerTreeImpl::CurrentlyScrollingLayer() const { | 632 ScrollNode* LayerTreeImpl::CurrentlyScrollingNode() { |
| 633 DCHECK(IsActiveTree()); | 633 DCHECK(IsActiveTree()); |
| 634 const ScrollNode* scroll_node = | 634 return property_trees_.scroll_tree.CurrentlyScrollingNode(); |
| 635 property_trees_.scroll_tree.CurrentlyScrollingNode(); | |
| 636 return LayerById(scroll_node ? scroll_node->owning_layer_id | |
| 637 : Layer::INVALID_ID); | |
| 638 } | 635 } |
| 639 | 636 |
| 640 int LayerTreeImpl::LastScrolledLayerId() const { | 637 const ScrollNode* LayerTreeImpl::CurrentlyScrollingNode() const { |
| 641 return last_scrolled_layer_id_; | 638 return property_trees_.scroll_tree.CurrentlyScrollingNode(); |
| 642 } | 639 } |
| 643 | 640 |
| 644 void LayerTreeImpl::SetCurrentlyScrollingLayer(LayerImpl* layer) { | 641 int LayerTreeImpl::LastScrolledScrollNodeIndex() const { |
| 642 return last_scrolled_scroll_node_index_; | |
| 643 } | |
| 644 | |
| 645 void LayerTreeImpl::SetCurrentlyScrollingNode(ScrollNode* node) { | |
| 646 if (node) | |
| 647 last_scrolled_scroll_node_index_ = node->id; | |
| 648 | |
| 645 ScrollTree& scroll_tree = property_trees()->scroll_tree; | 649 ScrollTree& scroll_tree = property_trees()->scroll_tree; |
| 646 ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode(); | 650 ScrollNode* old_node = scroll_tree.CurrentlyScrollingNode(); |
| 647 int old_id = scroll_node ? scroll_node->owning_layer_id : Layer::INVALID_ID; | 651 // TODO(pdr): Refactor these to not use owning_layer_id. |
| 648 int new_id = layer ? layer->id() : Layer::INVALID_ID; | 652 int old_layer_id = old_node ? old_node->owning_layer_id : Layer::INVALID_ID; |
| 649 int new_scroll_node_id = | 653 int new_layer_id = node ? node->owning_layer_id : Layer::INVALID_ID; |
| 650 layer ? layer->scroll_tree_index() : ScrollTree::kInvalidNodeId; | |
| 651 if (layer) | |
| 652 last_scrolled_layer_id_ = new_id; | |
| 653 | 654 |
| 654 if (old_id == new_id) | 655 if (old_layer_id == new_layer_id) |
| 655 return; | 656 return; |
| 656 | 657 |
| 657 ScrollbarAnimationController* old_animation_controller = | 658 ScrollbarAnimationController* old_animation_controller = |
| 658 layer_tree_host_impl_->ScrollbarAnimationControllerForId(old_id); | 659 layer_tree_host_impl_->ScrollbarAnimationControllerForId(old_layer_id); |
| 659 ScrollbarAnimationController* new_animation_controller = | 660 ScrollbarAnimationController* new_animation_controller = |
| 660 layer_tree_host_impl_->ScrollbarAnimationControllerForId(new_id); | 661 layer_tree_host_impl_->ScrollbarAnimationControllerForId(new_layer_id); |
| 661 | 662 |
| 662 if (old_animation_controller) | 663 if (old_animation_controller) |
| 663 old_animation_controller->DidScrollEnd(); | 664 old_animation_controller->DidScrollEnd(); |
| 664 scroll_tree.set_currently_scrolling_node(new_scroll_node_id); | 665 scroll_tree.set_currently_scrolling_node(node ? node->id |
| 666 : ScrollTree::kInvalidNodeId); | |
| 665 if (new_animation_controller) | 667 if (new_animation_controller) |
| 666 new_animation_controller->DidScrollBegin(); | 668 new_animation_controller->DidScrollBegin(); |
| 667 } | 669 } |
| 668 | 670 |
| 669 void LayerTreeImpl::ClearCurrentlyScrollingLayer() { | 671 void LayerTreeImpl::ClearCurrentlyScrollingNode() { |
| 670 SetCurrentlyScrollingLayer(NULL); | 672 SetCurrentlyScrollingNode(nullptr); |
| 671 } | 673 } |
| 672 | 674 |
| 673 float LayerTreeImpl::ClampPageScaleFactorToLimits( | 675 float LayerTreeImpl::ClampPageScaleFactorToLimits( |
| 674 float page_scale_factor) const { | 676 float page_scale_factor) const { |
| 675 if (min_page_scale_factor_ && page_scale_factor < min_page_scale_factor_) | 677 if (min_page_scale_factor_ && page_scale_factor < min_page_scale_factor_) |
| 676 page_scale_factor = min_page_scale_factor_; | 678 page_scale_factor = min_page_scale_factor_; |
| 677 else if (max_page_scale_factor_ && page_scale_factor > max_page_scale_factor_) | 679 else if (max_page_scale_factor_ && page_scale_factor > max_page_scale_factor_) |
| 678 page_scale_factor = max_page_scale_factor_; | 680 page_scale_factor = max_page_scale_factor_; |
| 679 return page_scale_factor; | 681 return page_scale_factor; |
| 680 } | 682 } |
| (...skipping 1431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2112 | 2114 |
| 2113 void LayerTreeImpl::ResetAllChangeTracking() { | 2115 void LayerTreeImpl::ResetAllChangeTracking() { |
| 2114 layers_that_should_push_properties_.clear(); | 2116 layers_that_should_push_properties_.clear(); |
| 2115 // Iterate over all layers, including masks. | 2117 // Iterate over all layers, including masks. |
| 2116 for (auto& layer : *layers_) | 2118 for (auto& layer : *layers_) |
| 2117 layer->ResetChangeTracking(); | 2119 layer->ResetChangeTracking(); |
| 2118 property_trees_.ResetAllChangeTracking(); | 2120 property_trees_.ResetAllChangeTracking(); |
| 2119 } | 2121 } |
| 2120 | 2122 |
| 2121 } // namespace cc | 2123 } // namespace cc |
| OLD | NEW |