Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(659)

Side by Side Diff: cc/trees/layer_tree_impl.cc

Issue 2720183003: Track the currently scrolling ScrollNode instead of the scrolling layer (Closed)
Patch Set: Rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698