| 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 |