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

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

Issue 1805343006: cc: Impl thread scroll on ScrollNode instead of LayerImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Resolve comments Created 4 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
« no previous file with comments | « cc/trees/property_tree.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include <set> 7 #include <set>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "cc/base/math_util.h" 11 #include "cc/base/math_util.h"
12 #include "cc/input/main_thread_scrolling_reason.h" 12 #include "cc/input/main_thread_scrolling_reason.h"
13 #include "cc/input/scroll_state.h"
13 #include "cc/layers/layer_impl.h" 14 #include "cc/layers/layer_impl.h"
14 #include "cc/proto/gfx_conversions.h" 15 #include "cc/proto/gfx_conversions.h"
15 #include "cc/proto/property_tree.pb.h" 16 #include "cc/proto/property_tree.pb.h"
16 #include "cc/proto/scroll_offset.pb.h" 17 #include "cc/proto/scroll_offset.pb.h"
17 #include "cc/proto/synced_property_conversions.h" 18 #include "cc/proto/synced_property_conversions.h"
18 #include "cc/proto/transform.pb.h" 19 #include "cc/proto/transform.pb.h"
19 #include "cc/proto/vector2df.pb.h" 20 #include "cc/proto/vector2df.pb.h"
20 #include "cc/trees/layer_tree_host_common.h" 21 #include "cc/trees/layer_tree_host_common.h"
21 #include "cc/trees/layer_tree_impl.h" 22 #include "cc/trees/layer_tree_impl.h"
22 #include "cc/trees/property_tree.h" 23 #include "cc/trees/property_tree.h"
(...skipping 1627 matching lines...) Expand 10 before | Expand all | Expand 10 after
1650 int layer_id) const { 1651 int layer_id) const {
1651 DCHECK(!property_trees()->is_main_thread); 1652 DCHECK(!property_trees()->is_main_thread);
1652 if (synced_scroll_offset(layer_id)) 1653 if (synced_scroll_offset(layer_id))
1653 return property_trees()->is_active 1654 return property_trees()->is_active
1654 ? synced_scroll_offset(layer_id)->Delta() 1655 ? synced_scroll_offset(layer_id)->Delta()
1655 : synced_scroll_offset(layer_id)->PendingDelta().get(); 1656 : synced_scroll_offset(layer_id)->PendingDelta().get();
1656 else 1657 else
1657 return gfx::ScrollOffset(); 1658 return gfx::ScrollOffset();
1658 } 1659 }
1659 1660
1661 void ScrollTree::DistributeScroll(ScrollNode* scroll_node,
1662 ScrollState* scroll_state) {
1663 DCHECK(scroll_node && scroll_state);
1664 if (scroll_state->FullyConsumed())
1665 return;
1666 scroll_state->DistributeToScrollChainDescendant();
1667
1668 // If the scroll doesn't propagate, and we're currently scrolling
1669 // a node other than this one, prevent the scroll from
1670 // propagating to this node.
1671 if (!scroll_state->should_propagate() &&
1672 scroll_state->delta_consumed_for_scroll_sequence() &&
1673 scroll_state->current_native_scrolling_node()->id != scroll_node->id) {
1674 return;
1675 }
1676
1677 scroll_state->layer_tree_impl()->ApplyScroll(scroll_node, scroll_state);
1678 }
1679
1680 gfx::Vector2dF ScrollTree::ScrollBy(ScrollNode* scroll_node,
1681 const gfx::Vector2dF& scroll,
1682 LayerTreeImpl* layer_tree_impl) {
1683 gfx::ScrollOffset adjusted_scroll(scroll);
1684 if (!scroll_node->data.user_scrollable_horizontal)
1685 adjusted_scroll.set_x(0);
1686 if (!scroll_node->data.user_scrollable_vertical)
1687 adjusted_scroll.set_y(0);
1688 DCHECK(scroll_node->data.scrollable);
1689 gfx::ScrollOffset old_offset = current_scroll_offset(scroll_node->owner_id);
1690 gfx::ScrollOffset new_offset =
1691 ClampScrollOffsetToLimits(old_offset + adjusted_scroll, scroll_node);
1692 if (SetScrollOffset(scroll_node->owner_id, new_offset))
1693 layer_tree_impl->DidUpdateScrollOffset(scroll_node->owner_id,
1694 scroll_node->data.transform_id);
1695
1696 gfx::ScrollOffset unscrolled =
1697 old_offset + gfx::ScrollOffset(scroll) - new_offset;
1698 return gfx::Vector2dF(unscrolled.x(), unscrolled.y());
1699 }
1700
1701 gfx::ScrollOffset ScrollTree::ClampScrollOffsetToLimits(
1702 gfx::ScrollOffset offset,
1703 ScrollNode* scroll_node) const {
1704 offset.SetToMin(MaxScrollOffset(scroll_node->id));
1705 offset.SetToMax(gfx::ScrollOffset());
1706 return offset;
1707 }
1708
1660 PropertyTrees::PropertyTrees() 1709 PropertyTrees::PropertyTrees()
1661 : needs_rebuild(true), 1710 : needs_rebuild(true),
1662 non_root_surfaces_enabled(true), 1711 non_root_surfaces_enabled(true),
1663 changed(false), 1712 changed(false),
1664 full_tree_damaged(false), 1713 full_tree_damaged(false),
1665 sequence_number(0), 1714 sequence_number(0),
1666 is_main_thread(true), 1715 is_main_thread(true),
1667 is_active(false) { 1716 is_active(false) {
1668 transform_tree.SetPropertyTrees(this); 1717 transform_tree.SetPropertyTrees(this);
1669 effect_tree.SetPropertyTrees(this); 1718 effect_tree.SetPropertyTrees(this);
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
1801 break; 1850 break;
1802 case ALL_TREES: 1851 case ALL_TREES:
1803 transform_tree.ResetChangeTracking(); 1852 transform_tree.ResetChangeTracking();
1804 effect_tree.ResetChangeTracking(); 1853 effect_tree.ResetChangeTracking();
1805 } 1854 }
1806 changed = false; 1855 changed = false;
1807 full_tree_damaged = false; 1856 full_tree_damaged = false;
1808 } 1857 }
1809 1858
1810 } // namespace cc 1859 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/property_tree.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698