Commit d8a99a80 authored by wkorman's avatar wkorman Committed by Commit bot

Add map from element id to scroll node index.

Essentially a scroll node specific version of
http://crrev.com/2612093002 which was only omitted there
in the interest of incrementality.

BUG=674258
CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel

Review-Url: https://codereview.chromium.org/2623313003
Cr-Commit-Position: refs/heads/master@{#443348}
parent aec7d45b
...@@ -3948,16 +3948,14 @@ void LayerTreeHostImpl::SetTreeLayerScrollOffsetMutated( ...@@ -3948,16 +3948,14 @@ void LayerTreeHostImpl::SetTreeLayerScrollOffsetMutated(
1u, property_trees->element_id_to_transform_node_index.count(element_id)); 1u, property_trees->element_id_to_transform_node_index.count(element_id));
int transform_node_index = int transform_node_index =
property_trees->element_id_to_transform_node_index[element_id]; property_trees->element_id_to_transform_node_index[element_id];
// TODO(wkorman): Build map from element id to scroll node in property tree DCHECK_EQ(1u,
// builder and make use of it below. property_trees->element_id_to_scroll_node_index.count(element_id));
const int scroll_node_index = const int scroll_node_index =
property_trees->layer_id_to_scroll_node_index[layer_id]; property_trees->element_id_to_scroll_node_index[element_id];
if (scroll_node_index != ScrollTree::kInvalidNodeId) { property_trees->scroll_tree.OnScrollOffsetAnimated(
property_trees->scroll_tree.OnScrollOffsetAnimated( layer_id, transform_node_index, scroll_node_index, scroll_offset, tree);
layer_id, transform_node_index, scroll_node_index, scroll_offset, tree); // Run mutation callbacks to respond to updated scroll offset.
// Run mutation callbacks to respond to updated scroll offset. Mutate(CurrentBeginFrameArgs().frame_time);
Mutate(CurrentBeginFrameArgs().frame_time);
}
} }
bool LayerTreeHostImpl::AnimationsPreserveAxisAlignment( bool LayerTreeHostImpl::AnimationsPreserveAxisAlignment(
......
...@@ -57,6 +57,7 @@ ...@@ -57,6 +57,7 @@
#include "cc/trees/layer_tree_host_common.h" #include "cc/trees/layer_tree_host_common.h"
#include "cc/trees/layer_tree_host_impl.h" #include "cc/trees/layer_tree_host_impl.h"
#include "cc/trees/layer_tree_impl.h" #include "cc/trees/layer_tree_impl.h"
#include "cc/trees/scroll_node.h"
#include "cc/trees/single_thread_proxy.h" #include "cc/trees/single_thread_proxy.h"
#include "cc/trees/swap_promise_manager.h" #include "cc/trees/swap_promise_manager.h"
#include "cc/trees/transform_node.h" #include "cc/trees/transform_node.h"
...@@ -943,9 +944,13 @@ class LayerTreeHostTestPushElementIdToNodeIdMap : public LayerTreeHostTest { ...@@ -943,9 +944,13 @@ class LayerTreeHostTestPushElementIdToNodeIdMap : public LayerTreeHostTest {
switch (layer_tree_host()->SourceFrameNumber()) { switch (layer_tree_host()->SourceFrameNumber()) {
case 1: case 1:
child_->SetForceRenderSurfaceForTesting(true); child_->SetForceRenderSurfaceForTesting(true);
child_->AddMainThreadScrollingReasons(
MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects);
break; break;
case 2: case 2:
child_->SetForceRenderSurfaceForTesting(false); child_->SetForceRenderSurfaceForTesting(false);
child_->ClearMainThreadScrollingReasons(
MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects);
break; break;
} }
} }
...@@ -961,12 +966,18 @@ class LayerTreeHostTestPushElementIdToNodeIdMap : public LayerTreeHostTest { ...@@ -961,12 +966,18 @@ class LayerTreeHostTestPushElementIdToNodeIdMap : public LayerTreeHostTest {
EXPECT_EQ(2U, child_impl_->layer_tree_impl() EXPECT_EQ(2U, child_impl_->layer_tree_impl()
->property_trees() ->property_trees()
->effect_tree.size()); ->effect_tree.size());
EXPECT_EQ(2U, child_impl_->layer_tree_impl()
->property_trees()
->scroll_tree.size());
EXPECT_TRUE(property_trees->element_id_to_transform_node_index.find( EXPECT_TRUE(property_trees->element_id_to_transform_node_index.find(
kTestElementId) == kTestElementId) ==
property_trees->element_id_to_transform_node_index.end()); property_trees->element_id_to_transform_node_index.end());
EXPECT_TRUE(property_trees->element_id_to_effect_node_index.find( EXPECT_TRUE(property_trees->element_id_to_effect_node_index.find(
kTestElementId) == kTestElementId) ==
property_trees->element_id_to_effect_node_index.end()); property_trees->element_id_to_effect_node_index.end());
EXPECT_TRUE(property_trees->element_id_to_scroll_node_index.find(
kTestElementId) ==
property_trees->element_id_to_scroll_node_index.end());
break; break;
case 1: case 1:
EXPECT_EQ(3U, child_impl_->layer_tree_impl() EXPECT_EQ(3U, child_impl_->layer_tree_impl()
...@@ -975,11 +986,16 @@ class LayerTreeHostTestPushElementIdToNodeIdMap : public LayerTreeHostTest { ...@@ -975,11 +986,16 @@ class LayerTreeHostTestPushElementIdToNodeIdMap : public LayerTreeHostTest {
EXPECT_EQ(3U, child_impl_->layer_tree_impl() EXPECT_EQ(3U, child_impl_->layer_tree_impl()
->property_trees() ->property_trees()
->effect_tree.size()); ->effect_tree.size());
EXPECT_EQ(3U, child_impl_->layer_tree_impl()
->property_trees()
->scroll_tree.size());
EXPECT_EQ( EXPECT_EQ(
2, 2,
property_trees->element_id_to_transform_node_index[kTestElementId]); property_trees->element_id_to_transform_node_index[kTestElementId]);
EXPECT_EQ( EXPECT_EQ(
2, property_trees->element_id_to_effect_node_index[kTestElementId]); 2, property_trees->element_id_to_effect_node_index[kTestElementId]);
EXPECT_EQ(
2, property_trees->element_id_to_scroll_node_index[kTestElementId]);
break; break;
case 2: case 2:
EXPECT_EQ(2U, child_impl_->layer_tree_impl() EXPECT_EQ(2U, child_impl_->layer_tree_impl()
...@@ -994,6 +1010,9 @@ class LayerTreeHostTestPushElementIdToNodeIdMap : public LayerTreeHostTest { ...@@ -994,6 +1010,9 @@ class LayerTreeHostTestPushElementIdToNodeIdMap : public LayerTreeHostTest {
EXPECT_TRUE(property_trees->element_id_to_effect_node_index.find( EXPECT_TRUE(property_trees->element_id_to_effect_node_index.find(
kTestElementId) == kTestElementId) ==
property_trees->element_id_to_effect_node_index.end()); property_trees->element_id_to_effect_node_index.end());
EXPECT_TRUE(property_trees->element_id_to_scroll_node_index.find(
kTestElementId) ==
property_trees->element_id_to_scroll_node_index.end());
break; break;
} }
EndTest(); EndTest();
......
...@@ -1566,6 +1566,8 @@ bool PropertyTrees::operator==(const PropertyTrees& other) const { ...@@ -1566,6 +1566,8 @@ bool PropertyTrees::operator==(const PropertyTrees& other) const {
layer_id_to_scroll_node_index == other.layer_id_to_scroll_node_index && layer_id_to_scroll_node_index == other.layer_id_to_scroll_node_index &&
element_id_to_effect_node_index == element_id_to_effect_node_index ==
other.element_id_to_effect_node_index && other.element_id_to_effect_node_index &&
element_id_to_scroll_node_index ==
other.element_id_to_scroll_node_index &&
element_id_to_transform_node_index == element_id_to_transform_node_index ==
other.element_id_to_transform_node_index && other.element_id_to_transform_node_index &&
always_use_active_tree_opacity_effect_ids == always_use_active_tree_opacity_effect_ids ==
...@@ -1590,6 +1592,7 @@ PropertyTrees& PropertyTrees::operator=(const PropertyTrees& from) { ...@@ -1590,6 +1592,7 @@ PropertyTrees& PropertyTrees::operator=(const PropertyTrees& from) {
layer_id_to_clip_node_index = from.layer_id_to_clip_node_index; layer_id_to_clip_node_index = from.layer_id_to_clip_node_index;
layer_id_to_scroll_node_index = from.layer_id_to_scroll_node_index; layer_id_to_scroll_node_index = from.layer_id_to_scroll_node_index;
element_id_to_effect_node_index = from.element_id_to_effect_node_index; element_id_to_effect_node_index = from.element_id_to_effect_node_index;
element_id_to_scroll_node_index = from.element_id_to_scroll_node_index;
element_id_to_transform_node_index = from.element_id_to_transform_node_index; element_id_to_transform_node_index = from.element_id_to_transform_node_index;
needs_rebuild = from.needs_rebuild; needs_rebuild = from.needs_rebuild;
changed = from.changed; changed = from.changed;
...@@ -1622,6 +1625,7 @@ void PropertyTrees::clear() { ...@@ -1622,6 +1625,7 @@ void PropertyTrees::clear() {
layer_id_to_clip_node_index.clear(); layer_id_to_clip_node_index.clear();
layer_id_to_scroll_node_index.clear(); layer_id_to_scroll_node_index.clear();
element_id_to_effect_node_index.clear(); element_id_to_effect_node_index.clear();
element_id_to_scroll_node_index.clear();
element_id_to_transform_node_index.clear(); element_id_to_transform_node_index.clear();
always_use_active_tree_opacity_effect_ids.clear(); always_use_active_tree_opacity_effect_ids.clear();
......
...@@ -571,6 +571,8 @@ class CC_EXPORT PropertyTrees final { ...@@ -571,6 +571,8 @@ class CC_EXPORT PropertyTrees final {
// to produce cc property trees and these maps. // to produce cc property trees and these maps.
std::unordered_map<ElementId, int, ElementIdHash> std::unordered_map<ElementId, int, ElementIdHash>
element_id_to_effect_node_index; element_id_to_effect_node_index;
std::unordered_map<ElementId, int, ElementIdHash>
element_id_to_scroll_node_index;
std::unordered_map<ElementId, int, ElementIdHash> std::unordered_map<ElementId, int, ElementIdHash>
element_id_to_transform_node_index; element_id_to_transform_node_index;
......
...@@ -1158,8 +1158,10 @@ void AddScrollNodeIfNeeded( ...@@ -1158,8 +1158,10 @@ void AddScrollNodeIfNeeded(
data_from_ancestor data_from_ancestor
.scroll_tree_parent_created_by_uninheritable_criteria)); .scroll_tree_parent_created_by_uninheritable_criteria));
int node_id;
if (!requires_node) { if (!requires_node) {
data_for_children->scroll_tree_parent = parent_id; node_id = parent_id;
data_for_children->scroll_tree_parent = node_id;
} else { } else {
ScrollNode node; ScrollNode node;
node.owning_layer_id = layer->id(); node.owning_layer_id = layer->id();
...@@ -1194,15 +1196,21 @@ void AddScrollNodeIfNeeded( ...@@ -1194,15 +1196,21 @@ void AddScrollNodeIfNeeded(
node.transform_id = node.transform_id =
data_for_children->transform_tree_parent->transform_tree_index(); data_for_children->transform_tree_parent->transform_tree_index();
data_for_children->scroll_tree_parent = node_id =
data_for_children->property_trees->scroll_tree.Insert(node, parent_id); data_for_children->property_trees->scroll_tree.Insert(node, parent_id);
data_for_children->scroll_tree_parent = node_id;
data_for_children->main_thread_scrolling_reasons = data_for_children->main_thread_scrolling_reasons =
node.main_thread_scrolling_reasons; node.main_thread_scrolling_reasons;
data_for_children->scroll_tree_parent_created_by_uninheritable_criteria = data_for_children->scroll_tree_parent_created_by_uninheritable_criteria =
scroll_node_uninheritable_criteria; scroll_node_uninheritable_criteria;
data_for_children->property_trees data_for_children->property_trees
->layer_id_to_scroll_node_index[layer->id()] = ->layer_id_to_scroll_node_index[layer->id()] = node_id;
data_for_children->scroll_tree_parent; // For animation subsystem purposes, if this layer has a compositor element
// id, we build a map from that id to this scroll node.
if (layer->element_id()) {
data_for_children->property_trees
->element_id_to_scroll_node_index[layer->element_id()] = node_id;
}
if (node.scrollable) { if (node.scrollable) {
data_for_children->property_trees->scroll_tree.SetBaseScrollOffset( data_for_children->property_trees->scroll_tree.SetBaseScrollOffset(
...@@ -1210,7 +1218,7 @@ void AddScrollNodeIfNeeded( ...@@ -1210,7 +1218,7 @@ void AddScrollNodeIfNeeded(
} }
} }
layer->SetScrollTreeIndex(data_for_children->scroll_tree_parent); layer->SetScrollTreeIndex(node_id);
} }
template <typename LayerType> template <typename LayerType>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment