| Index: cc/trees/property_tree_builder.cc
|
| diff --git a/cc/trees/property_tree_builder.cc b/cc/trees/property_tree_builder.cc
|
| index f9ebb6f922df3d573ce8e674e3252e65c066c2e1..e48ab570e6ff5e78c266d2cad6971355136cd368 100644
|
| --- a/cc/trees/property_tree_builder.cc
|
| +++ b/cc/trees/property_tree_builder.cc
|
| @@ -9,6 +9,7 @@
|
| #include <map>
|
| #include <set>
|
|
|
| +#include "cc/animation/animation_host.h"
|
| #include "cc/base/math_util.h"
|
| #include "cc/layers/layer.h"
|
| #include "cc/layers/layer_impl.h"
|
| @@ -233,6 +234,64 @@ static LayerImpl* ReplicaLayer(LayerImpl* layer) {
|
| return layer->test_properties()->replica_layer;
|
| }
|
|
|
| +// Methods to query state from the AnimationHost ----------------------
|
| +template <typename LayerType>
|
| +bool OpacityIsAnimating(LayerType* layer) {
|
| + return layer->GetAnimationHost()->IsAnimatingOpacityProperty(
|
| + layer->element_id(), layer->GetElementTypeForAnimation());
|
| +}
|
| +
|
| +template <typename LayerType>
|
| +bool HasPotentiallyRunningOpacityAnimation(LayerType* layer) {
|
| + return layer->GetAnimationHost()->HasPotentiallyRunningOpacityAnimation(
|
| + layer->element_id(), layer->GetElementTypeForAnimation());
|
| +}
|
| +
|
| +template <typename LayerType>
|
| +bool FilterIsAnimating(LayerType* layer) {
|
| + return layer->GetAnimationHost()->IsAnimatingFilterProperty(
|
| + layer->element_id(), layer->GetElementTypeForAnimation());
|
| +}
|
| +
|
| +template <typename LayerType>
|
| +bool HasPotentiallyRunningFilterAnimation(LayerType* layer) {
|
| + return layer->GetAnimationHost()->HasPotentiallyRunningFilterAnimation(
|
| + layer->element_id(), layer->GetElementTypeForAnimation());
|
| +}
|
| +
|
| +template <typename LayerType>
|
| +bool TransformIsAnimating(LayerType* layer) {
|
| + return layer->GetAnimationHost()->IsAnimatingTransformProperty(
|
| + layer->element_id(), layer->GetElementTypeForAnimation());
|
| +}
|
| +
|
| +template <typename LayerType>
|
| +bool HasPotentiallyRunningTransformAnimation(LayerType* layer) {
|
| + return layer->GetAnimationHost()->HasPotentiallyRunningTransformAnimation(
|
| + layer->element_id(), layer->GetElementTypeForAnimation());
|
| +}
|
| +
|
| +template <typename LayerType>
|
| +bool HasOnlyTranslationTransforms(LayerType* layer) {
|
| + return layer->GetAnimationHost()->HasOnlyTranslationTransforms(
|
| + layer->element_id(), layer->GetElementTypeForAnimation());
|
| +}
|
| +
|
| +template <typename LayerType>
|
| +bool AnimationsPreserveAxisAlignment(LayerType* layer) {
|
| + return layer->GetAnimationHost()->AnimationsPreserveAxisAlignment(
|
| + layer->element_id());
|
| +}
|
| +
|
| +template <typename LayerType>
|
| +bool HasAnyAnimationTargetingProperty(LayerType* layer,
|
| + TargetProperty::Type property) {
|
| + return layer->GetAnimationHost()->HasAnyAnimationTargetingProperty(
|
| + layer->element_id(), property);
|
| +}
|
| +
|
| +// -------------------------------------------------------------------
|
| +
|
| template <typename LayerType>
|
| static LayerType* GetTransformParent(const DataForRecursion<LayerType>& data,
|
| LayerType* layer) {
|
| @@ -430,14 +489,14 @@ bool AddTransformNodeIfNeeded(
|
| !layer->transform().IsIdentityOr2DTranslation();
|
|
|
| const bool has_potentially_animated_transform =
|
| - layer->HasPotentiallyRunningTransformAnimation();
|
| + HasPotentiallyRunningTransformAnimation(layer);
|
|
|
| // A transform node is needed even for a finished animation, since differences
|
| // in the timing of animation state updates can mean that an animation that's
|
| // in the Finished state at tree-building time on the main thread is still in
|
| // the Running state right after commit on the compositor thread.
|
| const bool has_any_transform_animation =
|
| - layer->HasAnyAnimationTargetingProperty(TargetProperty::TRANSFORM);
|
| + HasAnyAnimationTargetingProperty(layer, TargetProperty::TRANSFORM);
|
|
|
| const bool has_surface = created_render_surface;
|
|
|
| @@ -558,10 +617,10 @@ bool AddTransformNodeIfNeeded(
|
| kInvalidPropertyTreeNodeId);
|
|
|
| node->has_potential_animation = has_potentially_animated_transform;
|
| - node->is_currently_animating = layer->TransformIsAnimating();
|
| + node->is_currently_animating = TransformIsAnimating(layer);
|
| if (has_potentially_animated_transform) {
|
| node->has_only_translation_animations =
|
| - layer->HasOnlyTranslationTransforms();
|
| + HasOnlyTranslationTransforms(layer);
|
| }
|
|
|
| float post_local_scale_factor = 1.0f;
|
| @@ -642,12 +701,12 @@ bool AddTransformNodeIfNeeded(
|
| }
|
|
|
| static inline bool HasPotentialOpacityAnimation(Layer* layer) {
|
| - return layer->HasPotentiallyRunningOpacityAnimation() ||
|
| + return HasPotentiallyRunningOpacityAnimation(layer) ||
|
| layer->OpacityCanAnimateOnImplThread();
|
| }
|
|
|
| static inline bool HasPotentialOpacityAnimation(LayerImpl* layer) {
|
| - return layer->HasPotentiallyRunningOpacityAnimation() ||
|
| + return HasPotentiallyRunningOpacityAnimation(layer) ||
|
| layer->test_properties()->opacity_can_animate;
|
| }
|
|
|
| @@ -745,7 +804,7 @@ bool ShouldCreateRenderSurface(LayerType* layer,
|
| bool axis_aligned) {
|
| const bool preserves_2d_axis_alignment =
|
| (current_transform * layer->transform()).Preserves2dAxisAlignment() &&
|
| - axis_aligned && layer->AnimationsPreserveAxisAlignment();
|
| + axis_aligned && AnimationsPreserveAxisAlignment(layer);
|
| const bool is_root = !Parent(layer);
|
| if (is_root)
|
| return true;
|
| @@ -768,7 +827,7 @@ bool ShouldCreateRenderSurface(LayerType* layer,
|
|
|
| // If the layer will use a CSS filter. In this case, the animation
|
| // will start and add a filter to this layer, so it needs a surface.
|
| - if (layer->HasPotentiallyRunningFilterAnimation()) {
|
| + if (HasPotentiallyRunningFilterAnimation(layer)) {
|
| return true;
|
| }
|
|
|
| @@ -872,7 +931,7 @@ bool AddEffectNodeIfNeeded(
|
| layer, data_from_ancestor.compound_transform_since_render_target,
|
| data_from_ancestor.axis_align_since_render_target);
|
| data_for_children->axis_align_since_render_target &=
|
| - layer->AnimationsPreserveAxisAlignment();
|
| + AnimationsPreserveAxisAlignment(layer);
|
|
|
| bool requires_node = is_root || has_transparency ||
|
| has_potential_opacity_animation ||
|
| @@ -902,7 +961,7 @@ bool AddEffectNodeIfNeeded(
|
| node.has_potential_opacity_animation = has_potential_opacity_animation;
|
| node.double_sided = DoubleSided(layer);
|
| node.subtree_hidden = HideLayerAndSubtree(layer);
|
| - node.is_currently_animating_opacity = layer->OpacityIsAnimating();
|
| + node.is_currently_animating_opacity = OpacityIsAnimating(layer);
|
|
|
| EffectTree& effect_tree = data_for_children->property_trees->effect_tree;
|
| if (MaskLayer(layer)) {
|
|
|