| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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_impl.h" | 5 #include "cc/layers/layer_impl.h" |
| 6 | 6 |
| 7 #include "base/json/json_reader.h" | 7 #include "base/json/json_reader.h" |
| 8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
| 9 #include "base/trace_event/trace_event.h" | 9 #include "base/trace_event/trace_event.h" |
| 10 #include "base/trace_event/trace_event_argument.h" | 10 #include "base/trace_event/trace_event_argument.h" |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 78 clip_tree_index_(-1), | 78 clip_tree_index_(-1), |
| 79 draw_depth_(0.f), | 79 draw_depth_(0.f), |
| 80 needs_push_properties_(false), | 80 needs_push_properties_(false), |
| 81 num_dependents_need_push_properties_(0), | 81 num_dependents_need_push_properties_(0), |
| 82 sorting_context_id_(0), | 82 sorting_context_id_(0), |
| 83 current_draw_mode_(DRAW_MODE_NONE), | 83 current_draw_mode_(DRAW_MODE_NONE), |
| 84 frame_timing_requests_dirty_(false) { | 84 frame_timing_requests_dirty_(false) { |
| 85 DCHECK_GT(layer_id_, 0); | 85 DCHECK_GT(layer_id_, 0); |
| 86 DCHECK(layer_tree_impl_); | 86 DCHECK(layer_tree_impl_); |
| 87 layer_tree_impl_->RegisterLayer(this); | 87 layer_tree_impl_->RegisterLayer(this); |
| 88 AnimationRegistrar* registrar = layer_tree_impl_->GetAnimationRegistrar(); | 88 |
| 89 layer_animation_controller_ = | 89 if (!layer_tree_impl_->settings().use_compositor_animation_timelines) { |
| 90 registrar->GetAnimationControllerForId(layer_id_); | 90 AnimationRegistrar* registrar = layer_tree_impl_->GetAnimationRegistrar(); |
| 91 layer_animation_controller_->AddValueObserver(this); | 91 layer_animation_controller_ = |
| 92 if (IsActive()) { | 92 registrar->GetAnimationControllerForId(layer_id_); |
| 93 layer_animation_controller_->set_value_provider(this); | 93 layer_animation_controller_->AddValueObserver(this); |
| 94 layer_animation_controller_->set_layer_animation_delegate(this); | 94 if (IsActive()) { |
| 95 layer_animation_controller_->set_value_provider(this); |
| 96 layer_animation_controller_->set_layer_animation_delegate(this); |
| 97 } |
| 95 } | 98 } |
| 96 SetNeedsPushProperties(); | 99 SetNeedsPushProperties(); |
| 97 } | 100 } |
| 98 | 101 |
| 99 LayerImpl::~LayerImpl() { | 102 LayerImpl::~LayerImpl() { |
| 100 DCHECK_EQ(DRAW_MODE_NONE, current_draw_mode_); | 103 DCHECK_EQ(DRAW_MODE_NONE, current_draw_mode_); |
| 101 | 104 |
| 102 layer_animation_controller_->RemoveValueObserver(this); | 105 if (layer_animation_controller_) { |
| 103 layer_animation_controller_->remove_value_provider(this); | 106 layer_animation_controller_->RemoveValueObserver(this); |
| 104 layer_animation_controller_->remove_layer_animation_delegate(this); | 107 layer_animation_controller_->remove_value_provider(this); |
| 108 layer_animation_controller_->remove_layer_animation_delegate(this); |
| 109 } |
| 105 | 110 |
| 106 if (!copy_requests_.empty() && layer_tree_impl_->IsActiveTree()) | 111 if (!copy_requests_.empty() && layer_tree_impl_->IsActiveTree()) |
| 107 layer_tree_impl()->RemoveLayerWithCopyOutputRequest(this); | 112 layer_tree_impl()->RemoveLayerWithCopyOutputRequest(this); |
| 108 layer_tree_impl_->UnregisterLayer(this); | 113 layer_tree_impl_->UnregisterLayer(this); |
| 109 | 114 |
| 110 TRACE_EVENT_OBJECT_DELETED_WITH_ID( | 115 TRACE_EVENT_OBJECT_DELETED_WITH_ID( |
| 111 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerImpl", this); | 116 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerImpl", this); |
| 112 } | 117 } |
| 113 | 118 |
| 114 void LayerImpl::AddChild(scoped_ptr<LayerImpl> child) { | 119 void LayerImpl::AddChild(scoped_ptr<LayerImpl> child) { |
| (...skipping 847 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 962 | 967 |
| 963 void LayerImpl::SetFilters(const FilterOperations& filters) { | 968 void LayerImpl::SetFilters(const FilterOperations& filters) { |
| 964 if (filters_ == filters) | 969 if (filters_ == filters) |
| 965 return; | 970 return; |
| 966 | 971 |
| 967 filters_ = filters; | 972 filters_ = filters; |
| 968 NoteLayerPropertyChangedForSubtree(); | 973 NoteLayerPropertyChangedForSubtree(); |
| 969 } | 974 } |
| 970 | 975 |
| 971 bool LayerImpl::FilterIsAnimating() const { | 976 bool LayerImpl::FilterIsAnimating() const { |
| 972 return layer_animation_controller_->IsAnimatingProperty(Animation::FILTER); | 977 return layer_animation_controller_ |
| 978 ? layer_animation_controller_->IsAnimatingProperty( |
| 979 Animation::FILTER) |
| 980 : layer_tree_impl_->IsAnimatingFilterProperty(this); |
| 973 } | 981 } |
| 974 | 982 |
| 975 bool LayerImpl::FilterIsAnimatingOnImplOnly() const { | 983 bool LayerImpl::FilterIsAnimatingOnImplOnly() const { |
| 984 if (!layer_animation_controller_) |
| 985 return layer_tree_impl_->FilterIsAnimatingOnImplOnly(this); |
| 986 |
| 976 Animation* filter_animation = | 987 Animation* filter_animation = |
| 977 layer_animation_controller_->GetAnimation(Animation::FILTER); | 988 layer_animation_controller_->GetAnimation(Animation::FILTER); |
| 978 return filter_animation && filter_animation->is_impl_only(); | 989 return filter_animation && filter_animation->is_impl_only(); |
| 979 } | 990 } |
| 980 | 991 |
| 981 void LayerImpl::SetBackgroundFilters( | 992 void LayerImpl::SetBackgroundFilters( |
| 982 const FilterOperations& filters) { | 993 const FilterOperations& filters) { |
| 983 if (background_filters_ == filters) | 994 if (background_filters_ == filters) |
| 984 return; | 995 return; |
| 985 | 996 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1005 | 1016 |
| 1006 void LayerImpl::SetOpacity(float opacity) { | 1017 void LayerImpl::SetOpacity(float opacity) { |
| 1007 if (opacity_ == opacity) | 1018 if (opacity_ == opacity) |
| 1008 return; | 1019 return; |
| 1009 | 1020 |
| 1010 opacity_ = opacity; | 1021 opacity_ = opacity; |
| 1011 NoteLayerPropertyChangedForSubtree(); | 1022 NoteLayerPropertyChangedForSubtree(); |
| 1012 } | 1023 } |
| 1013 | 1024 |
| 1014 bool LayerImpl::OpacityIsAnimating() const { | 1025 bool LayerImpl::OpacityIsAnimating() const { |
| 1015 return layer_animation_controller_->IsAnimatingProperty(Animation::OPACITY); | 1026 return layer_animation_controller_ |
| 1027 ? layer_animation_controller_->IsAnimatingProperty( |
| 1028 Animation::OPACITY) |
| 1029 : layer_tree_impl_->IsAnimatingOpacityProperty(this); |
| 1030 } |
| 1031 |
| 1032 bool LayerImpl::HasPotentiallyRunningOpacityAnimation() const { |
| 1033 if (layer_animation_controller_) { |
| 1034 if (Animation* animation = |
| 1035 layer_animation_controller()->GetAnimation(Animation::OPACITY)) { |
| 1036 return !animation->is_finished(); |
| 1037 } |
| 1038 return false; |
| 1039 } else { |
| 1040 return layer_tree_impl_->HasPotentiallyRunningOpacityAnimation(this); |
| 1041 } |
| 1016 } | 1042 } |
| 1017 | 1043 |
| 1018 bool LayerImpl::OpacityIsAnimatingOnImplOnly() const { | 1044 bool LayerImpl::OpacityIsAnimatingOnImplOnly() const { |
| 1045 if (!layer_animation_controller_) |
| 1046 return layer_tree_impl_->OpacityIsAnimatingOnImplOnly(this); |
| 1047 |
| 1019 Animation* opacity_animation = | 1048 Animation* opacity_animation = |
| 1020 layer_animation_controller_->GetAnimation(Animation::OPACITY); | 1049 layer_animation_controller_->GetAnimation(Animation::OPACITY); |
| 1021 return opacity_animation && opacity_animation->is_impl_only(); | 1050 return opacity_animation && opacity_animation->is_impl_only(); |
| 1022 } | 1051 } |
| 1023 | 1052 |
| 1024 void LayerImpl::SetBlendMode(SkXfermode::Mode blend_mode) { | 1053 void LayerImpl::SetBlendMode(SkXfermode::Mode blend_mode) { |
| 1025 if (blend_mode_ == blend_mode) | 1054 if (blend_mode_ == blend_mode) |
| 1026 return; | 1055 return; |
| 1027 | 1056 |
| 1028 blend_mode_ = blend_mode; | 1057 blend_mode_ = blend_mode; |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1087 DCHECK(transform_is_invertible_ == transform_is_invertible) | 1116 DCHECK(transform_is_invertible_ == transform_is_invertible) |
| 1088 << "Can't change invertibility if transform is unchanged"; | 1117 << "Can't change invertibility if transform is unchanged"; |
| 1089 return; | 1118 return; |
| 1090 } | 1119 } |
| 1091 transform_ = transform; | 1120 transform_ = transform; |
| 1092 transform_is_invertible_ = transform_is_invertible; | 1121 transform_is_invertible_ = transform_is_invertible; |
| 1093 NoteLayerPropertyChangedForSubtree(); | 1122 NoteLayerPropertyChangedForSubtree(); |
| 1094 } | 1123 } |
| 1095 | 1124 |
| 1096 bool LayerImpl::TransformIsAnimating() const { | 1125 bool LayerImpl::TransformIsAnimating() const { |
| 1097 return layer_animation_controller_->IsAnimatingProperty(Animation::TRANSFORM); | 1126 return layer_animation_controller_ |
| 1127 ? layer_animation_controller_->IsAnimatingProperty( |
| 1128 Animation::TRANSFORM) |
| 1129 : layer_tree_impl_->IsAnimatingTransformProperty(this); |
| 1130 } |
| 1131 |
| 1132 bool LayerImpl::HasPotentiallyRunningTransformAnimation() const { |
| 1133 if (layer_animation_controller_) { |
| 1134 if (Animation* animation = |
| 1135 layer_animation_controller()->GetAnimation(Animation::TRANSFORM)) { |
| 1136 return !animation->is_finished(); |
| 1137 } |
| 1138 return false; |
| 1139 } else { |
| 1140 return layer_tree_impl_->HasPotentiallyRunningTransformAnimation(this); |
| 1141 } |
| 1098 } | 1142 } |
| 1099 | 1143 |
| 1100 bool LayerImpl::TransformIsAnimatingOnImplOnly() const { | 1144 bool LayerImpl::TransformIsAnimatingOnImplOnly() const { |
| 1145 if (!layer_animation_controller_) |
| 1146 return layer_tree_impl_->TransformIsAnimatingOnImplOnly(this); |
| 1147 |
| 1101 Animation* transform_animation = | 1148 Animation* transform_animation = |
| 1102 layer_animation_controller_->GetAnimation(Animation::TRANSFORM); | 1149 layer_animation_controller_->GetAnimation(Animation::TRANSFORM); |
| 1103 return transform_animation && transform_animation->is_impl_only(); | 1150 return transform_animation && transform_animation->is_impl_only(); |
| 1104 } | 1151 } |
| 1105 | 1152 |
| 1153 bool LayerImpl::HasOnlyTranslationTransforms() const { |
| 1154 if (!layer_animation_controller_) |
| 1155 return layer_tree_impl_->HasOnlyTranslationTransforms(this); |
| 1156 |
| 1157 return layer_animation_controller_->HasOnlyTranslationTransforms(); |
| 1158 } |
| 1159 |
| 1160 bool LayerImpl::MaximumTargetScale(float* max_scale) const { |
| 1161 if (!layer_animation_controller_) |
| 1162 return layer_tree_impl_->MaximumTargetScale(this, max_scale); |
| 1163 |
| 1164 return layer_animation_controller_->MaximumTargetScale(max_scale); |
| 1165 } |
| 1166 |
| 1167 bool LayerImpl::HasFilterAnimationThatInflatesBounds() const { |
| 1168 if (!layer_animation_controller_) |
| 1169 return layer_tree_impl_->HasFilterAnimationThatInflatesBounds(this); |
| 1170 |
| 1171 return layer_animation_controller_->HasFilterAnimationThatInflatesBounds(); |
| 1172 } |
| 1173 |
| 1174 bool LayerImpl::HasTransformAnimationThatInflatesBounds() const { |
| 1175 if (!layer_animation_controller_) |
| 1176 return layer_tree_impl_->HasTransformAnimationThatInflatesBounds(this); |
| 1177 |
| 1178 return layer_animation_controller_->HasTransformAnimationThatInflatesBounds(); |
| 1179 } |
| 1180 |
| 1181 bool LayerImpl::HasAnimationThatInflatesBounds() const { |
| 1182 if (!layer_animation_controller_) |
| 1183 return layer_tree_impl_->HasAnimationThatInflatesBounds(this); |
| 1184 |
| 1185 return layer_animation_controller_->HasAnimationThatInflatesBounds(); |
| 1186 } |
| 1187 |
| 1188 bool LayerImpl::FilterAnimationBoundsForBox(const gfx::BoxF& box, |
| 1189 gfx::BoxF* bounds) const { |
| 1190 if (!layer_animation_controller_) |
| 1191 return layer_tree_impl_->FilterAnimationBoundsForBox(this, box, bounds); |
| 1192 |
| 1193 return layer_animation_controller_->FilterAnimationBoundsForBox(box, bounds); |
| 1194 } |
| 1195 |
| 1196 bool LayerImpl::TransformAnimationBoundsForBox(const gfx::BoxF& box, |
| 1197 gfx::BoxF* bounds) const { |
| 1198 if (!layer_animation_controller_) |
| 1199 return layer_tree_impl_->TransformAnimationBoundsForBox(this, box, bounds); |
| 1200 |
| 1201 return layer_animation_controller_->TransformAnimationBoundsForBox(box, |
| 1202 bounds); |
| 1203 } |
| 1204 |
| 1106 void LayerImpl::SetUpdateRect(const gfx::Rect& update_rect) { | 1205 void LayerImpl::SetUpdateRect(const gfx::Rect& update_rect) { |
| 1107 update_rect_ = update_rect; | 1206 update_rect_ = update_rect; |
| 1108 SetNeedsPushProperties(); | 1207 SetNeedsPushProperties(); |
| 1109 } | 1208 } |
| 1110 | 1209 |
| 1111 void LayerImpl::AddDamageRect(const gfx::RectF& damage_rect) { | 1210 void LayerImpl::AddDamageRect(const gfx::RectF& damage_rect) { |
| 1112 damage_rect_ = gfx::UnionRects(damage_rect_, damage_rect); | 1211 damage_rect_ = gfx::UnionRects(damage_rect_, damage_rect); |
| 1113 } | 1212 } |
| 1114 | 1213 |
| 1115 void LayerImpl::SetContentBounds(const gfx::Size& content_bounds) { | 1214 void LayerImpl::SetContentBounds(const gfx::Size& content_bounds) { |
| (...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1540 state->SetInteger("scroll_parent", scroll_parent_->id()); | 1639 state->SetInteger("scroll_parent", scroll_parent_->id()); |
| 1541 | 1640 |
| 1542 if (clip_parent_) | 1641 if (clip_parent_) |
| 1543 state->SetInteger("clip_parent", clip_parent_->id()); | 1642 state->SetInteger("clip_parent", clip_parent_->id()); |
| 1544 | 1643 |
| 1545 state->SetBoolean("can_use_lcd_text", can_use_lcd_text()); | 1644 state->SetBoolean("can_use_lcd_text", can_use_lcd_text()); |
| 1546 state->SetBoolean("contents_opaque", contents_opaque()); | 1645 state->SetBoolean("contents_opaque", contents_opaque()); |
| 1547 | 1646 |
| 1548 state->SetBoolean( | 1647 state->SetBoolean( |
| 1549 "has_animation_bounds", | 1648 "has_animation_bounds", |
| 1550 layer_animation_controller()->HasAnimationThatInflatesBounds()); | 1649 layer_animation_controller_ |
| 1650 ? layer_animation_controller_->HasAnimationThatInflatesBounds() |
| 1651 : layer_tree_impl_->HasAnimationThatInflatesBounds(this)); |
| 1551 | 1652 |
| 1552 gfx::BoxF box; | 1653 gfx::BoxF box; |
| 1553 if (LayerUtils::GetAnimationBounds(*this, &box)) | 1654 if (LayerUtils::GetAnimationBounds(*this, &box)) |
| 1554 MathUtil::AddToTracedValue("animation_bounds", box, state); | 1655 MathUtil::AddToTracedValue("animation_bounds", box, state); |
| 1555 | 1656 |
| 1556 if (debug_info_.get()) { | 1657 if (debug_info_.get()) { |
| 1557 std::string str; | 1658 std::string str; |
| 1558 debug_info_->AppendAsTraceFormat(&str); | 1659 debug_info_->AppendAsTraceFormat(&str); |
| 1559 base::JSONReader json_reader; | 1660 base::JSONReader json_reader; |
| 1560 scoped_ptr<base::Value> debug_info_value(json_reader.ReadToValue(str)); | 1661 scoped_ptr<base::Value> debug_info_value(json_reader.ReadToValue(str)); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1635 gfx::Transform scaled_draw_transform = | 1736 gfx::Transform scaled_draw_transform = |
| 1636 draw_properties_.target_space_transform; | 1737 draw_properties_.target_space_transform; |
| 1637 scaled_draw_transform.Scale(SK_MScalar1 / scale, SK_MScalar1 / scale); | 1738 scaled_draw_transform.Scale(SK_MScalar1 / scale, SK_MScalar1 / scale); |
| 1638 gfx::Size scaled_content_bounds = | 1739 gfx::Size scaled_content_bounds = |
| 1639 gfx::ToCeiledSize(gfx::ScaleSize(content_bounds(), scale)); | 1740 gfx::ToCeiledSize(gfx::ScaleSize(content_bounds(), scale)); |
| 1640 return MathUtil::MapEnclosingClippedRect(scaled_draw_transform, | 1741 return MathUtil::MapEnclosingClippedRect(scaled_draw_transform, |
| 1641 gfx::Rect(scaled_content_bounds)); | 1742 gfx::Rect(scaled_content_bounds)); |
| 1642 } | 1743 } |
| 1643 | 1744 |
| 1644 } // namespace cc | 1745 } // namespace cc |
| OLD | NEW |