| 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 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 DCHECK_EQ(this, replica_layer_->parent()); | 112 DCHECK_EQ(this, replica_layer_->parent()); |
| 113 replica_layer_->RemoveFromParent(); | 113 replica_layer_->RemoveFromParent(); |
| 114 } | 114 } |
| 115 } | 115 } |
| 116 | 116 |
| 117 void Layer::SetLayerTreeHost(LayerTreeHost* host) { | 117 void Layer::SetLayerTreeHost(LayerTreeHost* host) { |
| 118 if (layer_tree_host_ == host) | 118 if (layer_tree_host_ == host) |
| 119 return; | 119 return; |
| 120 | 120 |
| 121 if (layer_tree_host_) { | 121 if (layer_tree_host_) { |
| 122 layer_tree_host_->property_trees()->RemoveIdFromIdToIndexMaps(id()); |
| 122 layer_tree_host_->property_trees()->needs_rebuild = true; | 123 layer_tree_host_->property_trees()->needs_rebuild = true; |
| 123 layer_tree_host_->UnregisterLayer(this); | 124 layer_tree_host_->UnregisterLayer(this); |
| 124 } | 125 } |
| 125 if (host) { | 126 if (host) { |
| 126 host->property_trees()->needs_rebuild = true; | 127 host->property_trees()->needs_rebuild = true; |
| 127 host->RegisterLayer(this); | 128 host->RegisterLayer(this); |
| 128 } | 129 } |
| 129 | 130 |
| 130 layer_tree_host_ = host; | 131 layer_tree_host_ = host; |
| 131 InvalidatePropertyTreesIndices(); | 132 InvalidatePropertyTreesIndices(); |
| (...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 580 void Layer::SetPosition(const gfx::PointF& position) { | 581 void Layer::SetPosition(const gfx::PointF& position) { |
| 581 DCHECK(IsPropertyChangeAllowed()); | 582 DCHECK(IsPropertyChangeAllowed()); |
| 582 if (position_ == position) | 583 if (position_ == position) |
| 583 return; | 584 return; |
| 584 position_ = position; | 585 position_ = position; |
| 585 | 586 |
| 586 if (!layer_tree_host_) | 587 if (!layer_tree_host_) |
| 587 return; | 588 return; |
| 588 | 589 |
| 589 SetSubtreePropertyChanged(); | 590 SetSubtreePropertyChanged(); |
| 590 if (TransformNode* transform_node = | 591 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
| 591 layer_tree_host_->property_trees()->transform_tree.Node( | 592 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
| 592 transform_tree_index())) { | 593 id())) { |
| 593 if (transform_node->owner_id == id()) { | 594 DCHECK_EQ(transform_tree_index(), |
| 594 transform_node->data.update_post_local_transform(position, | 595 property_trees->transform_id_to_index_map[id()]); |
| 595 transform_origin()); | 596 TransformNode* transform_node = |
| 596 transform_node->data.needs_local_transform_update = true; | 597 property_trees->transform_tree.Node(transform_tree_index()); |
| 597 transform_node->data.transform_changed = true; | 598 transform_node->data.update_post_local_transform(position, |
| 598 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); | 599 transform_origin()); |
| 599 SetNeedsCommitNoRebuild(); | 600 transform_node->data.needs_local_transform_update = true; |
| 600 return; | 601 transform_node->data.transform_changed = true; |
| 601 } | 602 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); |
| 603 SetNeedsCommitNoRebuild(); |
| 604 return; |
| 602 } | 605 } |
| 603 | 606 |
| 604 SetNeedsCommit(); | 607 SetNeedsCommit(); |
| 605 } | 608 } |
| 606 | 609 |
| 607 bool Layer::IsContainerForFixedPositionLayers() const { | 610 bool Layer::IsContainerForFixedPositionLayers() const { |
| 608 if (!transform_.IsIdentityOrTranslation()) | 611 if (!transform_.IsIdentityOrTranslation()) |
| 609 return true; | 612 return true; |
| 610 if (parent_ && !parent_->transform_.IsIdentityOrTranslation()) | 613 if (parent_ && !parent_->transform_.IsIdentityOrTranslation()) |
| 611 return true; | 614 return true; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 627 } | 630 } |
| 628 } | 631 } |
| 629 | 632 |
| 630 void Layer::SetTransform(const gfx::Transform& transform) { | 633 void Layer::SetTransform(const gfx::Transform& transform) { |
| 631 DCHECK(IsPropertyChangeAllowed()); | 634 DCHECK(IsPropertyChangeAllowed()); |
| 632 if (transform_ == transform) | 635 if (transform_ == transform) |
| 633 return; | 636 return; |
| 634 | 637 |
| 635 SetSubtreePropertyChanged(); | 638 SetSubtreePropertyChanged(); |
| 636 if (layer_tree_host_) { | 639 if (layer_tree_host_) { |
| 637 if (TransformNode* transform_node = | 640 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
| 638 layer_tree_host_->property_trees()->transform_tree.Node( | 641 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
| 639 transform_tree_index())) { | 642 id())) { |
| 640 if (transform_node->owner_id == id()) { | 643 // We need to trigger a rebuild if we could have affected 2d axis |
| 641 // We need to trigger a rebuild if we could have affected 2d axis | 644 // alignment. We'll check to see if transform and transform_ are axis |
| 642 // alignment. We'll check to see if transform and transform_ are axis | 645 // align with respect to one another. |
| 643 // align with respect to one another. | 646 DCHECK_EQ(transform_tree_index(), |
| 644 bool preserves_2d_axis_alignment = | 647 property_trees->transform_id_to_index_map[id()]); |
| 645 Are2dAxisAligned(transform_, transform); | 648 TransformNode* transform_node = |
| 646 transform_node->data.local = transform; | 649 property_trees->transform_tree.Node(transform_tree_index()); |
| 647 transform_node->data.needs_local_transform_update = true; | 650 bool preserves_2d_axis_alignment = |
| 648 transform_node->data.transform_changed = true; | 651 Are2dAxisAligned(transform_, transform); |
| 649 layer_tree_host_->property_trees()->transform_tree.set_needs_update( | 652 transform_node->data.local = transform; |
| 650 true); | 653 transform_node->data.needs_local_transform_update = true; |
| 651 if (preserves_2d_axis_alignment) | 654 transform_node->data.transform_changed = true; |
| 652 SetNeedsCommitNoRebuild(); | 655 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); |
| 653 else | 656 if (preserves_2d_axis_alignment) |
| 654 SetNeedsCommit(); | 657 SetNeedsCommitNoRebuild(); |
| 655 transform_ = transform; | 658 else |
| 656 return; | 659 SetNeedsCommit(); |
| 657 } | 660 transform_ = transform; |
| 661 return; |
| 658 } | 662 } |
| 659 } | 663 } |
| 660 | 664 |
| 661 transform_ = transform; | 665 transform_ = transform; |
| 662 | 666 |
| 663 SetNeedsCommit(); | 667 SetNeedsCommit(); |
| 664 } | 668 } |
| 665 | 669 |
| 666 void Layer::SetTransformOrigin(const gfx::Point3F& transform_origin) { | 670 void Layer::SetTransformOrigin(const gfx::Point3F& transform_origin) { |
| 667 DCHECK(IsPropertyChangeAllowed()); | 671 DCHECK(IsPropertyChangeAllowed()); |
| 668 if (transform_origin_ == transform_origin) | 672 if (transform_origin_ == transform_origin) |
| 669 return; | 673 return; |
| 670 transform_origin_ = transform_origin; | 674 transform_origin_ = transform_origin; |
| 671 | 675 |
| 672 if (!layer_tree_host_) | 676 if (!layer_tree_host_) |
| 673 return; | 677 return; |
| 674 | 678 |
| 675 SetSubtreePropertyChanged(); | 679 SetSubtreePropertyChanged(); |
| 676 if (TransformNode* transform_node = | 680 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
| 677 layer_tree_host_->property_trees()->transform_tree.Node( | 681 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
| 678 transform_tree_index())) { | 682 id())) { |
| 679 if (transform_node->owner_id == id()) { | 683 DCHECK_EQ(transform_tree_index(), |
| 680 transform_node->data.update_pre_local_transform(transform_origin); | 684 property_trees->transform_id_to_index_map[id()]); |
| 681 transform_node->data.update_post_local_transform(position(), | 685 TransformNode* transform_node = |
| 682 transform_origin); | 686 property_trees->transform_tree.Node(transform_tree_index()); |
| 683 transform_node->data.needs_local_transform_update = true; | 687 transform_node->data.update_pre_local_transform(transform_origin); |
| 684 transform_node->data.transform_changed = true; | 688 transform_node->data.update_post_local_transform(position(), |
| 685 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); | 689 transform_origin); |
| 686 SetNeedsCommitNoRebuild(); | 690 transform_node->data.needs_local_transform_update = true; |
| 687 return; | 691 transform_node->data.transform_changed = true; |
| 688 } | 692 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); |
| 693 SetNeedsCommitNoRebuild(); |
| 694 return; |
| 689 } | 695 } |
| 690 | 696 |
| 691 SetNeedsCommit(); | 697 SetNeedsCommit(); |
| 692 } | 698 } |
| 693 | 699 |
| 694 bool Layer::AnimationsPreserveAxisAlignment() const { | 700 bool Layer::AnimationsPreserveAxisAlignment() const { |
| 695 DCHECK(layer_tree_host_); | 701 DCHECK(layer_tree_host_); |
| 696 return layer_tree_host_->AnimationsPreserveAxisAlignment(this); | 702 return layer_tree_host_->AnimationsPreserveAxisAlignment(this); |
| 697 } | 703 } |
| 698 | 704 |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 792 void Layer::SetScrollOffset(const gfx::ScrollOffset& scroll_offset) { | 798 void Layer::SetScrollOffset(const gfx::ScrollOffset& scroll_offset) { |
| 793 DCHECK(IsPropertyChangeAllowed()); | 799 DCHECK(IsPropertyChangeAllowed()); |
| 794 | 800 |
| 795 if (scroll_offset_ == scroll_offset) | 801 if (scroll_offset_ == scroll_offset) |
| 796 return; | 802 return; |
| 797 scroll_offset_ = scroll_offset; | 803 scroll_offset_ = scroll_offset; |
| 798 | 804 |
| 799 if (!layer_tree_host_) | 805 if (!layer_tree_host_) |
| 800 return; | 806 return; |
| 801 | 807 |
| 808 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
| 802 if (scroll_tree_index() != -1 && scrollable()) | 809 if (scroll_tree_index() != -1 && scrollable()) |
| 803 layer_tree_host_->property_trees()->scroll_tree.SetScrollOffset( | 810 property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset); |
| 804 id(), scroll_offset); | |
| 805 | 811 |
| 806 if (TransformNode* transform_node = | 812 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
| 807 layer_tree_host_->property_trees()->transform_tree.Node( | 813 id())) { |
| 808 transform_tree_index())) { | 814 DCHECK_EQ(transform_tree_index(), |
| 809 if (transform_node->owner_id == id()) { | 815 property_trees->transform_id_to_index_map[id()]); |
| 810 transform_node->data.scroll_offset = CurrentScrollOffset(); | 816 TransformNode* transform_node = |
| 811 transform_node->data.needs_local_transform_update = true; | 817 property_trees->transform_tree.Node(transform_tree_index()); |
| 812 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); | 818 transform_node->data.scroll_offset = CurrentScrollOffset(); |
| 813 SetNeedsCommitNoRebuild(); | 819 transform_node->data.needs_local_transform_update = true; |
| 814 return; | 820 property_trees->transform_tree.set_needs_update(true); |
| 815 } | 821 SetNeedsCommitNoRebuild(); |
| 822 return; |
| 816 } | 823 } |
| 817 | 824 |
| 818 SetNeedsCommit(); | 825 SetNeedsCommit(); |
| 819 } | 826 } |
| 820 | 827 |
| 821 void Layer::SetScrollOffsetFromImplSide( | 828 void Layer::SetScrollOffsetFromImplSide( |
| 822 const gfx::ScrollOffset& scroll_offset) { | 829 const gfx::ScrollOffset& scroll_offset) { |
| 823 DCHECK(IsPropertyChangeAllowed()); | 830 DCHECK(IsPropertyChangeAllowed()); |
| 824 // This function only gets called during a BeginMainFrame, so there | 831 // This function only gets called during a BeginMainFrame, so there |
| 825 // is no need to call SetNeedsUpdate here. | 832 // is no need to call SetNeedsUpdate here. |
| 826 DCHECK(layer_tree_host_ && layer_tree_host_->CommitRequested()); | 833 DCHECK(layer_tree_host_ && layer_tree_host_->CommitRequested()); |
| 827 if (scroll_offset_ == scroll_offset) | 834 if (scroll_offset_ == scroll_offset) |
| 828 return; | 835 return; |
| 829 scroll_offset_ = scroll_offset; | 836 scroll_offset_ = scroll_offset; |
| 830 SetNeedsPushProperties(); | 837 SetNeedsPushProperties(); |
| 831 | 838 |
| 832 bool needs_rebuild = true; | 839 bool needs_rebuild = true; |
| 833 | 840 |
| 841 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
| 834 if (scroll_tree_index() != -1 && scrollable()) | 842 if (scroll_tree_index() != -1 && scrollable()) |
| 835 layer_tree_host_->property_trees()->scroll_tree.SetScrollOffset( | 843 property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset); |
| 836 id(), scroll_offset); | |
| 837 | 844 |
| 838 if (TransformNode* transform_node = | 845 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
| 839 layer_tree_host_->property_trees()->transform_tree.Node( | 846 id())) { |
| 840 transform_tree_index())) { | 847 DCHECK_EQ(transform_tree_index(), |
| 841 if (transform_node->owner_id == id()) { | 848 property_trees->transform_id_to_index_map[id()]); |
| 842 transform_node->data.scroll_offset = CurrentScrollOffset(); | 849 TransformNode* transform_node = |
| 843 transform_node->data.needs_local_transform_update = true; | 850 property_trees->transform_tree.Node(transform_tree_index()); |
| 844 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); | 851 transform_node->data.scroll_offset = CurrentScrollOffset(); |
| 845 needs_rebuild = false; | 852 transform_node->data.needs_local_transform_update = true; |
| 846 } | 853 property_trees->transform_tree.set_needs_update(true); |
| 854 needs_rebuild = false; |
| 847 } | 855 } |
| 848 | 856 |
| 849 if (needs_rebuild) | 857 if (needs_rebuild) |
| 850 layer_tree_host_->property_trees()->needs_rebuild = true; | 858 property_trees->needs_rebuild = true; |
| 851 | 859 |
| 852 if (!did_scroll_callback_.is_null()) | 860 if (!did_scroll_callback_.is_null()) |
| 853 did_scroll_callback_.Run(); | 861 did_scroll_callback_.Run(); |
| 854 // The callback could potentially change the layer structure: | 862 // The callback could potentially change the layer structure: |
| 855 // "this" may have been destroyed during the process. | 863 // "this" may have been destroyed during the process. |
| 856 } | 864 } |
| 857 | 865 |
| 858 void Layer::SetScrollClipLayerId(int clip_layer_id) { | 866 void Layer::SetScrollClipLayerId(int clip_layer_id) { |
| 859 DCHECK(IsPropertyChangeAllowed()); | 867 DCHECK(IsPropertyChangeAllowed()); |
| 860 if (scroll_clip_layer_id_ == clip_layer_id) | 868 if (scroll_clip_layer_id_ == clip_layer_id) |
| (...skipping 744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1605 } | 1613 } |
| 1606 | 1614 |
| 1607 void Layer::OnOpacityAnimated(float opacity) { | 1615 void Layer::OnOpacityAnimated(float opacity) { |
| 1608 if (opacity_ == opacity) | 1616 if (opacity_ == opacity) |
| 1609 return; | 1617 return; |
| 1610 opacity_ = opacity; | 1618 opacity_ = opacity; |
| 1611 // Changing the opacity may make a previously hidden layer visible, so a new | 1619 // Changing the opacity may make a previously hidden layer visible, so a new |
| 1612 // recording may be needed. | 1620 // recording may be needed. |
| 1613 SetNeedsUpdate(); | 1621 SetNeedsUpdate(); |
| 1614 if (layer_tree_host_) { | 1622 if (layer_tree_host_) { |
| 1615 if (EffectNode* node = layer_tree_host_->property_trees()->effect_tree.Node( | 1623 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
| 1616 effect_tree_index())) { | 1624 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, |
| 1617 if (node->owner_id == id()) { | 1625 id())) { |
| 1618 node->data.opacity = opacity; | 1626 DCHECK_EQ(effect_tree_index(), |
| 1619 layer_tree_host_->property_trees()->effect_tree.set_needs_update(true); | 1627 property_trees->effect_id_to_index_map[id()]); |
| 1620 } | 1628 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); |
| 1629 node->data.opacity = opacity; |
| 1630 property_trees->effect_tree.set_needs_update(true); |
| 1621 } | 1631 } |
| 1622 } | 1632 } |
| 1623 } | 1633 } |
| 1624 | 1634 |
| 1625 void Layer::OnTransformAnimated(const gfx::Transform& transform) { | 1635 void Layer::OnTransformAnimated(const gfx::Transform& transform) { |
| 1626 if (transform_ == transform) | 1636 if (transform_ == transform) |
| 1627 return; | 1637 return; |
| 1628 transform_ = transform; | 1638 transform_ = transform; |
| 1629 // Changing the transform may change the visible part of this layer, so a new | 1639 // Changing the transform may change the visible part of this layer, so a new |
| 1630 // recording may be needed. | 1640 // recording may be needed. |
| 1631 SetNeedsUpdate(); | 1641 SetNeedsUpdate(); |
| 1632 if (layer_tree_host_) { | 1642 if (layer_tree_host_) { |
| 1633 if (TransformNode* node = | 1643 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
| 1634 layer_tree_host_->property_trees()->transform_tree.Node( | 1644 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
| 1635 transform_tree_index())) { | 1645 id())) { |
| 1636 if (node->owner_id == id()) { | 1646 DCHECK_EQ(transform_tree_index(), |
| 1637 node->data.local = transform; | 1647 property_trees->transform_id_to_index_map[id()]); |
| 1638 node->data.needs_local_transform_update = true; | 1648 TransformNode* node = |
| 1639 node->data.has_potential_animation = true; | 1649 property_trees->transform_tree.Node(transform_tree_index()); |
| 1640 layer_tree_host_->property_trees()->transform_tree.set_needs_update( | 1650 node->data.local = transform; |
| 1641 true); | 1651 node->data.needs_local_transform_update = true; |
| 1642 } | 1652 node->data.has_potential_animation = true; |
| 1653 property_trees->transform_tree.set_needs_update(true); |
| 1643 } | 1654 } |
| 1644 } | 1655 } |
| 1645 } | 1656 } |
| 1646 | 1657 |
| 1647 void Layer::OnScrollOffsetAnimated(const gfx::ScrollOffset& scroll_offset) { | 1658 void Layer::OnScrollOffsetAnimated(const gfx::ScrollOffset& scroll_offset) { |
| 1648 // Do nothing. Scroll deltas will be sent from the compositor thread back | 1659 // Do nothing. Scroll deltas will be sent from the compositor thread back |
| 1649 // to the main thread in the same manner as during non-animated | 1660 // to the main thread in the same manner as during non-animated |
| 1650 // compositor-driven scrolling. | 1661 // compositor-driven scrolling. |
| 1651 } | 1662 } |
| 1652 | 1663 |
| 1653 void Layer::OnTransformIsCurrentlyAnimatingChanged( | 1664 void Layer::OnTransformIsCurrentlyAnimatingChanged( |
| 1654 bool is_currently_animating) { | 1665 bool is_currently_animating) { |
| 1655 DCHECK(layer_tree_host_); | 1666 DCHECK(layer_tree_host_); |
| 1656 TransformTree& transform_tree = | 1667 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
| 1657 layer_tree_host_->property_trees()->transform_tree; | 1668 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
| 1658 TransformNode* node = transform_tree.Node(transform_tree_index()); | 1669 id())) |
| 1659 if (!node) | |
| 1660 return; | 1670 return; |
| 1661 | 1671 DCHECK_EQ(transform_tree_index(), |
| 1662 if (node->owner_id == id()) | 1672 property_trees->transform_id_to_index_map[id()]); |
| 1663 node->data.is_currently_animating = is_currently_animating; | 1673 TransformNode* node = |
| 1674 property_trees->transform_tree.Node(transform_tree_index()); |
| 1675 node->data.is_currently_animating = is_currently_animating; |
| 1664 } | 1676 } |
| 1665 | 1677 |
| 1666 void Layer::OnTransformIsPotentiallyAnimatingChanged( | 1678 void Layer::OnTransformIsPotentiallyAnimatingChanged( |
| 1667 bool has_potential_animation) { | 1679 bool has_potential_animation) { |
| 1668 if (!layer_tree_host_) | 1680 if (!layer_tree_host_) |
| 1669 return; | 1681 return; |
| 1670 TransformTree& transform_tree = | 1682 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
| 1671 layer_tree_host_->property_trees()->transform_tree; | 1683 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
| 1672 TransformNode* node = transform_tree.Node(transform_tree_index()); | 1684 id())) |
| 1673 if (!node) | |
| 1674 return; | 1685 return; |
| 1686 DCHECK_EQ(transform_tree_index(), |
| 1687 property_trees->transform_id_to_index_map[id()]); |
| 1688 TransformNode* node = |
| 1689 property_trees->transform_tree.Node(transform_tree_index()); |
| 1675 | 1690 |
| 1676 if (node->owner_id == id()) { | 1691 node->data.has_potential_animation = has_potential_animation; |
| 1677 node->data.has_potential_animation = has_potential_animation; | 1692 if (has_potential_animation) { |
| 1678 if (has_potential_animation) { | 1693 float maximum_target_scale = 0.f; |
| 1679 float maximum_target_scale = 0.f; | 1694 node->data.local_maximum_animation_target_scale = |
| 1680 node->data.local_maximum_animation_target_scale = | 1695 MaximumTargetScale(&maximum_target_scale) ? maximum_target_scale : 0.f; |
| 1681 MaximumTargetScale(&maximum_target_scale) ? maximum_target_scale | 1696 |
| 1697 float animation_start_scale = 0.f; |
| 1698 node->data.local_starting_animation_scale = |
| 1699 AnimationStartScale(&animation_start_scale) ? animation_start_scale |
| 1682 : 0.f; | 1700 : 0.f; |
| 1683 | 1701 |
| 1684 float animation_start_scale = 0.f; | 1702 node->data.has_only_translation_animations = HasOnlyTranslationTransforms(); |
| 1685 node->data.local_starting_animation_scale = | |
| 1686 AnimationStartScale(&animation_start_scale) ? animation_start_scale | |
| 1687 : 0.f; | |
| 1688 | |
| 1689 node->data.has_only_translation_animations = | |
| 1690 HasOnlyTranslationTransforms(); | |
| 1691 | 1703 |
| 1692 } else { | 1704 } else { |
| 1693 node->data.local_maximum_animation_target_scale = 0.f; | 1705 node->data.local_maximum_animation_target_scale = 0.f; |
| 1694 node->data.local_starting_animation_scale = 0.f; | 1706 node->data.local_starting_animation_scale = 0.f; |
| 1695 node->data.has_only_translation_animations = true; | 1707 node->data.has_only_translation_animations = true; |
| 1696 } | 1708 } |
| 1697 transform_tree.set_needs_update(true); | 1709 property_trees->transform_tree.set_needs_update(true); |
| 1698 } | |
| 1699 } | 1710 } |
| 1700 | 1711 |
| 1701 void Layer::OnOpacityIsCurrentlyAnimatingChanged(bool is_currently_animating) { | 1712 void Layer::OnOpacityIsCurrentlyAnimatingChanged(bool is_currently_animating) { |
| 1702 DCHECK(layer_tree_host_); | 1713 DCHECK(layer_tree_host_); |
| 1703 EffectTree& effect_tree = layer_tree_host_->property_trees()->effect_tree; | 1714 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
| 1704 EffectNode* node = effect_tree.Node(effect_tree_index()); | 1715 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) |
| 1705 if (!node) | |
| 1706 return; | 1716 return; |
| 1707 | 1717 DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]); |
| 1708 if (node->owner_id == id()) | 1718 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); |
| 1709 node->data.is_currently_animating_opacity = is_currently_animating; | 1719 node->data.is_currently_animating_opacity = is_currently_animating; |
| 1710 } | 1720 } |
| 1711 | 1721 |
| 1712 void Layer::OnOpacityIsPotentiallyAnimatingChanged( | 1722 void Layer::OnOpacityIsPotentiallyAnimatingChanged( |
| 1713 bool has_potential_animation) { | 1723 bool has_potential_animation) { |
| 1714 DCHECK(layer_tree_host_); | 1724 DCHECK(layer_tree_host_); |
| 1715 EffectTree& effect_tree = layer_tree_host_->property_trees()->effect_tree; | 1725 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
| 1716 EffectNode* node = effect_tree.Node(effect_tree_index()); | 1726 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) |
| 1717 if (!node) | |
| 1718 return; | 1727 return; |
| 1719 if (node->owner_id == id()) { | 1728 DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]); |
| 1720 node->data.has_potential_opacity_animation = | 1729 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); |
| 1721 has_potential_animation || OpacityCanAnimateOnImplThread(); | 1730 node->data.has_potential_opacity_animation = |
| 1722 effect_tree.set_needs_update(true); | 1731 has_potential_animation || OpacityCanAnimateOnImplThread(); |
| 1723 } | 1732 property_trees->effect_tree.set_needs_update(true); |
| 1724 } | 1733 } |
| 1725 | 1734 |
| 1726 bool Layer::HasActiveAnimationForTesting() const { | 1735 bool Layer::HasActiveAnimationForTesting() const { |
| 1727 return layer_tree_host_ ? layer_tree_host_->HasActiveAnimationForTesting(this) | 1736 return layer_tree_host_ ? layer_tree_host_->HasActiveAnimationForTesting(this) |
| 1728 : false; | 1737 : false; |
| 1729 } | 1738 } |
| 1730 | 1739 |
| 1731 void Layer::SetHasWillChangeTransformHint(bool has_will_change) { | 1740 void Layer::SetHasWillChangeTransformHint(bool has_will_change) { |
| 1732 if (has_will_change_transform_hint_ == has_will_change) | 1741 if (has_will_change_transform_hint_ == has_will_change) |
| 1733 return; | 1742 return; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1815 ->data.num_copy_requests_in_subtree; | 1824 ->data.num_copy_requests_in_subtree; |
| 1816 } | 1825 } |
| 1817 | 1826 |
| 1818 gfx::Transform Layer::screen_space_transform() const { | 1827 gfx::Transform Layer::screen_space_transform() const { |
| 1819 DCHECK_NE(transform_tree_index_, -1); | 1828 DCHECK_NE(transform_tree_index_, -1); |
| 1820 return draw_property_utils::ScreenSpaceTransform( | 1829 return draw_property_utils::ScreenSpaceTransform( |
| 1821 this, layer_tree_host_->property_trees()->transform_tree); | 1830 this, layer_tree_host_->property_trees()->transform_tree); |
| 1822 } | 1831 } |
| 1823 | 1832 |
| 1824 } // namespace cc | 1833 } // namespace cc |
| OLD | NEW |