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 13 matching lines...) Expand all Loading... |
24 #include "cc/layers/layer_impl.h" | 24 #include "cc/layers/layer_impl.h" |
25 #include "cc/layers/layer_proto_converter.h" | 25 #include "cc/layers/layer_proto_converter.h" |
26 #include "cc/layers/scrollbar_layer_interface.h" | 26 #include "cc/layers/scrollbar_layer_interface.h" |
27 #include "cc/output/copy_output_request.h" | 27 #include "cc/output/copy_output_request.h" |
28 #include "cc/output/copy_output_result.h" | 28 #include "cc/output/copy_output_result.h" |
29 #include "cc/proto/cc_conversions.h" | 29 #include "cc/proto/cc_conversions.h" |
30 #include "cc/proto/gfx_conversions.h" | 30 #include "cc/proto/gfx_conversions.h" |
31 #include "cc/proto/layer.pb.h" | 31 #include "cc/proto/layer.pb.h" |
32 #include "cc/proto/skia_conversions.h" | 32 #include "cc/proto/skia_conversions.h" |
33 #include "cc/trees/draw_property_utils.h" | 33 #include "cc/trees/draw_property_utils.h" |
| 34 #include "cc/trees/effect_node.h" |
34 #include "cc/trees/layer_tree_host.h" | 35 #include "cc/trees/layer_tree_host.h" |
35 #include "cc/trees/layer_tree_impl.h" | 36 #include "cc/trees/layer_tree_impl.h" |
| 37 #include "cc/trees/transform_node.h" |
36 #include "third_party/skia/include/core/SkImageFilter.h" | 38 #include "third_party/skia/include/core/SkImageFilter.h" |
37 #include "ui/gfx/geometry/rect_conversions.h" | 39 #include "ui/gfx/geometry/rect_conversions.h" |
38 #include "ui/gfx/geometry/vector2d_conversions.h" | 40 #include "ui/gfx/geometry/vector2d_conversions.h" |
39 | 41 |
40 namespace cc { | 42 namespace cc { |
41 | 43 |
42 base::StaticAtomicSequenceNumber g_next_layer_id; | 44 base::StaticAtomicSequenceNumber g_next_layer_id; |
43 | 45 |
44 scoped_refptr<Layer> Layer::Create() { | 46 scoped_refptr<Layer> Layer::Create() { |
45 return make_scoped_refptr(new Layer()); | 47 return make_scoped_refptr(new Layer()); |
(...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
488 // non-1 value or vice-versa as render surfaces can change. | 490 // non-1 value or vice-versa as render surfaces can change. |
489 bool force_rebuild = opacity == 1.f || opacity_ == 1.f; | 491 bool force_rebuild = opacity == 1.f || opacity_ == 1.f; |
490 opacity_ = opacity; | 492 opacity_ = opacity; |
491 SetSubtreePropertyChanged(); | 493 SetSubtreePropertyChanged(); |
492 if (layer_tree_host_ && !force_rebuild) { | 494 if (layer_tree_host_ && !force_rebuild) { |
493 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 495 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
494 auto effect_id_to_index = property_trees->effect_id_to_index_map.find(id()); | 496 auto effect_id_to_index = property_trees->effect_id_to_index_map.find(id()); |
495 if (effect_id_to_index != property_trees->effect_id_to_index_map.end()) { | 497 if (effect_id_to_index != property_trees->effect_id_to_index_map.end()) { |
496 EffectNode* node = | 498 EffectNode* node = |
497 property_trees->effect_tree.Node(effect_id_to_index->second); | 499 property_trees->effect_tree.Node(effect_id_to_index->second); |
498 node->data.opacity = opacity; | 500 node->opacity = opacity; |
499 node->data.effect_changed = true; | 501 node->effect_changed = true; |
500 property_trees->effect_tree.set_needs_update(true); | 502 property_trees->effect_tree.set_needs_update(true); |
501 SetNeedsCommitNoRebuild(); | 503 SetNeedsCommitNoRebuild(); |
502 return; | 504 return; |
503 } | 505 } |
504 } | 506 } |
505 SetNeedsCommit(); | 507 SetNeedsCommit(); |
506 } | 508 } |
507 | 509 |
508 float Layer::EffectiveOpacity() const { | 510 float Layer::EffectiveOpacity() const { |
509 return hide_layer_and_subtree_ ? 0.f : opacity_; | 511 return hide_layer_and_subtree_ ? 0.f : opacity_; |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
603 return; | 605 return; |
604 | 606 |
605 SetSubtreePropertyChanged(); | 607 SetSubtreePropertyChanged(); |
606 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 608 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
607 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | 609 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
608 id())) { | 610 id())) { |
609 DCHECK_EQ(transform_tree_index(), | 611 DCHECK_EQ(transform_tree_index(), |
610 property_trees->transform_id_to_index_map[id()]); | 612 property_trees->transform_id_to_index_map[id()]); |
611 TransformNode* transform_node = | 613 TransformNode* transform_node = |
612 property_trees->transform_tree.Node(transform_tree_index()); | 614 property_trees->transform_tree.Node(transform_tree_index()); |
613 transform_node->data.update_post_local_transform(position, | 615 transform_node->update_post_local_transform(position, transform_origin()); |
614 transform_origin()); | 616 transform_node->needs_local_transform_update = true; |
615 transform_node->data.needs_local_transform_update = true; | 617 transform_node->transform_changed = true; |
616 transform_node->data.transform_changed = true; | |
617 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); | 618 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); |
618 SetNeedsCommitNoRebuild(); | 619 SetNeedsCommitNoRebuild(); |
619 return; | 620 return; |
620 } | 621 } |
621 | 622 |
622 SetNeedsCommit(); | 623 SetNeedsCommit(); |
623 } | 624 } |
624 | 625 |
625 bool Layer::IsContainerForFixedPositionLayers() const { | 626 bool Layer::IsContainerForFixedPositionLayers() const { |
626 if (!transform_.IsIdentityOrTranslation()) | 627 if (!transform_.IsIdentityOrTranslation()) |
(...skipping 30 matching lines...) Expand all Loading... |
657 id())) { | 658 id())) { |
658 // We need to trigger a rebuild if we could have affected 2d axis | 659 // We need to trigger a rebuild if we could have affected 2d axis |
659 // alignment. We'll check to see if transform and transform_ are axis | 660 // alignment. We'll check to see if transform and transform_ are axis |
660 // align with respect to one another. | 661 // align with respect to one another. |
661 DCHECK_EQ(transform_tree_index(), | 662 DCHECK_EQ(transform_tree_index(), |
662 property_trees->transform_id_to_index_map[id()]); | 663 property_trees->transform_id_to_index_map[id()]); |
663 TransformNode* transform_node = | 664 TransformNode* transform_node = |
664 property_trees->transform_tree.Node(transform_tree_index()); | 665 property_trees->transform_tree.Node(transform_tree_index()); |
665 bool preserves_2d_axis_alignment = | 666 bool preserves_2d_axis_alignment = |
666 Are2dAxisAligned(transform_, transform); | 667 Are2dAxisAligned(transform_, transform); |
667 transform_node->data.local = transform; | 668 transform_node->local = transform; |
668 transform_node->data.needs_local_transform_update = true; | 669 transform_node->needs_local_transform_update = true; |
669 transform_node->data.transform_changed = true; | 670 transform_node->transform_changed = true; |
670 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); | 671 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); |
671 if (preserves_2d_axis_alignment) | 672 if (preserves_2d_axis_alignment) |
672 SetNeedsCommitNoRebuild(); | 673 SetNeedsCommitNoRebuild(); |
673 else | 674 else |
674 SetNeedsCommit(); | 675 SetNeedsCommit(); |
675 transform_ = transform; | 676 transform_ = transform; |
676 return; | 677 return; |
677 } | 678 } |
678 } | 679 } |
679 | 680 |
(...skipping 12 matching lines...) Expand all Loading... |
692 return; | 693 return; |
693 | 694 |
694 SetSubtreePropertyChanged(); | 695 SetSubtreePropertyChanged(); |
695 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 696 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
696 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | 697 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
697 id())) { | 698 id())) { |
698 DCHECK_EQ(transform_tree_index(), | 699 DCHECK_EQ(transform_tree_index(), |
699 property_trees->transform_id_to_index_map[id()]); | 700 property_trees->transform_id_to_index_map[id()]); |
700 TransformNode* transform_node = | 701 TransformNode* transform_node = |
701 property_trees->transform_tree.Node(transform_tree_index()); | 702 property_trees->transform_tree.Node(transform_tree_index()); |
702 transform_node->data.update_pre_local_transform(transform_origin); | 703 transform_node->update_pre_local_transform(transform_origin); |
703 transform_node->data.update_post_local_transform(position(), | 704 transform_node->update_post_local_transform(position(), transform_origin); |
704 transform_origin); | 705 transform_node->needs_local_transform_update = true; |
705 transform_node->data.needs_local_transform_update = true; | 706 transform_node->transform_changed = true; |
706 transform_node->data.transform_changed = true; | |
707 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); | 707 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); |
708 SetNeedsCommitNoRebuild(); | 708 SetNeedsCommitNoRebuild(); |
709 return; | 709 return; |
710 } | 710 } |
711 | 711 |
712 SetNeedsCommit(); | 712 SetNeedsCommit(); |
713 } | 713 } |
714 | 714 |
715 bool Layer::AnimationsPreserveAxisAlignment() const { | 715 bool Layer::AnimationsPreserveAxisAlignment() const { |
716 DCHECK(layer_tree_host_); | 716 DCHECK(layer_tree_host_); |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
823 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 823 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
824 if (scroll_tree_index() != -1 && scrollable()) | 824 if (scroll_tree_index() != -1 && scrollable()) |
825 property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset); | 825 property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset); |
826 | 826 |
827 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | 827 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
828 id())) { | 828 id())) { |
829 DCHECK_EQ(transform_tree_index(), | 829 DCHECK_EQ(transform_tree_index(), |
830 property_trees->transform_id_to_index_map[id()]); | 830 property_trees->transform_id_to_index_map[id()]); |
831 TransformNode* transform_node = | 831 TransformNode* transform_node = |
832 property_trees->transform_tree.Node(transform_tree_index()); | 832 property_trees->transform_tree.Node(transform_tree_index()); |
833 transform_node->data.scroll_offset = CurrentScrollOffset(); | 833 transform_node->scroll_offset = CurrentScrollOffset(); |
834 transform_node->data.needs_local_transform_update = true; | 834 transform_node->needs_local_transform_update = true; |
835 property_trees->transform_tree.set_needs_update(true); | 835 property_trees->transform_tree.set_needs_update(true); |
836 SetNeedsCommitNoRebuild(); | 836 SetNeedsCommitNoRebuild(); |
837 return; | 837 return; |
838 } | 838 } |
839 | 839 |
840 SetNeedsCommit(); | 840 SetNeedsCommit(); |
841 } | 841 } |
842 | 842 |
843 void Layer::SetScrollOffsetFromImplSide( | 843 void Layer::SetScrollOffsetFromImplSide( |
844 const gfx::ScrollOffset& scroll_offset) { | 844 const gfx::ScrollOffset& scroll_offset) { |
(...skipping 11 matching lines...) Expand all Loading... |
856 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 856 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
857 if (scroll_tree_index() != -1 && scrollable()) | 857 if (scroll_tree_index() != -1 && scrollable()) |
858 property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset); | 858 property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset); |
859 | 859 |
860 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | 860 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
861 id())) { | 861 id())) { |
862 DCHECK_EQ(transform_tree_index(), | 862 DCHECK_EQ(transform_tree_index(), |
863 property_trees->transform_id_to_index_map[id()]); | 863 property_trees->transform_id_to_index_map[id()]); |
864 TransformNode* transform_node = | 864 TransformNode* transform_node = |
865 property_trees->transform_tree.Node(transform_tree_index()); | 865 property_trees->transform_tree.Node(transform_tree_index()); |
866 transform_node->data.scroll_offset = CurrentScrollOffset(); | 866 transform_node->scroll_offset = CurrentScrollOffset(); |
867 transform_node->data.needs_local_transform_update = true; | 867 transform_node->needs_local_transform_update = true; |
868 property_trees->transform_tree.set_needs_update(true); | 868 property_trees->transform_tree.set_needs_update(true); |
869 needs_rebuild = false; | 869 needs_rebuild = false; |
870 } | 870 } |
871 | 871 |
872 if (needs_rebuild) | 872 if (needs_rebuild) |
873 property_trees->needs_rebuild = true; | 873 property_trees->needs_rebuild = true; |
874 | 874 |
875 if (!did_scroll_callback_.is_null()) | 875 if (!did_scroll_callback_.is_null()) |
876 did_scroll_callback_.Run(); | 876 did_scroll_callback_.Run(); |
877 // The callback could potentially change the layer structure: | 877 // The callback could potentially change the layer structure: |
(...skipping 766 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1644 // Changing the opacity may make a previously hidden layer visible, so a new | 1644 // Changing the opacity may make a previously hidden layer visible, so a new |
1645 // recording may be needed. | 1645 // recording may be needed. |
1646 SetNeedsUpdate(); | 1646 SetNeedsUpdate(); |
1647 if (layer_tree_host_) { | 1647 if (layer_tree_host_) { |
1648 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 1648 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
1649 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, | 1649 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, |
1650 id())) { | 1650 id())) { |
1651 DCHECK_EQ(effect_tree_index(), | 1651 DCHECK_EQ(effect_tree_index(), |
1652 property_trees->effect_id_to_index_map[id()]); | 1652 property_trees->effect_id_to_index_map[id()]); |
1653 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); | 1653 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); |
1654 node->data.opacity = opacity; | 1654 node->opacity = opacity; |
1655 property_trees->effect_tree.set_needs_update(true); | 1655 property_trees->effect_tree.set_needs_update(true); |
1656 } | 1656 } |
1657 } | 1657 } |
1658 } | 1658 } |
1659 | 1659 |
1660 void Layer::OnTransformAnimated(const gfx::Transform& transform) { | 1660 void Layer::OnTransformAnimated(const gfx::Transform& transform) { |
1661 if (transform_ == transform) | 1661 if (transform_ == transform) |
1662 return; | 1662 return; |
1663 transform_ = transform; | 1663 transform_ = transform; |
1664 // Changing the transform may change the visible part of this layer, so a new | 1664 // Changing the transform may change the visible part of this layer, so a new |
1665 // recording may be needed. | 1665 // recording may be needed. |
1666 SetNeedsUpdate(); | 1666 SetNeedsUpdate(); |
1667 if (layer_tree_host_) { | 1667 if (layer_tree_host_) { |
1668 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 1668 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
1669 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | 1669 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
1670 id())) { | 1670 id())) { |
1671 DCHECK_EQ(transform_tree_index(), | 1671 DCHECK_EQ(transform_tree_index(), |
1672 property_trees->transform_id_to_index_map[id()]); | 1672 property_trees->transform_id_to_index_map[id()]); |
1673 TransformNode* node = | 1673 TransformNode* node = |
1674 property_trees->transform_tree.Node(transform_tree_index()); | 1674 property_trees->transform_tree.Node(transform_tree_index()); |
1675 node->data.local = transform; | 1675 node->local = transform; |
1676 node->data.needs_local_transform_update = true; | 1676 node->needs_local_transform_update = true; |
1677 node->data.has_potential_animation = true; | 1677 node->has_potential_animation = true; |
1678 property_trees->transform_tree.set_needs_update(true); | 1678 property_trees->transform_tree.set_needs_update(true); |
1679 } | 1679 } |
1680 } | 1680 } |
1681 } | 1681 } |
1682 | 1682 |
1683 void Layer::OnScrollOffsetAnimated(const gfx::ScrollOffset& scroll_offset) { | 1683 void Layer::OnScrollOffsetAnimated(const gfx::ScrollOffset& scroll_offset) { |
1684 // Do nothing. Scroll deltas will be sent from the compositor thread back | 1684 // Do nothing. Scroll deltas will be sent from the compositor thread back |
1685 // to the main thread in the same manner as during non-animated | 1685 // to the main thread in the same manner as during non-animated |
1686 // compositor-driven scrolling. | 1686 // compositor-driven scrolling. |
1687 } | 1687 } |
1688 | 1688 |
1689 void Layer::OnTransformIsCurrentlyAnimatingChanged( | 1689 void Layer::OnTransformIsCurrentlyAnimatingChanged( |
1690 bool is_currently_animating) { | 1690 bool is_currently_animating) { |
1691 DCHECK(layer_tree_host_); | 1691 DCHECK(layer_tree_host_); |
1692 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 1692 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
1693 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | 1693 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
1694 id())) | 1694 id())) |
1695 return; | 1695 return; |
1696 DCHECK_EQ(transform_tree_index(), | 1696 DCHECK_EQ(transform_tree_index(), |
1697 property_trees->transform_id_to_index_map[id()]); | 1697 property_trees->transform_id_to_index_map[id()]); |
1698 TransformNode* node = | 1698 TransformNode* node = |
1699 property_trees->transform_tree.Node(transform_tree_index()); | 1699 property_trees->transform_tree.Node(transform_tree_index()); |
1700 node->data.is_currently_animating = is_currently_animating; | 1700 node->is_currently_animating = is_currently_animating; |
1701 } | 1701 } |
1702 | 1702 |
1703 void Layer::OnTransformIsPotentiallyAnimatingChanged( | 1703 void Layer::OnTransformIsPotentiallyAnimatingChanged( |
1704 bool has_potential_animation) { | 1704 bool has_potential_animation) { |
1705 if (!layer_tree_host_) | 1705 if (!layer_tree_host_) |
1706 return; | 1706 return; |
1707 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 1707 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
1708 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | 1708 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
1709 id())) | 1709 id())) |
1710 return; | 1710 return; |
1711 DCHECK_EQ(transform_tree_index(), | 1711 DCHECK_EQ(transform_tree_index(), |
1712 property_trees->transform_id_to_index_map[id()]); | 1712 property_trees->transform_id_to_index_map[id()]); |
1713 TransformNode* node = | 1713 TransformNode* node = |
1714 property_trees->transform_tree.Node(transform_tree_index()); | 1714 property_trees->transform_tree.Node(transform_tree_index()); |
1715 | 1715 |
1716 node->data.has_potential_animation = has_potential_animation; | 1716 node->has_potential_animation = has_potential_animation; |
1717 if (has_potential_animation) { | 1717 if (has_potential_animation) { |
1718 node->data.has_only_translation_animations = HasOnlyTranslationTransforms(); | 1718 node->has_only_translation_animations = HasOnlyTranslationTransforms(); |
1719 } else { | 1719 } else { |
1720 node->data.has_only_translation_animations = true; | 1720 node->has_only_translation_animations = true; |
1721 } | 1721 } |
1722 property_trees->transform_tree.set_needs_update(true); | 1722 property_trees->transform_tree.set_needs_update(true); |
1723 } | 1723 } |
1724 | 1724 |
1725 void Layer::OnOpacityIsCurrentlyAnimatingChanged(bool is_currently_animating) { | 1725 void Layer::OnOpacityIsCurrentlyAnimatingChanged(bool is_currently_animating) { |
1726 DCHECK(layer_tree_host_); | 1726 DCHECK(layer_tree_host_); |
1727 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 1727 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
1728 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) | 1728 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) |
1729 return; | 1729 return; |
1730 DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]); | 1730 DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]); |
1731 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); | 1731 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); |
1732 node->data.is_currently_animating_opacity = is_currently_animating; | 1732 node->is_currently_animating_opacity = is_currently_animating; |
1733 } | 1733 } |
1734 | 1734 |
1735 void Layer::OnOpacityIsPotentiallyAnimatingChanged( | 1735 void Layer::OnOpacityIsPotentiallyAnimatingChanged( |
1736 bool has_potential_animation) { | 1736 bool has_potential_animation) { |
1737 DCHECK(layer_tree_host_); | 1737 DCHECK(layer_tree_host_); |
1738 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 1738 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
1739 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) | 1739 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) |
1740 return; | 1740 return; |
1741 DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]); | 1741 DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]); |
1742 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); | 1742 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); |
1743 node->data.has_potential_opacity_animation = | 1743 node->has_potential_opacity_animation = |
1744 has_potential_animation || OpacityCanAnimateOnImplThread(); | 1744 has_potential_animation || OpacityCanAnimateOnImplThread(); |
1745 property_trees->effect_tree.set_needs_update(true); | 1745 property_trees->effect_tree.set_needs_update(true); |
1746 } | 1746 } |
1747 | 1747 |
1748 bool Layer::HasActiveAnimationForTesting() const { | 1748 bool Layer::HasActiveAnimationForTesting() const { |
1749 return layer_tree_host_ ? layer_tree_host_->HasActiveAnimationForTesting(this) | 1749 return layer_tree_host_ ? layer_tree_host_->HasActiveAnimationForTesting(this) |
1750 : false; | 1750 : false; |
1751 } | 1751 } |
1752 | 1752 |
1753 void Layer::SetHasWillChangeTransformHint(bool has_will_change) { | 1753 void Layer::SetHasWillChangeTransformHint(bool has_will_change) { |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1840 // PushPropertiesTo() propagates layer debug info to the impl | 1840 // PushPropertiesTo() propagates layer debug info to the impl |
1841 // side -- otherwise this won't happen for the the layers that | 1841 // side -- otherwise this won't happen for the the layers that |
1842 // remain unchanged since tracing started. | 1842 // remain unchanged since tracing started. |
1843 SetNeedsPushProperties(); | 1843 SetNeedsPushProperties(); |
1844 } | 1844 } |
1845 | 1845 |
1846 int Layer::num_copy_requests_in_target_subtree() { | 1846 int Layer::num_copy_requests_in_target_subtree() { |
1847 return layer_tree_host() | 1847 return layer_tree_host() |
1848 ->property_trees() | 1848 ->property_trees() |
1849 ->effect_tree.Node(effect_tree_index()) | 1849 ->effect_tree.Node(effect_tree_index()) |
1850 ->data.num_copy_requests_in_subtree; | 1850 ->num_copy_requests_in_subtree; |
1851 } | 1851 } |
1852 | 1852 |
1853 gfx::Transform Layer::screen_space_transform() const { | 1853 gfx::Transform Layer::screen_space_transform() const { |
1854 DCHECK_NE(transform_tree_index_, -1); | 1854 DCHECK_NE(transform_tree_index_, -1); |
1855 return draw_property_utils::ScreenSpaceTransform( | 1855 return draw_property_utils::ScreenSpaceTransform( |
1856 this, layer_tree_host_->property_trees()->transform_tree); | 1856 this, layer_tree_host_->property_trees()->transform_tree); |
1857 } | 1857 } |
1858 | 1858 |
1859 } // namespace cc | 1859 } // namespace cc |
OLD | NEW |