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 Layer::Inputs::Inputs() | 46 Layer::Inputs::Inputs() |
45 : // Layer IDs start from 1. | 47 : // Layer IDs start from 1. |
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 // non-1 value or vice-versa as render surfaces can change. | 494 // non-1 value or vice-versa as render surfaces can change. |
493 bool force_rebuild = opacity == 1.f || inputs_.opacity == 1.f; | 495 bool force_rebuild = opacity == 1.f || inputs_.opacity == 1.f; |
494 inputs_.opacity = opacity; | 496 inputs_.opacity = opacity; |
495 SetSubtreePropertyChanged(); | 497 SetSubtreePropertyChanged(); |
496 if (layer_tree_host_ && !force_rebuild) { | 498 if (layer_tree_host_ && !force_rebuild) { |
497 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 499 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
498 auto effect_id_to_index = property_trees->effect_id_to_index_map.find(id()); | 500 auto effect_id_to_index = property_trees->effect_id_to_index_map.find(id()); |
499 if (effect_id_to_index != property_trees->effect_id_to_index_map.end()) { | 501 if (effect_id_to_index != property_trees->effect_id_to_index_map.end()) { |
500 EffectNode* node = | 502 EffectNode* node = |
501 property_trees->effect_tree.Node(effect_id_to_index->second); | 503 property_trees->effect_tree.Node(effect_id_to_index->second); |
502 node->data.opacity = opacity; | 504 node->opacity = opacity; |
503 node->data.effect_changed = true; | 505 node->effect_changed = true; |
504 property_trees->effect_tree.set_needs_update(true); | 506 property_trees->effect_tree.set_needs_update(true); |
505 SetNeedsCommitNoRebuild(); | 507 SetNeedsCommitNoRebuild(); |
506 return; | 508 return; |
507 } | 509 } |
508 } | 510 } |
509 SetNeedsCommit(); | 511 SetNeedsCommit(); |
510 } | 512 } |
511 | 513 |
512 float Layer::EffectiveOpacity() const { | 514 float Layer::EffectiveOpacity() const { |
513 return inputs_.hide_layer_and_subtree ? 0.f : inputs_.opacity; | 515 return inputs_.hide_layer_and_subtree ? 0.f : inputs_.opacity; |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
607 return; | 609 return; |
608 | 610 |
609 SetSubtreePropertyChanged(); | 611 SetSubtreePropertyChanged(); |
610 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 612 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
611 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | 613 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
612 id())) { | 614 id())) { |
613 DCHECK_EQ(transform_tree_index(), | 615 DCHECK_EQ(transform_tree_index(), |
614 property_trees->transform_id_to_index_map[id()]); | 616 property_trees->transform_id_to_index_map[id()]); |
615 TransformNode* transform_node = | 617 TransformNode* transform_node = |
616 property_trees->transform_tree.Node(transform_tree_index()); | 618 property_trees->transform_tree.Node(transform_tree_index()); |
617 transform_node->data.update_post_local_transform(position, | 619 transform_node->update_post_local_transform(position, transform_origin()); |
618 transform_origin()); | 620 transform_node->needs_local_transform_update = true; |
619 transform_node->data.needs_local_transform_update = true; | 621 transform_node->transform_changed = true; |
620 transform_node->data.transform_changed = true; | |
621 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); | 622 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); |
622 SetNeedsCommitNoRebuild(); | 623 SetNeedsCommitNoRebuild(); |
623 return; | 624 return; |
624 } | 625 } |
625 | 626 |
626 SetNeedsCommit(); | 627 SetNeedsCommit(); |
627 } | 628 } |
628 | 629 |
629 bool Layer::IsContainerForFixedPositionLayers() const { | 630 bool Layer::IsContainerForFixedPositionLayers() const { |
630 if (!inputs_.transform.IsIdentityOrTranslation()) | 631 if (!inputs_.transform.IsIdentityOrTranslation()) |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
662 // We need to trigger a rebuild if we could have affected 2d axis | 663 // We need to trigger a rebuild if we could have affected 2d axis |
663 // alignment. We'll check to see if transform and inputs_.transform | 664 // alignment. We'll check to see if transform and inputs_.transform |
664 // are axis | 665 // are axis |
665 // align with respect to one another. | 666 // align with respect to one another. |
666 DCHECK_EQ(transform_tree_index(), | 667 DCHECK_EQ(transform_tree_index(), |
667 property_trees->transform_id_to_index_map[id()]); | 668 property_trees->transform_id_to_index_map[id()]); |
668 TransformNode* transform_node = | 669 TransformNode* transform_node = |
669 property_trees->transform_tree.Node(transform_tree_index()); | 670 property_trees->transform_tree.Node(transform_tree_index()); |
670 bool preserves_2d_axis_alignment = | 671 bool preserves_2d_axis_alignment = |
671 Are2dAxisAligned(inputs_.transform, transform); | 672 Are2dAxisAligned(inputs_.transform, transform); |
672 transform_node->data.local = transform; | 673 transform_node->local = transform; |
673 transform_node->data.needs_local_transform_update = true; | 674 transform_node->needs_local_transform_update = true; |
674 transform_node->data.transform_changed = true; | 675 transform_node->transform_changed = true; |
675 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); | 676 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); |
676 if (preserves_2d_axis_alignment) | 677 if (preserves_2d_axis_alignment) |
677 SetNeedsCommitNoRebuild(); | 678 SetNeedsCommitNoRebuild(); |
678 else | 679 else |
679 SetNeedsCommit(); | 680 SetNeedsCommit(); |
680 inputs_.transform = transform; | 681 inputs_.transform = transform; |
681 return; | 682 return; |
682 } | 683 } |
683 } | 684 } |
684 | 685 |
(...skipping 12 matching lines...) Expand all Loading... |
697 return; | 698 return; |
698 | 699 |
699 SetSubtreePropertyChanged(); | 700 SetSubtreePropertyChanged(); |
700 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 701 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
701 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | 702 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
702 id())) { | 703 id())) { |
703 DCHECK_EQ(transform_tree_index(), | 704 DCHECK_EQ(transform_tree_index(), |
704 property_trees->transform_id_to_index_map[id()]); | 705 property_trees->transform_id_to_index_map[id()]); |
705 TransformNode* transform_node = | 706 TransformNode* transform_node = |
706 property_trees->transform_tree.Node(transform_tree_index()); | 707 property_trees->transform_tree.Node(transform_tree_index()); |
707 transform_node->data.update_pre_local_transform(transform_origin); | 708 transform_node->update_pre_local_transform(transform_origin); |
708 transform_node->data.update_post_local_transform(position(), | 709 transform_node->update_post_local_transform(position(), transform_origin); |
709 transform_origin); | 710 transform_node->needs_local_transform_update = true; |
710 transform_node->data.needs_local_transform_update = true; | 711 transform_node->transform_changed = true; |
711 transform_node->data.transform_changed = true; | |
712 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); | 712 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); |
713 SetNeedsCommitNoRebuild(); | 713 SetNeedsCommitNoRebuild(); |
714 return; | 714 return; |
715 } | 715 } |
716 | 716 |
717 SetNeedsCommit(); | 717 SetNeedsCommit(); |
718 } | 718 } |
719 | 719 |
720 bool Layer::AnimationsPreserveAxisAlignment() const { | 720 bool Layer::AnimationsPreserveAxisAlignment() const { |
721 DCHECK(layer_tree_host_); | 721 DCHECK(layer_tree_host_); |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
828 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 828 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
829 if (scroll_tree_index() != -1 && scrollable()) | 829 if (scroll_tree_index() != -1 && scrollable()) |
830 property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset); | 830 property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset); |
831 | 831 |
832 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | 832 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
833 id())) { | 833 id())) { |
834 DCHECK_EQ(transform_tree_index(), | 834 DCHECK_EQ(transform_tree_index(), |
835 property_trees->transform_id_to_index_map[id()]); | 835 property_trees->transform_id_to_index_map[id()]); |
836 TransformNode* transform_node = | 836 TransformNode* transform_node = |
837 property_trees->transform_tree.Node(transform_tree_index()); | 837 property_trees->transform_tree.Node(transform_tree_index()); |
838 transform_node->data.scroll_offset = CurrentScrollOffset(); | 838 transform_node->scroll_offset = CurrentScrollOffset(); |
839 transform_node->data.needs_local_transform_update = true; | 839 transform_node->needs_local_transform_update = true; |
840 property_trees->transform_tree.set_needs_update(true); | 840 property_trees->transform_tree.set_needs_update(true); |
841 SetNeedsCommitNoRebuild(); | 841 SetNeedsCommitNoRebuild(); |
842 return; | 842 return; |
843 } | 843 } |
844 | 844 |
845 SetNeedsCommit(); | 845 SetNeedsCommit(); |
846 } | 846 } |
847 | 847 |
848 void Layer::SetScrollOffsetFromImplSide( | 848 void Layer::SetScrollOffsetFromImplSide( |
849 const gfx::ScrollOffset& scroll_offset) { | 849 const gfx::ScrollOffset& scroll_offset) { |
(...skipping 11 matching lines...) Expand all Loading... |
861 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 861 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
862 if (scroll_tree_index() != -1 && scrollable()) | 862 if (scroll_tree_index() != -1 && scrollable()) |
863 property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset); | 863 property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset); |
864 | 864 |
865 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | 865 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
866 id())) { | 866 id())) { |
867 DCHECK_EQ(transform_tree_index(), | 867 DCHECK_EQ(transform_tree_index(), |
868 property_trees->transform_id_to_index_map[id()]); | 868 property_trees->transform_id_to_index_map[id()]); |
869 TransformNode* transform_node = | 869 TransformNode* transform_node = |
870 property_trees->transform_tree.Node(transform_tree_index()); | 870 property_trees->transform_tree.Node(transform_tree_index()); |
871 transform_node->data.scroll_offset = CurrentScrollOffset(); | 871 transform_node->scroll_offset = CurrentScrollOffset(); |
872 transform_node->data.needs_local_transform_update = true; | 872 transform_node->needs_local_transform_update = true; |
873 property_trees->transform_tree.set_needs_update(true); | 873 property_trees->transform_tree.set_needs_update(true); |
874 needs_rebuild = false; | 874 needs_rebuild = false; |
875 } | 875 } |
876 | 876 |
877 if (needs_rebuild) | 877 if (needs_rebuild) |
878 property_trees->needs_rebuild = true; | 878 property_trees->needs_rebuild = true; |
879 | 879 |
880 if (!inputs_.did_scroll_callback.is_null()) | 880 if (!inputs_.did_scroll_callback.is_null()) |
881 inputs_.did_scroll_callback.Run(); | 881 inputs_.did_scroll_callback.Run(); |
882 // The callback could potentially change the layer structure: | 882 // The callback could potentially change the layer structure: |
(...skipping 776 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1659 // Changing the opacity may make a previously hidden layer visible, so a new | 1659 // Changing the opacity may make a previously hidden layer visible, so a new |
1660 // recording may be needed. | 1660 // recording may be needed. |
1661 SetNeedsUpdate(); | 1661 SetNeedsUpdate(); |
1662 if (layer_tree_host_) { | 1662 if (layer_tree_host_) { |
1663 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 1663 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
1664 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, | 1664 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, |
1665 id())) { | 1665 id())) { |
1666 DCHECK_EQ(effect_tree_index(), | 1666 DCHECK_EQ(effect_tree_index(), |
1667 property_trees->effect_id_to_index_map[id()]); | 1667 property_trees->effect_id_to_index_map[id()]); |
1668 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); | 1668 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); |
1669 node->data.opacity = opacity; | 1669 node->opacity = opacity; |
1670 property_trees->effect_tree.set_needs_update(true); | 1670 property_trees->effect_tree.set_needs_update(true); |
1671 } | 1671 } |
1672 } | 1672 } |
1673 } | 1673 } |
1674 | 1674 |
1675 void Layer::OnTransformAnimated(const gfx::Transform& transform) { | 1675 void Layer::OnTransformAnimated(const gfx::Transform& transform) { |
1676 if (inputs_.transform == transform) | 1676 if (inputs_.transform == transform) |
1677 return; | 1677 return; |
1678 inputs_.transform = transform; | 1678 inputs_.transform = transform; |
1679 // Changing the transform may change the visible part of this layer, so a new | 1679 // Changing the transform may change the visible part of this layer, so a new |
1680 // recording may be needed. | 1680 // recording may be needed. |
1681 SetNeedsUpdate(); | 1681 SetNeedsUpdate(); |
1682 if (layer_tree_host_) { | 1682 if (layer_tree_host_) { |
1683 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 1683 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
1684 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | 1684 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
1685 id())) { | 1685 id())) { |
1686 DCHECK_EQ(transform_tree_index(), | 1686 DCHECK_EQ(transform_tree_index(), |
1687 property_trees->transform_id_to_index_map[id()]); | 1687 property_trees->transform_id_to_index_map[id()]); |
1688 TransformNode* node = | 1688 TransformNode* node = |
1689 property_trees->transform_tree.Node(transform_tree_index()); | 1689 property_trees->transform_tree.Node(transform_tree_index()); |
1690 node->data.local = transform; | 1690 node->local = transform; |
1691 node->data.needs_local_transform_update = true; | 1691 node->needs_local_transform_update = true; |
1692 node->data.has_potential_animation = true; | 1692 node->has_potential_animation = true; |
1693 property_trees->transform_tree.set_needs_update(true); | 1693 property_trees->transform_tree.set_needs_update(true); |
1694 } | 1694 } |
1695 } | 1695 } |
1696 } | 1696 } |
1697 | 1697 |
1698 void Layer::OnScrollOffsetAnimated(const gfx::ScrollOffset& scroll_offset) { | 1698 void Layer::OnScrollOffsetAnimated(const gfx::ScrollOffset& scroll_offset) { |
1699 // Do nothing. Scroll deltas will be sent from the compositor thread back | 1699 // Do nothing. Scroll deltas will be sent from the compositor thread back |
1700 // to the main thread in the same manner as during non-animated | 1700 // to the main thread in the same manner as during non-animated |
1701 // compositor-driven scrolling. | 1701 // compositor-driven scrolling. |
1702 } | 1702 } |
1703 | 1703 |
1704 void Layer::OnTransformIsCurrentlyAnimatingChanged( | 1704 void Layer::OnTransformIsCurrentlyAnimatingChanged( |
1705 bool is_currently_animating) { | 1705 bool is_currently_animating) { |
1706 DCHECK(layer_tree_host_); | 1706 DCHECK(layer_tree_host_); |
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 node->data.is_currently_animating = is_currently_animating; | 1715 node->is_currently_animating = is_currently_animating; |
1716 } | 1716 } |
1717 | 1717 |
1718 void Layer::OnTransformIsPotentiallyAnimatingChanged( | 1718 void Layer::OnTransformIsPotentiallyAnimatingChanged( |
1719 bool has_potential_animation) { | 1719 bool has_potential_animation) { |
1720 if (!layer_tree_host_) | 1720 if (!layer_tree_host_) |
1721 return; | 1721 return; |
1722 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 1722 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
1723 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | 1723 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
1724 id())) | 1724 id())) |
1725 return; | 1725 return; |
1726 DCHECK_EQ(transform_tree_index(), | 1726 DCHECK_EQ(transform_tree_index(), |
1727 property_trees->transform_id_to_index_map[id()]); | 1727 property_trees->transform_id_to_index_map[id()]); |
1728 TransformNode* node = | 1728 TransformNode* node = |
1729 property_trees->transform_tree.Node(transform_tree_index()); | 1729 property_trees->transform_tree.Node(transform_tree_index()); |
1730 | 1730 |
1731 node->data.has_potential_animation = has_potential_animation; | 1731 node->has_potential_animation = has_potential_animation; |
1732 if (has_potential_animation) { | 1732 if (has_potential_animation) { |
1733 node->data.has_only_translation_animations = HasOnlyTranslationTransforms(); | 1733 node->has_only_translation_animations = HasOnlyTranslationTransforms(); |
1734 } else { | 1734 } else { |
1735 node->data.has_only_translation_animations = true; | 1735 node->has_only_translation_animations = true; |
1736 } | 1736 } |
1737 property_trees->transform_tree.set_needs_update(true); | 1737 property_trees->transform_tree.set_needs_update(true); |
1738 } | 1738 } |
1739 | 1739 |
1740 void Layer::OnOpacityIsCurrentlyAnimatingChanged(bool is_currently_animating) { | 1740 void Layer::OnOpacityIsCurrentlyAnimatingChanged(bool is_currently_animating) { |
1741 DCHECK(layer_tree_host_); | 1741 DCHECK(layer_tree_host_); |
1742 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 1742 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
1743 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) | 1743 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) |
1744 return; | 1744 return; |
1745 DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]); | 1745 DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]); |
1746 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); | 1746 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); |
1747 node->data.is_currently_animating_opacity = is_currently_animating; | 1747 node->is_currently_animating_opacity = is_currently_animating; |
1748 } | 1748 } |
1749 | 1749 |
1750 void Layer::OnOpacityIsPotentiallyAnimatingChanged( | 1750 void Layer::OnOpacityIsPotentiallyAnimatingChanged( |
1751 bool has_potential_animation) { | 1751 bool has_potential_animation) { |
1752 DCHECK(layer_tree_host_); | 1752 DCHECK(layer_tree_host_); |
1753 PropertyTrees* property_trees = layer_tree_host_->property_trees(); | 1753 PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
1754 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) | 1754 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) |
1755 return; | 1755 return; |
1756 DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]); | 1756 DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]); |
1757 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); | 1757 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); |
1758 node->data.has_potential_opacity_animation = | 1758 node->has_potential_opacity_animation = |
1759 has_potential_animation || OpacityCanAnimateOnImplThread(); | 1759 has_potential_animation || OpacityCanAnimateOnImplThread(); |
1760 property_trees->effect_tree.set_needs_update(true); | 1760 property_trees->effect_tree.set_needs_update(true); |
1761 } | 1761 } |
1762 | 1762 |
1763 bool Layer::HasActiveAnimationForTesting() const { | 1763 bool Layer::HasActiveAnimationForTesting() const { |
1764 return layer_tree_host_ ? layer_tree_host_->HasActiveAnimationForTesting(this) | 1764 return layer_tree_host_ ? layer_tree_host_->HasActiveAnimationForTesting(this) |
1765 : false; | 1765 : false; |
1766 } | 1766 } |
1767 | 1767 |
1768 void Layer::SetHasWillChangeTransformHint(bool has_will_change) { | 1768 void Layer::SetHasWillChangeTransformHint(bool has_will_change) { |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1855 // PushPropertiesTo() propagates layer debug info to the impl | 1855 // PushPropertiesTo() propagates layer debug info to the impl |
1856 // side -- otherwise this won't happen for the the layers that | 1856 // side -- otherwise this won't happen for the the layers that |
1857 // remain unchanged since tracing started. | 1857 // remain unchanged since tracing started. |
1858 SetNeedsPushProperties(); | 1858 SetNeedsPushProperties(); |
1859 } | 1859 } |
1860 | 1860 |
1861 int Layer::num_copy_requests_in_target_subtree() { | 1861 int Layer::num_copy_requests_in_target_subtree() { |
1862 return layer_tree_host() | 1862 return layer_tree_host() |
1863 ->property_trees() | 1863 ->property_trees() |
1864 ->effect_tree.Node(effect_tree_index()) | 1864 ->effect_tree.Node(effect_tree_index()) |
1865 ->data.num_copy_requests_in_subtree; | 1865 ->num_copy_requests_in_subtree; |
1866 } | 1866 } |
1867 | 1867 |
1868 gfx::Transform Layer::screen_space_transform() const { | 1868 gfx::Transform Layer::screen_space_transform() const { |
1869 DCHECK_NE(transform_tree_index_, -1); | 1869 DCHECK_NE(transform_tree_index_, -1); |
1870 return draw_property_utils::ScreenSpaceTransform( | 1870 return draw_property_utils::ScreenSpaceTransform( |
1871 this, layer_tree_host_->property_trees()->transform_tree); | 1871 this, layer_tree_host_->property_trees()->transform_tree); |
1872 } | 1872 } |
1873 | 1873 |
1874 } // namespace cc | 1874 } // namespace cc |
OLD | NEW |