OLD | NEW |
1 // Copyright 2010 The Chromium Authors. All rights reserved. | 1 // Copyright 2010 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/layers/layer.h" | 5 #include "cc/layers/layer.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 1631 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1642 } | 1642 } |
1643 } | 1643 } |
1644 } | 1644 } |
1645 | 1645 |
1646 void Layer::OnScrollOffsetAnimated(const gfx::ScrollOffset& scroll_offset) { | 1646 void Layer::OnScrollOffsetAnimated(const gfx::ScrollOffset& scroll_offset) { |
1647 // Do nothing. Scroll deltas will be sent from the compositor thread back | 1647 // Do nothing. Scroll deltas will be sent from the compositor thread back |
1648 // to the main thread in the same manner as during non-animated | 1648 // to the main thread in the same manner as during non-animated |
1649 // compositor-driven scrolling. | 1649 // compositor-driven scrolling. |
1650 } | 1650 } |
1651 | 1651 |
1652 void Layer::OnTransformIsCurrentlyAnimatingChanged( | 1652 void Layer::OnIsAnimatingChanged(const PropertyAnimationState& mask, |
1653 bool is_currently_animating) { | 1653 const PropertyAnimationState& state) { |
1654 DCHECK(layer_tree_host_); | 1654 DCHECK(layer_tree_host_); |
1655 PropertyTrees* property_trees = layer_tree_->property_trees(); | 1655 PropertyTrees* property_trees = layer_tree_->property_trees(); |
1656 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | |
1657 id())) | |
1658 return; | |
1659 DCHECK_EQ(transform_tree_index(), | |
1660 property_trees->transform_id_to_index_map[id()]); | |
1661 TransformNode* node = | |
1662 property_trees->transform_tree.Node(transform_tree_index()); | |
1663 node->is_currently_animating = is_currently_animating; | |
1664 } | |
1665 | 1656 |
1666 void Layer::OnTransformIsPotentiallyAnimatingChanged( | 1657 TransformNode* transform_node = nullptr; |
1667 bool has_potential_animation) { | 1658 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
1668 if (!layer_tree_host_) | 1659 id())) { |
1669 return; | 1660 DCHECK_EQ(transform_tree_index(), |
1670 PropertyTrees* property_trees = layer_tree_->property_trees(); | 1661 property_trees->transform_id_to_index_map[id()]); |
1671 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | 1662 transform_node = |
1672 id())) | 1663 property_trees->transform_tree.Node(transform_tree_index()); |
1673 return; | 1664 } |
1674 DCHECK_EQ(transform_tree_index(), | |
1675 property_trees->transform_id_to_index_map[id()]); | |
1676 TransformNode* node = | |
1677 property_trees->transform_tree.Node(transform_tree_index()); | |
1678 | 1665 |
1679 node->has_potential_animation = has_potential_animation; | 1666 EffectNode* effect_node = nullptr; |
1680 if (has_potential_animation) { | 1667 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) { |
1681 node->has_only_translation_animations = HasOnlyTranslationTransforms(); | 1668 DCHECK_EQ(effect_tree_index(), |
1682 } else { | 1669 property_trees->effect_id_to_index_map[id()]); |
1683 node->has_only_translation_animations = true; | 1670 effect_node = property_trees->effect_tree.Node(effect_tree_index()); |
1684 } | 1671 } |
1685 property_trees->transform_tree.set_needs_update(true); | |
1686 } | |
1687 | 1672 |
1688 void Layer::OnOpacityIsCurrentlyAnimatingChanged(bool is_currently_animating) { | 1673 for (int property = TargetProperty::FIRST_TARGET_PROPERTY; |
1689 DCHECK(layer_tree_host_); | 1674 property <= TargetProperty::LAST_TARGET_PROPERTY; ++property) { |
1690 PropertyTrees* property_trees = layer_tree_->property_trees(); | 1675 switch (property) { |
1691 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) | 1676 case TargetProperty::TRANSFORM: |
1692 return; | 1677 if (transform_node) { |
1693 DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]); | 1678 if (mask.currently_running[property]) |
1694 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); | 1679 transform_node->is_currently_animating = |
1695 node->is_currently_animating_opacity = is_currently_animating; | 1680 state.currently_running[property]; |
1696 } | 1681 if (mask.potentially_animating[property]) { |
1697 | 1682 transform_node->has_potential_animation = |
1698 void Layer::OnOpacityIsPotentiallyAnimatingChanged( | 1683 state.potentially_animating[property]; |
1699 bool has_potential_animation) { | 1684 if (state.potentially_animating[property]) { |
1700 DCHECK(layer_tree_host_); | 1685 transform_node->has_only_translation_animations = |
1701 PropertyTrees* property_trees = layer_tree_->property_trees(); | 1686 HasOnlyTranslationTransforms(); |
1702 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) | 1687 } else { |
1703 return; | 1688 transform_node->has_only_translation_animations = true; |
1704 DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]); | 1689 } |
1705 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); | 1690 property_trees->transform_tree.set_needs_update(true); |
1706 node->has_potential_opacity_animation = | 1691 } |
1707 has_potential_animation || OpacityCanAnimateOnImplThread(); | 1692 } |
1708 property_trees->effect_tree.set_needs_update(true); | 1693 break; |
1709 } | 1694 case TargetProperty::OPACITY: |
1710 | 1695 if (effect_node) { |
1711 void Layer::OnFilterIsCurrentlyAnimatingChanged(bool is_currently_animating) { | 1696 if (mask.currently_running[property]) |
1712 DCHECK(layer_tree_host_); | 1697 effect_node->is_currently_animating_opacity = |
1713 PropertyTrees* property_trees = layer_tree_->property_trees(); | 1698 state.currently_running[property]; |
1714 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) | 1699 if (mask.potentially_animating[property]) { |
1715 return; | 1700 effect_node->has_potential_opacity_animation = |
1716 DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]); | 1701 state.potentially_animating[property] || |
1717 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); | 1702 OpacityCanAnimateOnImplThread(); |
1718 node->is_currently_animating_filter = is_currently_animating; | 1703 property_trees->effect_tree.set_needs_update(true); |
1719 } | 1704 } |
1720 | 1705 } |
1721 void Layer::OnFilterIsPotentiallyAnimatingChanged( | 1706 break; |
1722 bool has_potential_animation) { | 1707 case TargetProperty::FILTER: |
1723 DCHECK(layer_tree_host_); | 1708 if (effect_node) { |
1724 PropertyTrees* property_trees = layer_tree_->property_trees(); | 1709 if (mask.currently_running[property]) |
1725 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) | 1710 effect_node->is_currently_animating_filter = |
1726 return; | 1711 state.currently_running[property]; |
1727 DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]); | 1712 if (mask.potentially_animating[property]) |
1728 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); | 1713 effect_node->has_potential_filter_animation = |
1729 node->has_potential_filter_animation = has_potential_animation; | 1714 state.potentially_animating[property]; |
| 1715 } |
| 1716 break; |
| 1717 default: |
| 1718 break; |
| 1719 } |
| 1720 } |
1730 } | 1721 } |
1731 | 1722 |
1732 bool Layer::HasActiveAnimationForTesting() const { | 1723 bool Layer::HasActiveAnimationForTesting() const { |
1733 return layer_tree_host_ | 1724 return layer_tree_host_ |
1734 ? GetAnimationHost()->HasActiveAnimationForTesting(element_id()) | 1725 ? GetAnimationHost()->HasActiveAnimationForTesting(element_id()) |
1735 : false; | 1726 : false; |
1736 } | 1727 } |
1737 | 1728 |
1738 void Layer::SetHasWillChangeTransformHint(bool has_will_change) { | 1729 void Layer::SetHasWillChangeTransformHint(bool has_will_change) { |
1739 if (inputs_.has_will_change_transform_hint == has_will_change) | 1730 if (inputs_.has_will_change_transform_hint == has_will_change) |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1840 DCHECK_NE(transform_tree_index_, TransformTree::kInvalidNodeId); | 1831 DCHECK_NE(transform_tree_index_, TransformTree::kInvalidNodeId); |
1841 return draw_property_utils::ScreenSpaceTransform( | 1832 return draw_property_utils::ScreenSpaceTransform( |
1842 this, layer_tree_->property_trees()->transform_tree); | 1833 this, layer_tree_->property_trees()->transform_tree); |
1843 } | 1834 } |
1844 | 1835 |
1845 LayerTree* Layer::GetLayerTree() const { | 1836 LayerTree* Layer::GetLayerTree() const { |
1846 return layer_tree_; | 1837 return layer_tree_; |
1847 } | 1838 } |
1848 | 1839 |
1849 } // namespace cc | 1840 } // namespace cc |
OLD | NEW |