| 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 // To maintain the correct currently scrolling node we need to use layer ids |
| 440 // which are stable across the property tree update in SetPropertyTrees. |
| 441 // TODO(pdr): Remove the use of owning_layer_id. |
| 442 int scrolling_layer_id = Layer::INVALID_ID; |
| 443 if (ScrollNode* node = target_tree->CurrentlyScrollingNode()) |
| 444 scrolling_layer_id = node->owning_layer_id; |
| 445 |
| 440 target_tree->SetPropertyTrees(&property_trees_); | 446 target_tree->SetPropertyTrees(&property_trees_); |
| 441 target_tree->SetCurrentlyScrollingLayer(layer); | 447 |
| 448 ScrollNode* scrolling_node = nullptr; |
| 449 auto& scroll_node_index_map = |
| 450 target_tree->property_trees()->layer_id_to_scroll_node_index; |
| 451 auto scrolling_node_it = scroll_node_index_map.find(scrolling_layer_id); |
| 452 if (scrolling_node_it != scroll_node_index_map.end()) { |
| 453 int index = scrolling_node_it->second; |
| 454 scrolling_node = target_tree->property_trees()->scroll_tree.Node(index); |
| 455 } |
| 456 target_tree->SetCurrentlyScrollingNode(scrolling_node); |
| 457 |
| 442 target_tree->property_trees()->scroll_tree.PushScrollUpdatesFromPendingTree( | 458 target_tree->property_trees()->scroll_tree.PushScrollUpdatesFromPendingTree( |
| 443 &property_trees_, target_tree); | 459 &property_trees_, target_tree); |
| 444 | 460 |
| 445 // This needs to be called early so that we don't clamp with incorrect max | 461 // This needs to be called early so that we don't clamp with incorrect max |
| 446 // offsets when UpdateViewportContainerSizes is called from e.g. | 462 // offsets when UpdateViewportContainerSizes is called from e.g. |
| 447 // PushBrowserControls | 463 // PushBrowserControls |
| 448 target_tree->UpdatePropertyTreesForBoundsDelta(); | 464 target_tree->UpdatePropertyTreesForBoundsDelta(); |
| 449 | 465 |
| 450 if (next_activation_forces_redraw_) { | 466 if (next_activation_forces_redraw_) { |
| 451 target_tree->ForceRedrawNextActivation(); | 467 target_tree->ForceRedrawNextActivation(); |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 622 ? InnerViewportScrollLayer()->scroll_clip_layer() | 638 ? InnerViewportScrollLayer()->scroll_clip_layer() |
| 623 : NULL; | 639 : NULL; |
| 624 } | 640 } |
| 625 | 641 |
| 626 LayerImpl* LayerTreeImpl::OuterViewportContainerLayer() const { | 642 LayerImpl* LayerTreeImpl::OuterViewportContainerLayer() const { |
| 627 return OuterViewportScrollLayer() | 643 return OuterViewportScrollLayer() |
| 628 ? OuterViewportScrollLayer()->scroll_clip_layer() | 644 ? OuterViewportScrollLayer()->scroll_clip_layer() |
| 629 : NULL; | 645 : NULL; |
| 630 } | 646 } |
| 631 | 647 |
| 632 LayerImpl* LayerTreeImpl::CurrentlyScrollingLayer() const { | 648 ScrollNode* LayerTreeImpl::CurrentlyScrollingNode() { |
| 633 DCHECK(IsActiveTree()); | 649 DCHECK(IsActiveTree()); |
| 634 const ScrollNode* scroll_node = | 650 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 } | 651 } |
| 639 | 652 |
| 640 int LayerTreeImpl::LastScrolledLayerId() const { | 653 const ScrollNode* LayerTreeImpl::CurrentlyScrollingNode() const { |
| 641 return last_scrolled_layer_id_; | 654 return property_trees_.scroll_tree.CurrentlyScrollingNode(); |
| 642 } | 655 } |
| 643 | 656 |
| 644 void LayerTreeImpl::SetCurrentlyScrollingLayer(LayerImpl* layer) { | 657 int LayerTreeImpl::LastScrolledScrollNodeIndex() const { |
| 658 return last_scrolled_scroll_node_index_; |
| 659 } |
| 660 |
| 661 void LayerTreeImpl::SetCurrentlyScrollingNode(ScrollNode* node) { |
| 662 if (node) |
| 663 last_scrolled_scroll_node_index_ = node->id; |
| 664 |
| 645 ScrollTree& scroll_tree = property_trees()->scroll_tree; | 665 ScrollTree& scroll_tree = property_trees()->scroll_tree; |
| 646 ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode(); | 666 ScrollNode* old_node = scroll_tree.CurrentlyScrollingNode(); |
| 647 int old_id = scroll_node ? scroll_node->owning_layer_id : Layer::INVALID_ID; | 667 // TODO(pdr): Refactor these to not use owning_layer_id. |
| 648 int new_id = layer ? layer->id() : Layer::INVALID_ID; | 668 int old_layer_id = old_node ? old_node->owning_layer_id : Layer::INVALID_ID; |
| 649 int new_scroll_node_id = | 669 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 | 670 |
| 654 if (old_id == new_id) | 671 if (old_layer_id == new_layer_id) |
| 655 return; | 672 return; |
| 656 | 673 |
| 657 ScrollbarAnimationController* old_animation_controller = | 674 ScrollbarAnimationController* old_animation_controller = |
| 658 layer_tree_host_impl_->ScrollbarAnimationControllerForId(old_id); | 675 layer_tree_host_impl_->ScrollbarAnimationControllerForId(old_layer_id); |
| 659 ScrollbarAnimationController* new_animation_controller = | 676 ScrollbarAnimationController* new_animation_controller = |
| 660 layer_tree_host_impl_->ScrollbarAnimationControllerForId(new_id); | 677 layer_tree_host_impl_->ScrollbarAnimationControllerForId(new_layer_id); |
| 661 | 678 |
| 662 if (old_animation_controller) | 679 if (old_animation_controller) |
| 663 old_animation_controller->DidScrollEnd(); | 680 old_animation_controller->DidScrollEnd(); |
| 664 scroll_tree.set_currently_scrolling_node(new_scroll_node_id); | 681 scroll_tree.set_currently_scrolling_node(node ? node->id |
| 682 : ScrollTree::kInvalidNodeId); |
| 665 if (new_animation_controller) | 683 if (new_animation_controller) |
| 666 new_animation_controller->DidScrollBegin(); | 684 new_animation_controller->DidScrollBegin(); |
| 667 } | 685 } |
| 668 | 686 |
| 669 void LayerTreeImpl::ClearCurrentlyScrollingLayer() { | 687 void LayerTreeImpl::ClearCurrentlyScrollingNode() { |
| 670 SetCurrentlyScrollingLayer(NULL); | 688 SetCurrentlyScrollingNode(nullptr); |
| 671 } | 689 } |
| 672 | 690 |
| 673 float LayerTreeImpl::ClampPageScaleFactorToLimits( | 691 float LayerTreeImpl::ClampPageScaleFactorToLimits( |
| 674 float page_scale_factor) const { | 692 float page_scale_factor) const { |
| 675 if (min_page_scale_factor_ && page_scale_factor < min_page_scale_factor_) | 693 if (min_page_scale_factor_ && page_scale_factor < min_page_scale_factor_) |
| 676 page_scale_factor = min_page_scale_factor_; | 694 page_scale_factor = min_page_scale_factor_; |
| 677 else if (max_page_scale_factor_ && page_scale_factor > max_page_scale_factor_) | 695 else if (max_page_scale_factor_ && page_scale_factor > max_page_scale_factor_) |
| 678 page_scale_factor = max_page_scale_factor_; | 696 page_scale_factor = max_page_scale_factor_; |
| 679 return page_scale_factor; | 697 return page_scale_factor; |
| 680 } | 698 } |
| (...skipping 1431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2112 | 2130 |
| 2113 void LayerTreeImpl::ResetAllChangeTracking() { | 2131 void LayerTreeImpl::ResetAllChangeTracking() { |
| 2114 layers_that_should_push_properties_.clear(); | 2132 layers_that_should_push_properties_.clear(); |
| 2115 // Iterate over all layers, including masks. | 2133 // Iterate over all layers, including masks. |
| 2116 for (auto& layer : *layers_) | 2134 for (auto& layer : *layers_) |
| 2117 layer->ResetChangeTracking(); | 2135 layer->ResetChangeTracking(); |
| 2118 property_trees_.ResetAllChangeTracking(); | 2136 property_trees_.ResetAllChangeTracking(); |
| 2119 } | 2137 } |
| 2120 | 2138 |
| 2121 } // namespace cc | 2139 } // namespace cc |
| OLD | NEW |