| Index: cc/trees/property_tree.cc
|
| diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc
|
| index 1612ff5214c48ee20f4db2e920034ba2d6a4e317..62de5d75493dac8b93349a11498d4fdb6eb10743 100644
|
| --- a/cc/trees/property_tree.cc
|
| +++ b/cc/trees/property_tree.cc
|
| @@ -10,60 +10,22 @@
|
| #include "base/logging.h"
|
| #include "base/memory/ptr_util.h"
|
| #include "base/trace_event/trace_event_argument.h"
|
| -#include "cc/base/math_util.h"
|
| -#include "cc/input/main_thread_scrolling_reason.h"
|
| -#include "cc/input/scroll_state.h"
|
| #include "cc/layers/layer_impl.h"
|
| #include "cc/output/copy_output_request.h"
|
| -#include "cc/proto/gfx_conversions.h"
|
| #include "cc/proto/property_tree.pb.h"
|
| -#include "cc/proto/scroll_offset.pb.h"
|
| #include "cc/proto/synced_property_conversions.h"
|
| -#include "cc/proto/transform.pb.h"
|
| -#include "cc/proto/vector2df.pb.h"
|
| +#include "cc/trees/clip_node.h"
|
| +#include "cc/trees/effect_node.h"
|
| #include "cc/trees/layer_tree_host_common.h"
|
| #include "cc/trees/layer_tree_impl.h"
|
| #include "cc/trees/property_tree.h"
|
| +#include "cc/trees/scroll_node.h"
|
| +#include "cc/trees/transform_node.h"
|
| #include "ui/gfx/geometry/vector2d_conversions.h"
|
|
|
| namespace cc {
|
|
|
| template <typename T>
|
| -bool TreeNode<T>::operator==(const TreeNode<T>& other) const {
|
| - return id == other.id && parent_id == other.parent_id &&
|
| - owner_id == other.owner_id && data == other.data;
|
| -}
|
| -
|
| -template <typename T>
|
| -void TreeNode<T>::ToProtobuf(proto::TreeNode* proto) const {
|
| - proto->set_id(id);
|
| - proto->set_parent_id(parent_id);
|
| - proto->set_owner_id(owner_id);
|
| - data.ToProtobuf(proto);
|
| -}
|
| -
|
| -template <typename T>
|
| -void TreeNode<T>::FromProtobuf(const proto::TreeNode& proto) {
|
| - id = proto.id();
|
| - parent_id = proto.parent_id();
|
| - owner_id = proto.owner_id();
|
| - data.FromProtobuf(proto);
|
| -}
|
| -
|
| -template <typename T>
|
| -void TreeNode<T>::AsValueInto(base::trace_event::TracedValue* value) const {
|
| - value->SetInteger("id", id);
|
| - value->SetInteger("parent_id", parent_id);
|
| - value->SetInteger("owner_id", owner_id);
|
| - data.AsValueInto(value);
|
| -}
|
| -
|
| -template struct TreeNode<TransformNodeData>;
|
| -template struct TreeNode<ClipNodeData>;
|
| -template struct TreeNode<EffectNodeData>;
|
| -template struct TreeNode<ScrollNodeData>;
|
| -
|
| -template <typename T>
|
| PropertyTree<T>::PropertyTree()
|
| : needs_update_(false) {
|
| nodes_.push_back(T());
|
| @@ -71,9 +33,15 @@ PropertyTree<T>::PropertyTree()
|
| back()->parent_id = -1;
|
| }
|
|
|
| +// Equivalent to
|
| +// PropertyTree<T>::~PropertyTree() = default;
|
| +// but due to a gcc bug the generated destructor will have wrong symbol
|
| +// visibility in component build.
|
| template <typename T>
|
| -PropertyTree<T>::~PropertyTree() {
|
| -}
|
| +PropertyTree<T>::~PropertyTree() {}
|
| +
|
| +template <typename T>
|
| +PropertyTree<T>& PropertyTree<T>::operator=(const PropertyTree<T>&) = default;
|
|
|
| TransformTree::TransformTree()
|
| : source_to_parent_updates_allowed_(true),
|
| @@ -83,8 +51,8 @@ TransformTree::TransformTree()
|
| cached_data_.push_back(TransformCachedNodeData());
|
| }
|
|
|
| -TransformTree::~TransformTree() {
|
| -}
|
| +TransformTree::~TransformTree() = default;
|
| +TransformTree& TransformTree::operator=(const TransformTree&) = default;
|
|
|
| template <typename T>
|
| int PropertyTree<T>::Insert(const T& tree_node, int parent_id) {
|
| @@ -156,545 +124,6 @@ template class PropertyTree<ClipNode>;
|
| template class PropertyTree<EffectNode>;
|
| template class PropertyTree<ScrollNode>;
|
|
|
| -TransformNodeData::TransformNodeData()
|
| - : source_node_id(-1),
|
| - sorting_context_id(0),
|
| - needs_local_transform_update(true),
|
| - node_and_ancestors_are_animated_or_invertible(true),
|
| - is_invertible(true),
|
| - ancestors_are_invertible(true),
|
| - has_potential_animation(false),
|
| - is_currently_animating(false),
|
| - to_screen_is_potentially_animated(false),
|
| - has_only_translation_animations(true),
|
| - flattens_inherited_transform(false),
|
| - node_and_ancestors_are_flat(true),
|
| - node_and_ancestors_have_only_integer_translation(true),
|
| - scrolls(false),
|
| - needs_sublayer_scale(false),
|
| - affected_by_inner_viewport_bounds_delta_x(false),
|
| - affected_by_inner_viewport_bounds_delta_y(false),
|
| - affected_by_outer_viewport_bounds_delta_x(false),
|
| - affected_by_outer_viewport_bounds_delta_y(false),
|
| - in_subtree_of_page_scale_layer(false),
|
| - transform_changed(false),
|
| - post_local_scale_factor(1.0f) {}
|
| -
|
| -TransformNodeData::TransformNodeData(const TransformNodeData& other) = default;
|
| -
|
| -TransformNodeData::~TransformNodeData() {
|
| -}
|
| -
|
| -bool TransformNodeData::operator==(const TransformNodeData& other) const {
|
| - return pre_local == other.pre_local && local == other.local &&
|
| - post_local == other.post_local && to_parent == other.to_parent &&
|
| - source_node_id == other.source_node_id &&
|
| - sorting_context_id == other.sorting_context_id &&
|
| - needs_local_transform_update == other.needs_local_transform_update &&
|
| - node_and_ancestors_are_animated_or_invertible ==
|
| - other.node_and_ancestors_are_animated_or_invertible &&
|
| - is_invertible == other.is_invertible &&
|
| - ancestors_are_invertible == other.ancestors_are_invertible &&
|
| - has_potential_animation == other.has_potential_animation &&
|
| - is_currently_animating == other.is_currently_animating &&
|
| - to_screen_is_potentially_animated ==
|
| - other.to_screen_is_potentially_animated &&
|
| - has_only_translation_animations ==
|
| - other.has_only_translation_animations &&
|
| - flattens_inherited_transform == other.flattens_inherited_transform &&
|
| - node_and_ancestors_are_flat == other.node_and_ancestors_are_flat &&
|
| - node_and_ancestors_have_only_integer_translation ==
|
| - other.node_and_ancestors_have_only_integer_translation &&
|
| - scrolls == other.scrolls &&
|
| - needs_sublayer_scale == other.needs_sublayer_scale &&
|
| - affected_by_inner_viewport_bounds_delta_x ==
|
| - other.affected_by_inner_viewport_bounds_delta_x &&
|
| - affected_by_inner_viewport_bounds_delta_y ==
|
| - other.affected_by_inner_viewport_bounds_delta_y &&
|
| - affected_by_outer_viewport_bounds_delta_x ==
|
| - other.affected_by_outer_viewport_bounds_delta_x &&
|
| - affected_by_outer_viewport_bounds_delta_y ==
|
| - other.affected_by_outer_viewport_bounds_delta_y &&
|
| - in_subtree_of_page_scale_layer ==
|
| - other.in_subtree_of_page_scale_layer &&
|
| - transform_changed == other.transform_changed &&
|
| - post_local_scale_factor == other.post_local_scale_factor &&
|
| - sublayer_scale == other.sublayer_scale &&
|
| - scroll_offset == other.scroll_offset &&
|
| - scroll_snap == other.scroll_snap &&
|
| - source_offset == other.source_offset &&
|
| - source_to_parent == other.source_to_parent;
|
| -}
|
| -
|
| -void TransformNodeData::update_pre_local_transform(
|
| - const gfx::Point3F& transform_origin) {
|
| - pre_local.MakeIdentity();
|
| - pre_local.Translate3d(-transform_origin.x(), -transform_origin.y(),
|
| - -transform_origin.z());
|
| -}
|
| -
|
| -void TransformNodeData::update_post_local_transform(
|
| - const gfx::PointF& position,
|
| - const gfx::Point3F& transform_origin) {
|
| - post_local.MakeIdentity();
|
| - post_local.Scale(post_local_scale_factor, post_local_scale_factor);
|
| - post_local.Translate3d(
|
| - position.x() + source_offset.x() + transform_origin.x(),
|
| - position.y() + source_offset.y() + transform_origin.y(),
|
| - transform_origin.z());
|
| -}
|
| -
|
| -void TransformNodeData::ToProtobuf(proto::TreeNode* proto) const {
|
| - DCHECK(!proto->has_transform_node_data());
|
| - proto::TranformNodeData* data = proto->mutable_transform_node_data();
|
| -
|
| - TransformToProto(pre_local, data->mutable_pre_local());
|
| - TransformToProto(local, data->mutable_local());
|
| - TransformToProto(post_local, data->mutable_post_local());
|
| -
|
| - TransformToProto(to_parent, data->mutable_to_parent());
|
| -
|
| - data->set_source_node_id(source_node_id);
|
| - data->set_sorting_context_id(sorting_context_id);
|
| -
|
| - data->set_needs_local_transform_update(needs_local_transform_update);
|
| -
|
| - data->set_node_and_ancestors_are_animated_or_invertible(
|
| - node_and_ancestors_are_animated_or_invertible);
|
| -
|
| - data->set_is_invertible(is_invertible);
|
| - data->set_ancestors_are_invertible(ancestors_are_invertible);
|
| -
|
| - data->set_has_potential_animation(has_potential_animation);
|
| - data->set_is_currently_animating(is_currently_animating);
|
| - data->set_to_screen_is_potentially_animated(
|
| - to_screen_is_potentially_animated);
|
| - data->set_has_only_translation_animations(has_only_translation_animations);
|
| -
|
| - data->set_flattens_inherited_transform(flattens_inherited_transform);
|
| - data->set_node_and_ancestors_are_flat(node_and_ancestors_are_flat);
|
| -
|
| - data->set_node_and_ancestors_have_only_integer_translation(
|
| - node_and_ancestors_have_only_integer_translation);
|
| - data->set_scrolls(scrolls);
|
| - data->set_needs_sublayer_scale(needs_sublayer_scale);
|
| -
|
| - data->set_affected_by_inner_viewport_bounds_delta_x(
|
| - affected_by_inner_viewport_bounds_delta_x);
|
| - data->set_affected_by_inner_viewport_bounds_delta_y(
|
| - affected_by_inner_viewport_bounds_delta_y);
|
| - data->set_affected_by_outer_viewport_bounds_delta_x(
|
| - affected_by_outer_viewport_bounds_delta_x);
|
| - data->set_affected_by_outer_viewport_bounds_delta_y(
|
| - affected_by_outer_viewport_bounds_delta_y);
|
| -
|
| - data->set_in_subtree_of_page_scale_layer(in_subtree_of_page_scale_layer);
|
| - data->set_transform_changed(transform_changed);
|
| - data->set_post_local_scale_factor(post_local_scale_factor);
|
| -
|
| - Vector2dFToProto(sublayer_scale, data->mutable_sublayer_scale());
|
| - ScrollOffsetToProto(scroll_offset, data->mutable_scroll_offset());
|
| - Vector2dFToProto(scroll_snap, data->mutable_scroll_snap());
|
| - Vector2dFToProto(source_offset, data->mutable_source_offset());
|
| - Vector2dFToProto(source_to_parent, data->mutable_source_to_parent());
|
| -}
|
| -
|
| -void TransformNodeData::FromProtobuf(const proto::TreeNode& proto) {
|
| - DCHECK(proto.has_transform_node_data());
|
| - const proto::TranformNodeData& data = proto.transform_node_data();
|
| -
|
| - pre_local = ProtoToTransform(data.pre_local());
|
| - local = ProtoToTransform(data.local());
|
| - post_local = ProtoToTransform(data.post_local());
|
| -
|
| - to_parent = ProtoToTransform(data.to_parent());
|
| -
|
| - source_node_id = data.source_node_id();
|
| - sorting_context_id = data.sorting_context_id();
|
| -
|
| - needs_local_transform_update = data.needs_local_transform_update();
|
| -
|
| - node_and_ancestors_are_animated_or_invertible =
|
| - data.node_and_ancestors_are_animated_or_invertible();
|
| -
|
| - is_invertible = data.is_invertible();
|
| - ancestors_are_invertible = data.ancestors_are_invertible();
|
| -
|
| - has_potential_animation = data.has_potential_animation();
|
| - is_currently_animating = data.is_currently_animating();
|
| - to_screen_is_potentially_animated = data.to_screen_is_potentially_animated();
|
| - has_only_translation_animations = data.has_only_translation_animations();
|
| -
|
| - flattens_inherited_transform = data.flattens_inherited_transform();
|
| - node_and_ancestors_are_flat = data.node_and_ancestors_are_flat();
|
| -
|
| - node_and_ancestors_have_only_integer_translation =
|
| - data.node_and_ancestors_have_only_integer_translation();
|
| - scrolls = data.scrolls();
|
| - needs_sublayer_scale = data.needs_sublayer_scale();
|
| -
|
| - affected_by_inner_viewport_bounds_delta_x =
|
| - data.affected_by_inner_viewport_bounds_delta_x();
|
| - affected_by_inner_viewport_bounds_delta_y =
|
| - data.affected_by_inner_viewport_bounds_delta_y();
|
| - affected_by_outer_viewport_bounds_delta_x =
|
| - data.affected_by_outer_viewport_bounds_delta_x();
|
| - affected_by_outer_viewport_bounds_delta_y =
|
| - data.affected_by_outer_viewport_bounds_delta_y();
|
| -
|
| - in_subtree_of_page_scale_layer = data.in_subtree_of_page_scale_layer();
|
| - transform_changed = data.transform_changed();
|
| - post_local_scale_factor = data.post_local_scale_factor();
|
| -
|
| - sublayer_scale = ProtoToVector2dF(data.sublayer_scale());
|
| - scroll_offset = ProtoToScrollOffset(data.scroll_offset());
|
| - scroll_snap = ProtoToVector2dF(data.scroll_snap());
|
| - source_offset = ProtoToVector2dF(data.source_offset());
|
| - source_to_parent = ProtoToVector2dF(data.source_to_parent());
|
| -}
|
| -
|
| -void TransformNodeData::AsValueInto(
|
| - base::trace_event::TracedValue* value) const {
|
| - MathUtil::AddToTracedValue("pre_local", pre_local, value);
|
| - MathUtil::AddToTracedValue("local", local, value);
|
| - MathUtil::AddToTracedValue("post_local", post_local, value);
|
| - // TODO(sunxd): make frameviewer work without target_id
|
| - value->SetInteger("target_id", 0);
|
| - value->SetInteger("content_target_id", 0);
|
| - value->SetInteger("source_node_id", source_node_id);
|
| - value->SetInteger("sorting_context_id", sorting_context_id);
|
| -}
|
| -
|
| -TransformCachedNodeData::TransformCachedNodeData()
|
| - : target_id(-1), content_target_id(-1) {}
|
| -
|
| -TransformCachedNodeData::TransformCachedNodeData(
|
| - const TransformCachedNodeData& other) = default;
|
| -
|
| -TransformCachedNodeData::~TransformCachedNodeData() {}
|
| -
|
| -bool TransformCachedNodeData::operator==(
|
| - const TransformCachedNodeData& other) const {
|
| - return from_target == other.from_target && to_target == other.to_target &&
|
| - from_screen == other.from_screen && to_screen == other.to_screen &&
|
| - target_id == other.target_id &&
|
| - content_target_id == other.content_target_id;
|
| -}
|
| -
|
| -void TransformCachedNodeData::ToProtobuf(
|
| - proto::TransformCachedNodeData* proto) const {
|
| - TransformToProto(from_target, proto->mutable_from_target());
|
| - TransformToProto(to_target, proto->mutable_to_target());
|
| - TransformToProto(from_screen, proto->mutable_from_screen());
|
| - TransformToProto(to_screen, proto->mutable_to_screen());
|
| - proto->set_target_id(target_id);
|
| - proto->set_content_target_id(content_target_id);
|
| -}
|
| -
|
| -void TransformCachedNodeData::FromProtobuf(
|
| - const proto::TransformCachedNodeData& proto) {
|
| - from_target = ProtoToTransform(proto.from_target());
|
| - to_target = ProtoToTransform(proto.to_target());
|
| - from_screen = ProtoToTransform(proto.from_screen());
|
| - to_screen = ProtoToTransform(proto.to_screen());
|
| - target_id = proto.target_id();
|
| - content_target_id = proto.content_target_id();
|
| -}
|
| -
|
| -ClipNodeData::ClipNodeData()
|
| - : transform_id(-1),
|
| - target_id(-1),
|
| - applies_local_clip(true),
|
| - layer_clipping_uses_only_local_clip(false),
|
| - target_is_clipped(false),
|
| - layers_are_clipped(false),
|
| - layers_are_clipped_when_surfaces_disabled(false),
|
| - resets_clip(false) {}
|
| -
|
| -ClipNodeData::ClipNodeData(const ClipNodeData& other) = default;
|
| -
|
| -bool ClipNodeData::operator==(const ClipNodeData& other) const {
|
| - return clip == other.clip &&
|
| - combined_clip_in_target_space == other.combined_clip_in_target_space &&
|
| - clip_in_target_space == other.clip_in_target_space &&
|
| - transform_id == other.transform_id && target_id == other.target_id &&
|
| - applies_local_clip == other.applies_local_clip &&
|
| - layer_clipping_uses_only_local_clip ==
|
| - other.layer_clipping_uses_only_local_clip &&
|
| - target_is_clipped == other.target_is_clipped &&
|
| - layers_are_clipped == other.layers_are_clipped &&
|
| - layers_are_clipped_when_surfaces_disabled ==
|
| - other.layers_are_clipped_when_surfaces_disabled &&
|
| - resets_clip == other.resets_clip;
|
| -}
|
| -
|
| -void ClipNodeData::ToProtobuf(proto::TreeNode* proto) const {
|
| - DCHECK(!proto->has_clip_node_data());
|
| - proto::ClipNodeData* data = proto->mutable_clip_node_data();
|
| -
|
| - RectFToProto(clip, data->mutable_clip());
|
| - RectFToProto(combined_clip_in_target_space,
|
| - data->mutable_combined_clip_in_target_space());
|
| - RectFToProto(clip_in_target_space, data->mutable_clip_in_target_space());
|
| -
|
| - data->set_transform_id(transform_id);
|
| - data->set_target_id(target_id);
|
| - data->set_applies_local_clip(applies_local_clip);
|
| - data->set_layer_clipping_uses_only_local_clip(
|
| - layer_clipping_uses_only_local_clip);
|
| - data->set_target_is_clipped(target_is_clipped);
|
| - data->set_layers_are_clipped(layers_are_clipped);
|
| - data->set_layers_are_clipped_when_surfaces_disabled(
|
| - layers_are_clipped_when_surfaces_disabled);
|
| - data->set_resets_clip(resets_clip);
|
| -}
|
| -
|
| -void ClipNodeData::FromProtobuf(const proto::TreeNode& proto) {
|
| - DCHECK(proto.has_clip_node_data());
|
| - const proto::ClipNodeData& data = proto.clip_node_data();
|
| -
|
| - clip = ProtoToRectF(data.clip());
|
| - combined_clip_in_target_space =
|
| - ProtoToRectF(data.combined_clip_in_target_space());
|
| - clip_in_target_space = ProtoToRectF(data.clip_in_target_space());
|
| -
|
| - transform_id = data.transform_id();
|
| - target_id = data.target_id();
|
| - applies_local_clip = data.applies_local_clip();
|
| - layer_clipping_uses_only_local_clip =
|
| - data.layer_clipping_uses_only_local_clip();
|
| - target_is_clipped = data.target_is_clipped();
|
| - layers_are_clipped = data.layers_are_clipped();
|
| - layers_are_clipped_when_surfaces_disabled =
|
| - data.layers_are_clipped_when_surfaces_disabled();
|
| - resets_clip = data.resets_clip();
|
| -}
|
| -
|
| -void ClipNodeData::AsValueInto(base::trace_event::TracedValue* value) const {
|
| - MathUtil::AddToTracedValue("clip", clip, value);
|
| - value->SetInteger("transform_id", transform_id);
|
| - value->SetInteger("target_id", target_id);
|
| - value->SetBoolean("applies_local_clip", applies_local_clip);
|
| - value->SetBoolean("layer_clipping_uses_only_local_clip",
|
| - layer_clipping_uses_only_local_clip);
|
| - value->SetBoolean("target_is_clipped", target_is_clipped);
|
| - value->SetBoolean("layers_are_clipped", layers_are_clipped);
|
| - value->SetBoolean("layers_are_clipped_when_surfaces_disabled",
|
| - layers_are_clipped_when_surfaces_disabled);
|
| - value->SetBoolean("resets_clip", resets_clip);
|
| -}
|
| -
|
| -EffectNodeData::EffectNodeData()
|
| - : opacity(1.f),
|
| - screen_space_opacity(1.f),
|
| - has_render_surface(false),
|
| - render_surface(nullptr),
|
| - has_copy_request(false),
|
| - hidden_by_backface_visibility(false),
|
| - double_sided(false),
|
| - is_drawn(true),
|
| - subtree_hidden(false),
|
| - has_potential_opacity_animation(false),
|
| - is_currently_animating_opacity(false),
|
| - effect_changed(false),
|
| - num_copy_requests_in_subtree(0),
|
| - has_unclipped_descendants(false),
|
| - transform_id(0),
|
| - clip_id(0),
|
| - target_id(0),
|
| - mask_layer_id(-1),
|
| - replica_layer_id(-1),
|
| - replica_mask_layer_id(-1) {}
|
| -
|
| -EffectNodeData::EffectNodeData(const EffectNodeData& other) = default;
|
| -
|
| -bool EffectNodeData::operator==(const EffectNodeData& other) const {
|
| - return opacity == other.opacity &&
|
| - screen_space_opacity == other.screen_space_opacity &&
|
| - has_render_surface == other.has_render_surface &&
|
| - has_copy_request == other.has_copy_request &&
|
| - background_filters == other.background_filters &&
|
| - sublayer_scale == other.sublayer_scale &&
|
| - hidden_by_backface_visibility == other.hidden_by_backface_visibility &&
|
| - double_sided == other.double_sided && is_drawn == other.is_drawn &&
|
| - subtree_hidden == other.subtree_hidden &&
|
| - has_potential_opacity_animation ==
|
| - other.has_potential_opacity_animation &&
|
| - is_currently_animating_opacity ==
|
| - other.is_currently_animating_opacity &&
|
| - effect_changed == other.effect_changed &&
|
| - num_copy_requests_in_subtree == other.num_copy_requests_in_subtree &&
|
| - transform_id == other.transform_id && clip_id == other.clip_id &&
|
| - target_id == other.target_id && mask_layer_id == other.mask_layer_id &&
|
| - replica_layer_id == other.replica_layer_id &&
|
| - replica_mask_layer_id == other.replica_mask_layer_id;
|
| -}
|
| -
|
| -void EffectNodeData::ToProtobuf(proto::TreeNode* proto) const {
|
| - DCHECK(!proto->has_effect_node_data());
|
| - proto::EffectNodeData* data = proto->mutable_effect_node_data();
|
| - data->set_opacity(opacity);
|
| - data->set_screen_space_opacity(screen_space_opacity);
|
| - data->set_has_render_surface(has_render_surface);
|
| - data->set_has_copy_request(has_copy_request);
|
| - data->set_hidden_by_backface_visibility(hidden_by_backface_visibility);
|
| - data->set_double_sided(double_sided);
|
| - data->set_is_drawn(is_drawn);
|
| - data->set_subtree_hidden(subtree_hidden);
|
| - data->set_has_potential_opacity_animation(has_potential_opacity_animation);
|
| - data->set_is_currently_animating_opacity(is_currently_animating_opacity);
|
| - data->set_effect_changed(effect_changed);
|
| - data->set_num_copy_requests_in_subtree(num_copy_requests_in_subtree);
|
| - data->set_transform_id(transform_id);
|
| - data->set_clip_id(clip_id);
|
| - data->set_target_id(target_id);
|
| - data->set_mask_layer_id(mask_layer_id);
|
| - data->set_replica_layer_id(replica_layer_id);
|
| - data->set_replica_mask_layer_id(replica_mask_layer_id);
|
| - Vector2dFToProto(sublayer_scale, data->mutable_sublayer_scale());
|
| -}
|
| -
|
| -void EffectNodeData::FromProtobuf(const proto::TreeNode& proto) {
|
| - DCHECK(proto.has_effect_node_data());
|
| - const proto::EffectNodeData& data = proto.effect_node_data();
|
| -
|
| - opacity = data.opacity();
|
| - screen_space_opacity = data.screen_space_opacity();
|
| - has_render_surface = data.has_render_surface();
|
| - has_copy_request = data.has_copy_request();
|
| - hidden_by_backface_visibility = data.hidden_by_backface_visibility();
|
| - double_sided = data.double_sided();
|
| - is_drawn = data.is_drawn();
|
| - subtree_hidden = data.subtree_hidden();
|
| - has_potential_opacity_animation = data.has_potential_opacity_animation();
|
| - is_currently_animating_opacity = data.is_currently_animating_opacity();
|
| - effect_changed = data.effect_changed();
|
| - num_copy_requests_in_subtree = data.num_copy_requests_in_subtree();
|
| - transform_id = data.transform_id();
|
| - clip_id = data.clip_id();
|
| - target_id = data.target_id();
|
| - mask_layer_id = data.mask_layer_id();
|
| - replica_layer_id = data.replica_layer_id();
|
| - replica_mask_layer_id = data.replica_mask_layer_id();
|
| - sublayer_scale = ProtoToVector2dF(data.sublayer_scale());
|
| -}
|
| -
|
| -void EffectNodeData::AsValueInto(base::trace_event::TracedValue* value) const {
|
| - value->SetDouble("opacity", opacity);
|
| - value->SetBoolean("has_render_surface", has_render_surface);
|
| - value->SetBoolean("has_copy_request", has_copy_request);
|
| - value->SetBoolean("double_sided", double_sided);
|
| - value->SetBoolean("is_drawn", is_drawn);
|
| - value->SetBoolean("has_potential_opacity_animation",
|
| - has_potential_opacity_animation);
|
| - value->SetBoolean("effect_changed", effect_changed);
|
| - value->SetInteger("num_copy_requests_in_subtree",
|
| - num_copy_requests_in_subtree);
|
| - value->SetInteger("transform_id", transform_id);
|
| - value->SetInteger("clip_id", clip_id);
|
| - value->SetInteger("target_id", target_id);
|
| - value->SetInteger("mask_layer_id", mask_layer_id);
|
| - value->SetInteger("replica_layer_id", replica_layer_id);
|
| - value->SetInteger("replica_mask_layer_id", replica_mask_layer_id);
|
| -}
|
| -
|
| -ScrollNodeData::ScrollNodeData()
|
| - : scrollable(false),
|
| - main_thread_scrolling_reasons(
|
| - MainThreadScrollingReason::kNotScrollingOnMain),
|
| - contains_non_fast_scrollable_region(false),
|
| - max_scroll_offset_affected_by_page_scale(false),
|
| - is_inner_viewport_scroll_layer(false),
|
| - is_outer_viewport_scroll_layer(false),
|
| - should_flatten(false),
|
| - user_scrollable_horizontal(false),
|
| - user_scrollable_vertical(false),
|
| - transform_id(0),
|
| - num_drawn_descendants(0) {}
|
| -
|
| -ScrollNodeData::ScrollNodeData(const ScrollNodeData& other) = default;
|
| -
|
| -bool ScrollNodeData::operator==(const ScrollNodeData& other) const {
|
| - return scrollable == other.scrollable &&
|
| - main_thread_scrolling_reasons == other.main_thread_scrolling_reasons &&
|
| - contains_non_fast_scrollable_region ==
|
| - other.contains_non_fast_scrollable_region &&
|
| - scroll_clip_layer_bounds == other.scroll_clip_layer_bounds &&
|
| - bounds == other.bounds &&
|
| - max_scroll_offset_affected_by_page_scale ==
|
| - other.max_scroll_offset_affected_by_page_scale &&
|
| - is_inner_viewport_scroll_layer ==
|
| - other.is_inner_viewport_scroll_layer &&
|
| - is_outer_viewport_scroll_layer ==
|
| - other.is_outer_viewport_scroll_layer &&
|
| - offset_to_transform_parent == other.offset_to_transform_parent &&
|
| - should_flatten == other.should_flatten &&
|
| - user_scrollable_horizontal == other.user_scrollable_horizontal &&
|
| - user_scrollable_vertical == other.user_scrollable_vertical &&
|
| - element_id == other.element_id && transform_id == other.transform_id;
|
| -}
|
| -
|
| -void ScrollNodeData::ToProtobuf(proto::TreeNode* proto) const {
|
| - DCHECK(!proto->has_scroll_node_data());
|
| - proto::ScrollNodeData* data = proto->mutable_scroll_node_data();
|
| - data->set_scrollable(scrollable);
|
| - data->set_main_thread_scrolling_reasons(main_thread_scrolling_reasons);
|
| - data->set_contains_non_fast_scrollable_region(
|
| - contains_non_fast_scrollable_region);
|
| - SizeToProto(scroll_clip_layer_bounds,
|
| - data->mutable_scroll_clip_layer_bounds());
|
| - SizeToProto(bounds, data->mutable_bounds());
|
| - data->set_max_scroll_offset_affected_by_page_scale(
|
| - max_scroll_offset_affected_by_page_scale);
|
| - data->set_is_inner_viewport_scroll_layer(is_inner_viewport_scroll_layer);
|
| - data->set_is_outer_viewport_scroll_layer(is_outer_viewport_scroll_layer);
|
| - Vector2dFToProto(offset_to_transform_parent,
|
| - data->mutable_offset_to_transform_parent());
|
| - data->set_should_flatten(should_flatten);
|
| - data->set_user_scrollable_horizontal(user_scrollable_horizontal);
|
| - data->set_user_scrollable_vertical(user_scrollable_vertical);
|
| - element_id.ToProtobuf(data->mutable_element_id());
|
| - data->set_transform_id(transform_id);
|
| -}
|
| -
|
| -void ScrollNodeData::FromProtobuf(const proto::TreeNode& proto) {
|
| - DCHECK(proto.has_scroll_node_data());
|
| - const proto::ScrollNodeData& data = proto.scroll_node_data();
|
| -
|
| - scrollable = data.scrollable();
|
| - main_thread_scrolling_reasons = data.main_thread_scrolling_reasons();
|
| - contains_non_fast_scrollable_region =
|
| - data.contains_non_fast_scrollable_region();
|
| - scroll_clip_layer_bounds = ProtoToSize(data.scroll_clip_layer_bounds());
|
| - bounds = ProtoToSize(data.bounds());
|
| - max_scroll_offset_affected_by_page_scale =
|
| - data.max_scroll_offset_affected_by_page_scale();
|
| - is_inner_viewport_scroll_layer = data.is_inner_viewport_scroll_layer();
|
| - is_outer_viewport_scroll_layer = data.is_outer_viewport_scroll_layer();
|
| - offset_to_transform_parent =
|
| - ProtoToVector2dF(data.offset_to_transform_parent());
|
| - should_flatten = data.should_flatten();
|
| - user_scrollable_horizontal = data.user_scrollable_horizontal();
|
| - user_scrollable_vertical = data.user_scrollable_vertical();
|
| - element_id.FromProtobuf(data.element_id());
|
| - transform_id = data.transform_id();
|
| -}
|
| -
|
| -void ScrollNodeData::AsValueInto(base::trace_event::TracedValue* value) const {
|
| - value->SetBoolean("scrollable", scrollable);
|
| - MathUtil::AddToTracedValue("scroll_clip_layer_bounds",
|
| - scroll_clip_layer_bounds, value);
|
| - MathUtil::AddToTracedValue("bounds", bounds, value);
|
| - MathUtil::AddToTracedValue("offset_to_transform_parent",
|
| - offset_to_transform_parent, value);
|
| - value->SetBoolean("should_flatten", should_flatten);
|
| - value->SetBoolean("user_scrollable_horizontal", user_scrollable_horizontal);
|
| - value->SetBoolean("user_scrollable_vertical", user_scrollable_vertical);
|
| -
|
| - element_id.AddToTracedValue(value);
|
| - value->SetInteger("transform_id", transform_id);
|
| -}
|
| -
|
| int TransformTree::Insert(const TransformNode& tree_node, int parent_id) {
|
| int node_id = PropertyTree<TransformNode>::Insert(tree_node, parent_id);
|
| DCHECK_EQ(node_id, static_cast<int>(cached_data_.size()));
|
| @@ -734,11 +163,11 @@ bool TransformTree::ComputeTransformWithDestinationSublayerScale(
|
| bool success = ComputeTransform(source_id, dest_id, transform);
|
|
|
| const TransformNode* dest_node = Node(dest_id);
|
| - if (!dest_node->data.needs_sublayer_scale)
|
| + if (!dest_node->needs_sublayer_scale)
|
| return success;
|
|
|
| - transform->matrix().postScale(dest_node->data.sublayer_scale.x(),
|
| - dest_node->data.sublayer_scale.y(), 1.f);
|
| + transform->matrix().postScale(dest_node->sublayer_scale.x(),
|
| + dest_node->sublayer_scale.y(), 1.f);
|
| return success;
|
| }
|
|
|
| @@ -749,15 +178,15 @@ bool TransformTree::ComputeTransformWithSourceSublayerScale(
|
| bool success = ComputeTransform(source_id, dest_id, transform);
|
|
|
| const TransformNode* source_node = Node(source_id);
|
| - if (!source_node->data.needs_sublayer_scale)
|
| + if (!source_node->needs_sublayer_scale)
|
| return success;
|
|
|
| - if (source_node->data.sublayer_scale.x() == 0 ||
|
| - source_node->data.sublayer_scale.y() == 0)
|
| + if (source_node->sublayer_scale.x() == 0 ||
|
| + source_node->sublayer_scale.y() == 0)
|
| return false;
|
|
|
| - transform->Scale(1.f / source_node->data.sublayer_scale.x(),
|
| - 1.f / source_node->data.sublayer_scale.y());
|
| + transform->Scale(1.f / source_node->sublayer_scale.x(),
|
| + 1.f / source_node->sublayer_scale.y());
|
| return success;
|
| }
|
|
|
| @@ -769,13 +198,13 @@ bool TransformTree::Are2DAxisAligned(int source_id, int dest_id) const {
|
|
|
| bool TransformTree::NeedsSourceToParentUpdate(TransformNode* node) {
|
| return (source_to_parent_updates_allowed() &&
|
| - node->parent_id != node->data.source_node_id);
|
| + node->parent_id != node->source_node_id);
|
| }
|
|
|
| void TransformTree::ResetChangeTracking() {
|
| for (int id = 1; id < static_cast<int>(size()); ++id) {
|
| TransformNode* node = Node(id);
|
| - node->data.transform_changed = false;
|
| + node->transform_changed = false;
|
| }
|
| }
|
|
|
| @@ -783,10 +212,9 @@ void TransformTree::UpdateTransforms(int id) {
|
| TransformNode* node = Node(id);
|
| TransformNode* parent_node = parent(node);
|
| TransformNode* target_node = Node(TargetId(id));
|
| - TransformNode* source_node = Node(node->data.source_node_id);
|
| + TransformNode* source_node = Node(node->source_node_id);
|
| property_trees()->UpdateCachedNumber();
|
| - if (node->data.needs_local_transform_update ||
|
| - NeedsSourceToParentUpdate(node))
|
| + if (node->needs_local_transform_update || NeedsSourceToParentUpdate(node))
|
| UpdateLocalTransform(node);
|
| else
|
| UndoSnapping(node);
|
| @@ -825,8 +253,8 @@ bool TransformTree::CombineTransformsBetween(int source_id,
|
| // R^{-1} * A^{-1}. If at least one of A and R isn't flat, the inverse of
|
| // flattened(A * R) won't be R^{-1} * A{-1}, so multiplying C's to_screen and
|
| // A's from_screen will not produce the correct result.
|
| - if (!dest || (dest->data.ancestors_are_invertible &&
|
| - dest->data.node_and_ancestors_are_flat)) {
|
| + if (!dest ||
|
| + (dest->ancestors_are_invertible && dest->node_and_ancestors_are_flat)) {
|
| transform->ConcatTransform(ToScreen(current->id));
|
| if (dest)
|
| transform->ConcatTransform(FromScreen(dest->id));
|
| @@ -846,10 +274,9 @@ bool TransformTree::CombineTransformsBetween(int source_id,
|
| source_to_destination.push_back(current->id);
|
| current = parent(current);
|
| bool destination_has_non_zero_sublayer_scale =
|
| - dest->data.sublayer_scale.x() != 0.f &&
|
| - dest->data.sublayer_scale.y() != 0.f;
|
| + dest->sublayer_scale.x() != 0.f && dest->sublayer_scale.y() != 0.f;
|
| DCHECK(destination_has_non_zero_sublayer_scale ||
|
| - !dest->data.ancestors_are_invertible);
|
| + !dest->ancestors_are_invertible);
|
| for (; current && current->id > dest_id; current = parent(current)) {
|
| if (destination_has_non_zero_sublayer_scale &&
|
| TargetId(current->id) == dest_id &&
|
| @@ -863,9 +290,8 @@ bool TransformTree::CombineTransformsBetween(int source_id,
|
| combined_transform = ToTarget(current->id);
|
| // The stored target space transform has sublayer scale baked in, but we
|
| // need the unscaled transform.
|
| - combined_transform.matrix().postScale(1.0f / dest->data.sublayer_scale.x(),
|
| - 1.0f / dest->data.sublayer_scale.y(),
|
| - 1.0f);
|
| + combined_transform.matrix().postScale(
|
| + 1.0f / dest->sublayer_scale.x(), 1.0f / dest->sublayer_scale.y(), 1.0f);
|
| } else if (current->id < dest_id) {
|
| // We have reached the lowest common ancestor of the source and destination
|
| // nodes. This case can occur when we are transforming between a node
|
| @@ -894,9 +320,9 @@ bool TransformTree::CombineTransformsBetween(int source_id,
|
| for (size_t i = 0; i < source_to_destination_size; ++i) {
|
| size_t index = source_to_destination_size - 1 - i;
|
| const TransformNode* node = Node(source_to_destination[index]);
|
| - if (node->data.flattens_inherited_transform)
|
| + if (node->flattens_inherited_transform)
|
| combined_transform.FlattenTo2d();
|
| - combined_transform.PreconcatTransform(node->data.to_parent);
|
| + combined_transform.PreconcatTransform(node->to_parent);
|
| }
|
|
|
| transform->ConcatTransform(combined_transform);
|
| @@ -912,8 +338,8 @@ bool TransformTree::CombineInversesBetween(int source_id,
|
| // Just as in CombineTransformsBetween, we can use screen space transforms in
|
| // this computation only when there isn't any non-trivial flattening
|
| // involved.
|
| - if (current->data.ancestors_are_invertible &&
|
| - current->data.node_and_ancestors_are_flat) {
|
| + if (current->ancestors_are_invertible &&
|
| + current->node_and_ancestors_are_flat) {
|
| transform->PreconcatTransform(FromScreen(current->id));
|
| if (dest)
|
| transform->PreconcatTransform(ToScreen(dest->id));
|
| @@ -934,11 +360,11 @@ bool TransformTree::CombineInversesBetween(int source_id,
|
| }
|
|
|
| void TransformTree::UpdateLocalTransform(TransformNode* node) {
|
| - gfx::Transform transform = node->data.post_local;
|
| + gfx::Transform transform = node->post_local;
|
| if (NeedsSourceToParentUpdate(node)) {
|
| gfx::Transform to_parent;
|
| - ComputeTransform(node->data.source_node_id, node->parent_id, &to_parent);
|
| - node->data.source_to_parent = to_parent.To2dTranslation();
|
| + ComputeTransform(node->source_node_id, node->parent_id, &to_parent);
|
| + node->source_to_parent = to_parent.To2dTranslation();
|
| }
|
|
|
| gfx::Vector2dF fixed_position_adjustment;
|
| @@ -946,76 +372,73 @@ void TransformTree::UpdateLocalTransform(TransformNode* node) {
|
| property_trees()->inner_viewport_container_bounds_delta();
|
| gfx::Vector2dF outer_viewport_bounds_delta =
|
| property_trees()->outer_viewport_container_bounds_delta();
|
| - if (node->data.affected_by_inner_viewport_bounds_delta_x)
|
| + if (node->affected_by_inner_viewport_bounds_delta_x)
|
| fixed_position_adjustment.set_x(inner_viewport_bounds_delta.x());
|
| - else if (node->data.affected_by_outer_viewport_bounds_delta_x)
|
| + else if (node->affected_by_outer_viewport_bounds_delta_x)
|
| fixed_position_adjustment.set_x(outer_viewport_bounds_delta.x());
|
|
|
| - if (node->data.affected_by_inner_viewport_bounds_delta_y)
|
| + if (node->affected_by_inner_viewport_bounds_delta_y)
|
| fixed_position_adjustment.set_y(inner_viewport_bounds_delta.y());
|
| - else if (node->data.affected_by_outer_viewport_bounds_delta_y)
|
| + else if (node->affected_by_outer_viewport_bounds_delta_y)
|
| fixed_position_adjustment.set_y(outer_viewport_bounds_delta.y());
|
|
|
| - transform.Translate(
|
| - node->data.source_to_parent.x() - node->data.scroll_offset.x() +
|
| - fixed_position_adjustment.x(),
|
| - node->data.source_to_parent.y() - node->data.scroll_offset.y() +
|
| - fixed_position_adjustment.y());
|
| - transform.PreconcatTransform(node->data.local);
|
| - transform.PreconcatTransform(node->data.pre_local);
|
| - node->data.set_to_parent(transform);
|
| - node->data.needs_local_transform_update = false;
|
| + transform.Translate(node->source_to_parent.x() - node->scroll_offset.x() +
|
| + fixed_position_adjustment.x(),
|
| + node->source_to_parent.y() - node->scroll_offset.y() +
|
| + fixed_position_adjustment.y());
|
| + transform.PreconcatTransform(node->local);
|
| + transform.PreconcatTransform(node->pre_local);
|
| + node->set_to_parent(transform);
|
| + node->needs_local_transform_update = false;
|
| }
|
|
|
| void TransformTree::UpdateScreenSpaceTransform(TransformNode* node,
|
| TransformNode* parent_node,
|
| TransformNode* target_node) {
|
| if (!parent_node) {
|
| - SetToScreen(node->id, node->data.to_parent);
|
| - node->data.ancestors_are_invertible = true;
|
| - node->data.to_screen_is_potentially_animated = false;
|
| - node->data.node_and_ancestors_are_flat = node->data.to_parent.IsFlat();
|
| + SetToScreen(node->id, node->to_parent);
|
| + node->ancestors_are_invertible = true;
|
| + node->to_screen_is_potentially_animated = false;
|
| + node->node_and_ancestors_are_flat = node->to_parent.IsFlat();
|
| } else {
|
| gfx::Transform to_screen_space_transform = ToScreen(parent_node->id);
|
| - if (node->data.flattens_inherited_transform)
|
| + if (node->flattens_inherited_transform)
|
| to_screen_space_transform.FlattenTo2d();
|
| - to_screen_space_transform.PreconcatTransform(node->data.to_parent);
|
| - node->data.ancestors_are_invertible =
|
| - parent_node->data.ancestors_are_invertible;
|
| - node->data.node_and_ancestors_are_flat =
|
| - parent_node->data.node_and_ancestors_are_flat &&
|
| - node->data.to_parent.IsFlat();
|
| + to_screen_space_transform.PreconcatTransform(node->to_parent);
|
| + node->ancestors_are_invertible = parent_node->ancestors_are_invertible;
|
| + node->node_and_ancestors_are_flat =
|
| + parent_node->node_and_ancestors_are_flat && node->to_parent.IsFlat();
|
| SetToScreen(node->id, to_screen_space_transform);
|
| }
|
|
|
| gfx::Transform from_screen;
|
| if (!ToScreen(node->id).GetInverse(&from_screen))
|
| - node->data.ancestors_are_invertible = false;
|
| + node->ancestors_are_invertible = false;
|
| SetFromScreen(node->id, from_screen);
|
| }
|
|
|
| void TransformTree::UpdateSublayerScale(TransformNode* node) {
|
| // The sublayer scale depends on the screen space transform, so update it too.
|
| - if (!node->data.needs_sublayer_scale) {
|
| - node->data.sublayer_scale = gfx::Vector2dF(1.0f, 1.0f);
|
| + if (!node->needs_sublayer_scale) {
|
| + node->sublayer_scale = gfx::Vector2dF(1.0f, 1.0f);
|
| return;
|
| }
|
|
|
| float layer_scale_factor =
|
| device_scale_factor_ * device_transform_scale_factor_;
|
| - if (node->data.in_subtree_of_page_scale_layer)
|
| + if (node->in_subtree_of_page_scale_layer)
|
| layer_scale_factor *= page_scale_factor_;
|
| - node->data.sublayer_scale = MathUtil::ComputeTransform2dScaleComponents(
|
| + node->sublayer_scale = MathUtil::ComputeTransform2dScaleComponents(
|
| ToScreen(node->id), layer_scale_factor);
|
| }
|
|
|
| void TransformTree::UpdateTargetSpaceTransform(TransformNode* node,
|
| TransformNode* target_node) {
|
| gfx::Transform target_space_transform;
|
| - if (node->data.needs_sublayer_scale) {
|
| + if (node->needs_sublayer_scale) {
|
| target_space_transform.MakeIdentity();
|
| - target_space_transform.Scale(node->data.sublayer_scale.x(),
|
| - node->data.sublayer_scale.y());
|
| + target_space_transform.Scale(node->sublayer_scale.x(),
|
| + node->sublayer_scale.y());
|
| } else {
|
| // In order to include the root transform for the root surface, we walk up
|
| // to the root of the transform tree in ComputeTransform.
|
| @@ -1026,7 +449,7 @@ void TransformTree::UpdateTargetSpaceTransform(TransformNode* node,
|
|
|
| gfx::Transform from_target;
|
| if (!target_space_transform.GetInverse(&from_target))
|
| - node->data.ancestors_are_invertible = false;
|
| + node->ancestors_are_invertible = false;
|
| SetToTarget(node->id, target_space_transform);
|
| SetFromTarget(node->id, from_target);
|
| }
|
| @@ -1035,23 +458,22 @@ void TransformTree::UpdateAnimationProperties(TransformNode* node,
|
| TransformNode* parent_node) {
|
| bool ancestor_is_animating = false;
|
| if (parent_node)
|
| - ancestor_is_animating = parent_node->data.to_screen_is_potentially_animated;
|
| - node->data.to_screen_is_potentially_animated =
|
| - node->data.has_potential_animation || ancestor_is_animating;
|
| + ancestor_is_animating = parent_node->to_screen_is_potentially_animated;
|
| + node->to_screen_is_potentially_animated =
|
| + node->has_potential_animation || ancestor_is_animating;
|
| }
|
|
|
| void TransformTree::UndoSnapping(TransformNode* node) {
|
| // to_parent transform has the scroll snap from previous frame baked in.
|
| // We need to undo it and use the un-snapped transform to compute current
|
| // target and screen space transforms.
|
| - node->data.to_parent.Translate(-node->data.scroll_snap.x(),
|
| - -node->data.scroll_snap.y());
|
| + node->to_parent.Translate(-node->scroll_snap.x(), -node->scroll_snap.y());
|
| }
|
|
|
| void TransformTree::UpdateSnapping(TransformNode* node) {
|
| - if (!node->data.scrolls || node->data.to_screen_is_potentially_animated ||
|
| + if (!node->scrolls || node->to_screen_is_potentially_animated ||
|
| !ToScreen(node->id).IsScaleOrTranslation() ||
|
| - !node->data.ancestors_are_invertible) {
|
| + !node->ancestors_are_invertible) {
|
| return;
|
| }
|
|
|
| @@ -1074,61 +496,60 @@ void TransformTree::UpdateSnapping(TransformNode* node) {
|
| // Now that we have our scroll delta, we must apply it to each of our
|
| // combined, to/from matrices.
|
| SetToScreen(node->id, rounded);
|
| - node->data.to_parent.Translate(translation.x(), translation.y());
|
| + node->to_parent.Translate(translation.x(), translation.y());
|
| gfx::Transform from_screen = FromScreen(node->id);
|
| from_screen.matrix().postTranslate(-translation.x(), -translation.y(), 0);
|
| SetFromScreen(node->id, from_screen);
|
| - node->data.scroll_snap = translation;
|
| + node->scroll_snap = translation;
|
| }
|
|
|
| void TransformTree::UpdateTransformChanged(TransformNode* node,
|
| TransformNode* parent_node,
|
| TransformNode* source_node) {
|
| - if (parent_node && parent_node->data.transform_changed) {
|
| - node->data.transform_changed = true;
|
| + if (parent_node && parent_node->transform_changed) {
|
| + node->transform_changed = true;
|
| return;
|
| }
|
|
|
| if (source_node && source_node->id != parent_node->id &&
|
| - source_to_parent_updates_allowed_ && source_node->data.transform_changed)
|
| - node->data.transform_changed = true;
|
| + source_to_parent_updates_allowed_ && source_node->transform_changed)
|
| + node->transform_changed = true;
|
| }
|
|
|
| void TransformTree::UpdateNodeAndAncestorsAreAnimatedOrInvertible(
|
| TransformNode* node,
|
| TransformNode* parent_node) {
|
| if (!parent_node) {
|
| - node->data.node_and_ancestors_are_animated_or_invertible =
|
| - node->data.has_potential_animation || node->data.is_invertible;
|
| + node->node_and_ancestors_are_animated_or_invertible =
|
| + node->has_potential_animation || node->is_invertible;
|
| return;
|
| }
|
| - if (!parent_node->data.node_and_ancestors_are_animated_or_invertible) {
|
| - node->data.node_and_ancestors_are_animated_or_invertible = false;
|
| + if (!parent_node->node_and_ancestors_are_animated_or_invertible) {
|
| + node->node_and_ancestors_are_animated_or_invertible = false;
|
| return;
|
| }
|
| - bool is_invertible = node->data.is_invertible;
|
| + bool is_invertible = node->is_invertible;
|
| // Even when the current node's transform and the parent's screen space
|
| // transform are invertible, the current node's screen space transform can
|
| // become uninvertible due to floating-point arithmetic.
|
| - if (!node->data.ancestors_are_invertible &&
|
| - parent_node->data.ancestors_are_invertible)
|
| + if (!node->ancestors_are_invertible && parent_node->ancestors_are_invertible)
|
| is_invertible = false;
|
| - node->data.node_and_ancestors_are_animated_or_invertible =
|
| - node->data.has_potential_animation || is_invertible;
|
| + node->node_and_ancestors_are_animated_or_invertible =
|
| + node->has_potential_animation || is_invertible;
|
| }
|
|
|
| void TransformTree::SetDeviceTransform(const gfx::Transform& transform,
|
| gfx::PointF root_position) {
|
| gfx::Transform root_post_local = transform;
|
| TransformNode* node = Node(1);
|
| - root_post_local.Scale(node->data.post_local_scale_factor,
|
| - node->data.post_local_scale_factor);
|
| + root_post_local.Scale(node->post_local_scale_factor,
|
| + node->post_local_scale_factor);
|
| root_post_local.Translate(root_position.x(), root_position.y());
|
| - if (node->data.post_local == root_post_local)
|
| + if (node->post_local == root_post_local)
|
| return;
|
|
|
| - node->data.post_local = root_post_local;
|
| - node->data.needs_local_transform_update = true;
|
| + node->post_local = root_post_local;
|
| + node->needs_local_transform_update = true;
|
| set_needs_update(true);
|
| }
|
|
|
| @@ -1149,7 +570,7 @@ void TransformTree::UpdateInnerViewportContainerBoundsDelta() {
|
|
|
| set_needs_update(true);
|
| for (int i : nodes_affected_by_inner_viewport_bounds_delta_)
|
| - Node(i)->data.needs_local_transform_update = true;
|
| + Node(i)->needs_local_transform_update = true;
|
| }
|
|
|
| void TransformTree::UpdateOuterViewportContainerBoundsDelta() {
|
| @@ -1158,7 +579,7 @@ void TransformTree::UpdateOuterViewportContainerBoundsDelta() {
|
|
|
| set_needs_update(true);
|
| for (int i : nodes_affected_by_outer_viewport_bounds_delta_)
|
| - Node(i)->data.needs_local_transform_update = true;
|
| + Node(i)->needs_local_transform_update = true;
|
| }
|
|
|
| void TransformTree::AddNodeAffectedByInnerViewportBoundsDelta(int node_id) {
|
| @@ -1247,10 +668,9 @@ gfx::Transform TransformTree::ToScreenSpaceTransformWithoutSublayerScale(
|
| }
|
| const TransformNode* node = Node(id);
|
| gfx::Transform screen_space_transform = ToScreen(id);
|
| - if (node->data.sublayer_scale.x() != 0.0 &&
|
| - node->data.sublayer_scale.y() != 0.0)
|
| - screen_space_transform.Scale(1.0 / node->data.sublayer_scale.x(),
|
| - 1.0 / node->data.sublayer_scale.y());
|
| + if (node->sublayer_scale.x() != 0.0 && node->sublayer_scale.y() != 0.0)
|
| + screen_space_transform.Scale(1.0 / node->sublayer_scale.x(),
|
| + 1.0 / node->sublayer_scale.y());
|
| return screen_space_transform;
|
| }
|
|
|
| @@ -1337,14 +757,14 @@ void EffectTree::clear() {
|
| }
|
|
|
| float EffectTree::EffectiveOpacity(const EffectNode* node) const {
|
| - return node->data.subtree_hidden ? 0.f : node->data.opacity;
|
| + return node->subtree_hidden ? 0.f : node->opacity;
|
| }
|
|
|
| void EffectTree::UpdateOpacities(EffectNode* node, EffectNode* parent_node) {
|
| - node->data.screen_space_opacity = EffectiveOpacity(node);
|
| + node->screen_space_opacity = EffectiveOpacity(node);
|
|
|
| if (parent_node)
|
| - node->data.screen_space_opacity *= parent_node->data.screen_space_opacity;
|
| + node->screen_space_opacity *= parent_node->screen_space_opacity;
|
| }
|
|
|
| void EffectTree::UpdateIsDrawn(EffectNode* node, EffectNode* parent_node) {
|
| @@ -1355,70 +775,68 @@ void EffectTree::UpdateIsDrawn(EffectNode* node, EffectNode* parent_node) {
|
| // 2) Nodes that have a background filter.
|
| // 3) Nodes with animating screen space opacity on main thread or pending tree
|
| // are drawn if their parent is drawn irrespective of their opacity.
|
| - if (node->data.has_copy_request)
|
| - node->data.is_drawn = true;
|
| + if (node->has_copy_request)
|
| + node->is_drawn = true;
|
| else if (EffectiveOpacity(node) == 0.f &&
|
| - (!node->data.has_potential_opacity_animation ||
|
| + (!node->has_potential_opacity_animation ||
|
| property_trees()->is_active) &&
|
| - node->data.background_filters.IsEmpty())
|
| - node->data.is_drawn = false;
|
| + node->background_filters.IsEmpty())
|
| + node->is_drawn = false;
|
| else if (parent_node)
|
| - node->data.is_drawn = parent_node->data.is_drawn;
|
| + node->is_drawn = parent_node->is_drawn;
|
| else
|
| - node->data.is_drawn = true;
|
| + node->is_drawn = true;
|
| }
|
|
|
| void EffectTree::UpdateEffectChanged(EffectNode* node,
|
| EffectNode* parent_node) {
|
| - if (parent_node && parent_node->data.effect_changed) {
|
| - node->data.effect_changed = true;
|
| + if (parent_node && parent_node->effect_changed) {
|
| + node->effect_changed = true;
|
| }
|
| }
|
|
|
| void EffectTree::UpdateBackfaceVisibility(EffectNode* node,
|
| EffectNode* parent_node) {
|
| if (!parent_node) {
|
| - node->data.hidden_by_backface_visibility = false;
|
| + node->hidden_by_backface_visibility = false;
|
| return;
|
| }
|
| - if (parent_node->data.hidden_by_backface_visibility) {
|
| - node->data.hidden_by_backface_visibility = true;
|
| + if (parent_node->hidden_by_backface_visibility) {
|
| + node->hidden_by_backface_visibility = true;
|
| return;
|
| }
|
|
|
| TransformTree& transform_tree = property_trees()->transform_tree;
|
| - if (node->data.has_render_surface && !node->data.double_sided) {
|
| - TransformNode* transform_node =
|
| - transform_tree.Node(node->data.transform_id);
|
| - if (transform_node->data.is_invertible &&
|
| - transform_node->data.ancestors_are_invertible) {
|
| - if (transform_node->data.sorting_context_id) {
|
| + if (node->has_render_surface && !node->double_sided) {
|
| + TransformNode* transform_node = transform_tree.Node(node->transform_id);
|
| + if (transform_node->is_invertible &&
|
| + transform_node->ancestors_are_invertible) {
|
| + if (transform_node->sorting_context_id) {
|
| const TransformNode* parent_transform_node =
|
| transform_tree.parent(transform_node);
|
| if (parent_transform_node &&
|
| - parent_transform_node->data.sorting_context_id ==
|
| - transform_node->data.sorting_context_id) {
|
| + parent_transform_node->sorting_context_id ==
|
| + transform_node->sorting_context_id) {
|
| gfx::Transform surface_draw_transform;
|
| transform_tree.ComputeTransform(
|
| transform_node->id, transform_tree.TargetId(transform_node->id),
|
| &surface_draw_transform);
|
| - node->data.hidden_by_backface_visibility =
|
| + node->hidden_by_backface_visibility =
|
| surface_draw_transform.IsBackFaceVisible();
|
| } else {
|
| - node->data.hidden_by_backface_visibility =
|
| - transform_node->data.local.IsBackFaceVisible();
|
| + node->hidden_by_backface_visibility =
|
| + transform_node->local.IsBackFaceVisible();
|
| }
|
| return;
|
| }
|
| }
|
| }
|
| - node->data.hidden_by_backface_visibility = false;
|
| + node->hidden_by_backface_visibility = false;
|
| }
|
|
|
| void EffectTree::UpdateSublayerScale(EffectNode* effect_node) {
|
| - if (!effect_node->data.has_render_surface ||
|
| - effect_node->data.transform_id == 0) {
|
| - effect_node->data.sublayer_scale = gfx::Vector2dF(1.0f, 1.0f);
|
| + if (!effect_node->has_render_surface || effect_node->transform_id == 0) {
|
| + effect_node->sublayer_scale = gfx::Vector2dF(1.0f, 1.0f);
|
| return;
|
| }
|
|
|
| @@ -1426,12 +844,11 @@ void EffectTree::UpdateSublayerScale(EffectNode* effect_node) {
|
| float layer_scale_factor = transform_tree.device_scale_factor() *
|
| transform_tree.device_transform_scale_factor();
|
| TransformNode* transform_node =
|
| - transform_tree.Node(effect_node->data.transform_id);
|
| - if (transform_node->data.in_subtree_of_page_scale_layer)
|
| + transform_tree.Node(effect_node->transform_id);
|
| + if (transform_node->in_subtree_of_page_scale_layer)
|
| layer_scale_factor *= transform_tree.page_scale_factor();
|
| - effect_node->data.sublayer_scale =
|
| - MathUtil::ComputeTransform2dScaleComponents(
|
| - transform_tree.ToScreen(transform_node->id), layer_scale_factor);
|
| + effect_node->sublayer_scale = MathUtil::ComputeTransform2dScaleComponents(
|
| + transform_tree.ToScreen(transform_node->id), layer_scale_factor);
|
| }
|
|
|
| void EffectTree::UpdateEffects(int id) {
|
| @@ -1480,8 +897,8 @@ void EffectTree::TakeCopyRequestsAndTransformToSurface(
|
| int node_id,
|
| std::vector<std::unique_ptr<CopyOutputRequest>>* requests) {
|
| EffectNode* effect_node = Node(node_id);
|
| - DCHECK(effect_node->data.has_render_surface);
|
| - DCHECK(effect_node->data.has_copy_request);
|
| + DCHECK(effect_node->has_render_surface);
|
| + DCHECK(effect_node->has_copy_request);
|
|
|
| auto range = copy_requests_.equal_range(node_id);
|
| for (auto it = range.first; it != range.second; ++it)
|
| @@ -1494,7 +911,7 @@ void EffectTree::TakeCopyRequestsAndTransformToSurface(
|
|
|
| // The area needs to be transformed from the space of content that draws to
|
| // the surface to the space of the surface itself.
|
| - int destination_id = effect_node->data.transform_id;
|
| + int destination_id = effect_node->transform_id;
|
| int source_id;
|
| if (effect_node->parent_id != -1) {
|
| // For non-root surfaces, transform only by sub-layer scale.
|
| @@ -1520,8 +937,8 @@ bool EffectTree::HasCopyRequests() const {
|
|
|
| void EffectTree::ClearCopyRequests() {
|
| for (auto& node : nodes()) {
|
| - node.data.num_copy_requests_in_subtree = 0;
|
| - node.data.has_copy_request = false;
|
| + node.num_copy_requests_in_subtree = 0;
|
| + node.has_copy_request = false;
|
| }
|
|
|
| // Any copy requests that are still left will be aborted (sending an empty
|
| @@ -1534,13 +951,13 @@ int EffectTree::ClosestAncestorWithCopyRequest(int id) const {
|
| DCHECK_GE(id, 0);
|
| const EffectNode* node = Node(id);
|
| while (node->id > 1) {
|
| - if (node->data.has_copy_request)
|
| + if (node->has_copy_request)
|
| return node->id;
|
|
|
| node = parent(node);
|
| }
|
|
|
| - if (node->data.has_copy_request)
|
| + if (node->has_copy_request)
|
| return node->id;
|
| else
|
| return -1;
|
| @@ -1556,41 +973,41 @@ bool EffectTree::ContributesToDrawnSurface(int id) {
|
| // copy requests.
|
| EffectNode* node = Node(id);
|
| EffectNode* parent_node = parent(node);
|
| - return node->data.is_drawn && (!parent_node || parent_node->data.is_drawn);
|
| + return node->is_drawn && (!parent_node || parent_node->is_drawn);
|
| }
|
|
|
| void EffectTree::ResetChangeTracking() {
|
| for (int id = 1; id < static_cast<int>(size()); ++id) {
|
| EffectNode* node = Node(id);
|
| - node->data.effect_changed = false;
|
| + node->effect_changed = false;
|
| }
|
| }
|
|
|
| void TransformTree::UpdateNodeAndAncestorsHaveIntegerTranslations(
|
| TransformNode* node,
|
| TransformNode* parent_node) {
|
| - node->data.node_and_ancestors_have_only_integer_translation =
|
| - node->data.to_parent.IsIdentityOrIntegerTranslation();
|
| + node->node_and_ancestors_have_only_integer_translation =
|
| + node->to_parent.IsIdentityOrIntegerTranslation();
|
| if (parent_node)
|
| - node->data.node_and_ancestors_have_only_integer_translation =
|
| - node->data.node_and_ancestors_have_only_integer_translation &&
|
| - parent_node->data.node_and_ancestors_have_only_integer_translation;
|
| + node->node_and_ancestors_have_only_integer_translation =
|
| + node->node_and_ancestors_have_only_integer_translation &&
|
| + parent_node->node_and_ancestors_have_only_integer_translation;
|
| }
|
|
|
| void ClipTree::SetViewportClip(gfx::RectF viewport_rect) {
|
| if (size() < 2)
|
| return;
|
| ClipNode* node = Node(1);
|
| - if (viewport_rect == node->data.clip)
|
| + if (viewport_rect == node->clip)
|
| return;
|
| - node->data.clip = viewport_rect;
|
| + node->clip = viewport_rect;
|
| set_needs_update(true);
|
| }
|
|
|
| gfx::RectF ClipTree::ViewportClip() {
|
| const unsigned long min_size = 1;
|
| DCHECK_GT(size(), min_size);
|
| - return Node(1)->data.clip;
|
| + return Node(1)->clip;
|
| }
|
|
|
| bool ClipTree::operator==(const ClipTree& other) const {
|
| @@ -1747,21 +1164,21 @@ void ScrollTree::clear() {
|
|
|
| gfx::ScrollOffset ScrollTree::MaxScrollOffset(int scroll_node_id) const {
|
| const ScrollNode* scroll_node = Node(scroll_node_id);
|
| - gfx::SizeF scroll_bounds = gfx::SizeF(scroll_node->data.bounds.width(),
|
| - scroll_node->data.bounds.height());
|
| + gfx::SizeF scroll_bounds =
|
| + gfx::SizeF(scroll_node->bounds.width(), scroll_node->bounds.height());
|
|
|
| - if (scroll_node->data.is_inner_viewport_scroll_layer) {
|
| + if (scroll_node->is_inner_viewport_scroll_layer) {
|
| scroll_bounds.Enlarge(
|
| property_trees()->inner_viewport_scroll_bounds_delta().x(),
|
| property_trees()->inner_viewport_scroll_bounds_delta().y());
|
| }
|
|
|
| - if (!scroll_node->data.scrollable || scroll_bounds.IsEmpty())
|
| + if (!scroll_node->scrollable || scroll_bounds.IsEmpty())
|
| return gfx::ScrollOffset();
|
|
|
| TransformTree& transform_tree = property_trees()->transform_tree;
|
| float scale_factor = 1.f;
|
| - if (scroll_node->data.max_scroll_offset_affected_by_page_scale)
|
| + if (scroll_node->max_scroll_offset_affected_by_page_scale)
|
| scale_factor = transform_tree.page_scale_factor();
|
|
|
| gfx::SizeF scaled_scroll_bounds = gfx::ScaleSize(scroll_bounds, scale_factor);
|
| @@ -1781,14 +1198,13 @@ gfx::ScrollOffset ScrollTree::MaxScrollOffset(int scroll_node_id) const {
|
|
|
| gfx::Size ScrollTree::scroll_clip_layer_bounds(int scroll_node_id) const {
|
| const ScrollNode* scroll_node = Node(scroll_node_id);
|
| - gfx::Size scroll_clip_layer_bounds =
|
| - scroll_node->data.scroll_clip_layer_bounds;
|
| + gfx::Size scroll_clip_layer_bounds = scroll_node->scroll_clip_layer_bounds;
|
|
|
| gfx::Vector2dF scroll_clip_layer_bounds_delta;
|
| - if (scroll_node->data.is_inner_viewport_scroll_layer) {
|
| + if (scroll_node->is_inner_viewport_scroll_layer) {
|
| scroll_clip_layer_bounds_delta.Add(
|
| property_trees()->inner_viewport_container_bounds_delta());
|
| - } else if (scroll_node->data.is_outer_viewport_scroll_layer) {
|
| + } else if (scroll_node->is_outer_viewport_scroll_layer) {
|
| scroll_clip_layer_bounds_delta.Add(
|
| property_trees()->outer_viewport_container_bounds_delta());
|
| }
|
| @@ -1819,13 +1235,13 @@ gfx::Transform ScrollTree::ScreenSpaceTransform(int scroll_node_id) const {
|
| const ScrollNode* scroll_node = Node(scroll_node_id);
|
| const TransformTree& transform_tree = property_trees()->transform_tree;
|
| const TransformNode* transform_node =
|
| - transform_tree.Node(scroll_node->data.transform_id);
|
| + transform_tree.Node(scroll_node->transform_id);
|
| gfx::Transform screen_space_transform(
|
| - 1, 0, 0, 1, scroll_node->data.offset_to_transform_parent.x(),
|
| - scroll_node->data.offset_to_transform_parent.y());
|
| + 1, 0, 0, 1, scroll_node->offset_to_transform_parent.x(),
|
| + scroll_node->offset_to_transform_parent.y());
|
| screen_space_transform.ConcatTransform(
|
| transform_tree.ToScreen(transform_node->id));
|
| - if (scroll_node->data.should_flatten)
|
| + if (scroll_node->should_flatten)
|
| screen_space_transform.FlattenTo2d();
|
| return screen_space_transform;
|
| }
|
| @@ -2033,17 +1449,17 @@ gfx::Vector2dF ScrollTree::ScrollBy(ScrollNode* scroll_node,
|
| const gfx::Vector2dF& scroll,
|
| LayerTreeImpl* layer_tree_impl) {
|
| gfx::ScrollOffset adjusted_scroll(scroll);
|
| - if (!scroll_node->data.user_scrollable_horizontal)
|
| + if (!scroll_node->user_scrollable_horizontal)
|
| adjusted_scroll.set_x(0);
|
| - if (!scroll_node->data.user_scrollable_vertical)
|
| + if (!scroll_node->user_scrollable_vertical)
|
| adjusted_scroll.set_y(0);
|
| - DCHECK(scroll_node->data.scrollable);
|
| + DCHECK(scroll_node->scrollable);
|
| gfx::ScrollOffset old_offset = current_scroll_offset(scroll_node->owner_id);
|
| gfx::ScrollOffset new_offset =
|
| ClampScrollOffsetToLimits(old_offset + adjusted_scroll, scroll_node);
|
| if (SetScrollOffset(scroll_node->owner_id, new_offset))
|
| layer_tree_impl->DidUpdateScrollOffset(scroll_node->owner_id,
|
| - scroll_node->data.transform_id);
|
| + scroll_node->transform_id);
|
|
|
| gfx::ScrollOffset unscrolled =
|
| old_offset + gfx::ScrollOffset(scroll) - new_offset;
|
| @@ -2208,11 +1624,11 @@ void PropertyTrees::PushOpacityIfNeeded(PropertyTrees* target_tree) {
|
| effect_tree.Node(effect_id_to_index_map[id]);
|
| EffectNode* target_effect_node =
|
| target_tree->effect_tree.Node(target_tree->effect_id_to_index_map[id]);
|
| - float source_opacity = source_effect_node->data.opacity;
|
| - float target_opacity = target_effect_node->data.opacity;
|
| + float source_opacity = source_effect_node->opacity;
|
| + float target_opacity = target_effect_node->opacity;
|
| if (source_opacity == target_opacity)
|
| continue;
|
| - target_effect_node->data.opacity = source_opacity;
|
| + target_effect_node->opacity = source_opacity;
|
| target_tree->effect_tree.set_needs_update(true);
|
| }
|
| }
|
| @@ -2252,7 +1668,7 @@ void PropertyTrees::UpdateChangeTracking() {
|
| for (int i = 1; i < static_cast<int>(transform_tree.size()); ++i) {
|
| TransformNode* node = transform_tree.Node(i);
|
| TransformNode* parent_node = transform_tree.parent(node);
|
| - TransformNode* source_node = transform_tree.Node(node->data.source_node_id);
|
| + TransformNode* source_node = transform_tree.Node(node->source_node_id);
|
| transform_tree.UpdateTransformChanged(node, parent_node, source_node);
|
| }
|
| }
|
| @@ -2260,16 +1676,16 @@ void PropertyTrees::UpdateChangeTracking() {
|
| void PropertyTrees::PushChangeTrackingTo(PropertyTrees* tree) {
|
| for (int id = 1; id < static_cast<int>(effect_tree.size()); ++id) {
|
| EffectNode* node = effect_tree.Node(id);
|
| - if (node->data.effect_changed) {
|
| + if (node->effect_changed) {
|
| EffectNode* target_node = tree->effect_tree.Node(node->id);
|
| - target_node->data.effect_changed = true;
|
| + target_node->effect_changed = true;
|
| }
|
| }
|
| for (int id = 1; id < static_cast<int>(transform_tree.size()); ++id) {
|
| TransformNode* node = transform_tree.Node(id);
|
| - if (node->data.transform_changed) {
|
| + if (node->transform_changed) {
|
| TransformNode* target_node = tree->transform_tree.Node(node->id);
|
| - target_node->data.transform_changed = true;
|
| + target_node->transform_changed = true;
|
| }
|
| }
|
| // Ensure that change tracking is updated even if property trees don't have
|
| @@ -2349,8 +1765,7 @@ CombinedAnimationScale PropertyTrees::GetAnimationScales(
|
|
|
| cached_data_.animation_scales[transform_node_id]
|
| .to_screen_has_scale_animation =
|
| - !node->data.has_only_translation_animations ||
|
| - ancestor_is_animating_scale;
|
| + !node->has_only_translation_animations || ancestor_is_animating_scale;
|
|
|
| // Once we've failed to compute a maximum animated scale at an ancestor, we
|
| // continue to fail.
|
| @@ -2368,8 +1783,7 @@ CombinedAnimationScale PropertyTrees::GetAnimationScales(
|
| // as another node is decreasing scale from 10 to 1. Naively combining these
|
| // scales would produce a scale of 100.
|
| bool failed_for_multiple_scale_animations =
|
| - ancestor_is_animating_scale &&
|
| - !node->data.has_only_translation_animations;
|
| + ancestor_is_animating_scale && !node->has_only_translation_animations;
|
|
|
| if (failed_at_ancestor || failed_for_non_scale_or_translation ||
|
| failed_for_multiple_scale_animations) {
|
| @@ -2388,10 +1802,10 @@ CombinedAnimationScale PropertyTrees::GetAnimationScales(
|
| .combined_maximum_animation_target_scale = 0.f;
|
| cached_data_.animation_scales[transform_node_id]
|
| .combined_starting_animation_scale = 0.f;
|
| - } else if (node->data.has_only_translation_animations) {
|
| + } else if (node->has_only_translation_animations) {
|
| // An ancestor is animating scale.
|
| gfx::Vector2dF local_scales =
|
| - MathUtil::ComputeTransform2dScaleComponents(node->data.local, 0.f);
|
| + MathUtil::ComputeTransform2dScaleComponents(node->local, 0.f);
|
| float max_local_scale = std::max(local_scales.x(), local_scales.y());
|
| cached_data_.animation_scales[transform_node_id]
|
| .combined_maximum_animation_target_scale =
|
| @@ -2410,7 +1824,7 @@ CombinedAnimationScale PropertyTrees::GetAnimationScales(
|
| layer_impl, &cached_data_.animation_scales[transform_node_id]
|
| .local_starting_animation_scale);
|
| gfx::Vector2dF local_scales =
|
| - MathUtil::ComputeTransform2dScaleComponents(node->data.local, 0.f);
|
| + MathUtil::ComputeTransform2dScaleComponents(node->local, 0.f);
|
| float max_local_scale = std::max(local_scales.x(), local_scales.y());
|
|
|
| if (cached_data_.animation_scales[transform_node_id]
|
|
|