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