Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Side by Side Diff: cc/layers/layer_impl.cc

Issue 1010663002: CC Animations: Redirect all compositor animation requests to AnimationHost. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@introduce
Patch Set: Rebase. Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/layers/layer_impl.h ('k') | cc/layers/layer_utils.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/numerics/safe_conversions.h" 8 #include "base/numerics/safe_conversions.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 num_dependents_need_push_properties_(0), 83 num_dependents_need_push_properties_(0),
84 sorting_context_id_(0), 84 sorting_context_id_(0),
85 current_draw_mode_(DRAW_MODE_NONE), 85 current_draw_mode_(DRAW_MODE_NONE),
86 frame_timing_requests_dirty_(false), 86 frame_timing_requests_dirty_(false),
87 visited_(false), 87 visited_(false),
88 layer_or_descendant_is_drawn_(false), 88 layer_or_descendant_is_drawn_(false),
89 sorted_for_recursion_(false) { 89 sorted_for_recursion_(false) {
90 DCHECK_GT(layer_id_, 0); 90 DCHECK_GT(layer_id_, 0);
91 DCHECK(layer_tree_impl_); 91 DCHECK(layer_tree_impl_);
92 layer_tree_impl_->RegisterLayer(this); 92 layer_tree_impl_->RegisterLayer(this);
93 AnimationRegistrar* registrar = layer_tree_impl_->GetAnimationRegistrar(); 93
94 layer_animation_controller_ = 94 if (!layer_tree_impl_->settings().use_compositor_animation_timelines) {
95 registrar->GetAnimationControllerForId(layer_id_); 95 AnimationRegistrar* registrar = layer_tree_impl_->GetAnimationRegistrar();
96 layer_animation_controller_->AddValueObserver(this); 96 layer_animation_controller_ =
97 if (IsActive()) { 97 registrar->GetAnimationControllerForId(layer_id_);
98 layer_animation_controller_->set_value_provider(this); 98 layer_animation_controller_->AddValueObserver(this);
99 layer_animation_controller_->set_layer_animation_delegate(this); 99 if (IsActive()) {
100 layer_animation_controller_->set_value_provider(this);
101 layer_animation_controller_->set_layer_animation_delegate(this);
102 }
100 } 103 }
101 SetNeedsPushProperties(); 104 SetNeedsPushProperties();
102 } 105 }
103 106
104 LayerImpl::~LayerImpl() { 107 LayerImpl::~LayerImpl() {
105 DCHECK_EQ(DRAW_MODE_NONE, current_draw_mode_); 108 DCHECK_EQ(DRAW_MODE_NONE, current_draw_mode_);
106 109
107 layer_animation_controller_->RemoveValueObserver(this); 110 if (layer_animation_controller_) {
108 layer_animation_controller_->remove_value_provider(this); 111 layer_animation_controller_->RemoveValueObserver(this);
109 layer_animation_controller_->remove_layer_animation_delegate(this); 112 layer_animation_controller_->remove_value_provider(this);
113 layer_animation_controller_->remove_layer_animation_delegate(this);
114 }
110 115
111 if (!copy_requests_.empty() && layer_tree_impl_->IsActiveTree()) 116 if (!copy_requests_.empty() && layer_tree_impl_->IsActiveTree())
112 layer_tree_impl()->RemoveLayerWithCopyOutputRequest(this); 117 layer_tree_impl()->RemoveLayerWithCopyOutputRequest(this);
113 layer_tree_impl_->UnregisterLayer(this); 118 layer_tree_impl_->UnregisterLayer(this);
114 119
115 TRACE_EVENT_OBJECT_DELETED_WITH_ID( 120 TRACE_EVENT_OBJECT_DELETED_WITH_ID(
116 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerImpl", this); 121 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerImpl", this);
117 } 122 }
118 123
119 void LayerImpl::AddChild(scoped_ptr<LayerImpl> child) { 124 void LayerImpl::AddChild(scoped_ptr<LayerImpl> child) {
(...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after
1001 1006
1002 void LayerImpl::SetFilters(const FilterOperations& filters) { 1007 void LayerImpl::SetFilters(const FilterOperations& filters) {
1003 if (filters_ == filters) 1008 if (filters_ == filters)
1004 return; 1009 return;
1005 1010
1006 filters_ = filters; 1011 filters_ = filters;
1007 NoteLayerPropertyChangedForSubtree(); 1012 NoteLayerPropertyChangedForSubtree();
1008 } 1013 }
1009 1014
1010 bool LayerImpl::FilterIsAnimating() const { 1015 bool LayerImpl::FilterIsAnimating() const {
1011 return layer_animation_controller_->IsAnimatingProperty(Animation::FILTER); 1016 return layer_animation_controller_
1017 ? layer_animation_controller_->IsAnimatingProperty(
1018 Animation::FILTER)
1019 : layer_tree_impl_->IsAnimatingFilterProperty(this);
1012 } 1020 }
1013 1021
1014 bool LayerImpl::FilterIsAnimatingOnImplOnly() const { 1022 bool LayerImpl::FilterIsAnimatingOnImplOnly() const {
1023 if (!layer_animation_controller_)
1024 return layer_tree_impl_->FilterIsAnimatingOnImplOnly(this);
1025
1015 Animation* filter_animation = 1026 Animation* filter_animation =
1016 layer_animation_controller_->GetAnimation(Animation::FILTER); 1027 layer_animation_controller_->GetAnimation(Animation::FILTER);
1017 return filter_animation && filter_animation->is_impl_only(); 1028 return filter_animation && filter_animation->is_impl_only();
1018 } 1029 }
1019 1030
1020 void LayerImpl::SetBackgroundFilters( 1031 void LayerImpl::SetBackgroundFilters(
1021 const FilterOperations& filters) { 1032 const FilterOperations& filters) {
1022 if (background_filters_ == filters) 1033 if (background_filters_ == filters)
1023 return; 1034 return;
1024 1035
(...skipping 19 matching lines...) Expand all
1044 1055
1045 void LayerImpl::SetOpacity(float opacity) { 1056 void LayerImpl::SetOpacity(float opacity) {
1046 if (opacity_ == opacity) 1057 if (opacity_ == opacity)
1047 return; 1058 return;
1048 1059
1049 opacity_ = opacity; 1060 opacity_ = opacity;
1050 NoteLayerPropertyChangedForSubtree(); 1061 NoteLayerPropertyChangedForSubtree();
1051 } 1062 }
1052 1063
1053 bool LayerImpl::OpacityIsAnimating() const { 1064 bool LayerImpl::OpacityIsAnimating() const {
1054 return layer_animation_controller_->IsAnimatingProperty(Animation::OPACITY); 1065 return layer_animation_controller_
1066 ? layer_animation_controller_->IsAnimatingProperty(
1067 Animation::OPACITY)
1068 : layer_tree_impl_->IsAnimatingOpacityProperty(this);
1069 }
1070
1071 bool LayerImpl::HasPotentiallyRunningOpacityAnimation() const {
1072 if (layer_animation_controller_) {
1073 if (Animation* animation =
1074 layer_animation_controller()->GetAnimation(Animation::OPACITY)) {
1075 return !animation->is_finished();
1076 }
1077 return false;
1078 } else {
1079 return layer_tree_impl_->HasPotentiallyRunningOpacityAnimation(this);
1080 }
1055 } 1081 }
1056 1082
1057 bool LayerImpl::OpacityIsAnimatingOnImplOnly() const { 1083 bool LayerImpl::OpacityIsAnimatingOnImplOnly() const {
1084 if (!layer_animation_controller_)
1085 return layer_tree_impl_->OpacityIsAnimatingOnImplOnly(this);
1086
1058 Animation* opacity_animation = 1087 Animation* opacity_animation =
1059 layer_animation_controller_->GetAnimation(Animation::OPACITY); 1088 layer_animation_controller_->GetAnimation(Animation::OPACITY);
1060 return opacity_animation && opacity_animation->is_impl_only(); 1089 return opacity_animation && opacity_animation->is_impl_only();
1061 } 1090 }
1062 1091
1063 void LayerImpl::SetBlendMode(SkXfermode::Mode blend_mode) { 1092 void LayerImpl::SetBlendMode(SkXfermode::Mode blend_mode) {
1064 if (blend_mode_ == blend_mode) 1093 if (blend_mode_ == blend_mode)
1065 return; 1094 return;
1066 1095
1067 blend_mode_ = blend_mode; 1096 blend_mode_ = blend_mode;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1126 DCHECK(transform_is_invertible_ == transform_is_invertible) 1155 DCHECK(transform_is_invertible_ == transform_is_invertible)
1127 << "Can't change invertibility if transform is unchanged"; 1156 << "Can't change invertibility if transform is unchanged";
1128 return; 1157 return;
1129 } 1158 }
1130 transform_ = transform; 1159 transform_ = transform;
1131 transform_is_invertible_ = transform_is_invertible; 1160 transform_is_invertible_ = transform_is_invertible;
1132 NoteLayerPropertyChangedForSubtree(); 1161 NoteLayerPropertyChangedForSubtree();
1133 } 1162 }
1134 1163
1135 bool LayerImpl::TransformIsAnimating() const { 1164 bool LayerImpl::TransformIsAnimating() const {
1136 return layer_animation_controller_->IsAnimatingProperty(Animation::TRANSFORM); 1165 return layer_animation_controller_
1166 ? layer_animation_controller_->IsAnimatingProperty(
1167 Animation::TRANSFORM)
1168 : layer_tree_impl_->IsAnimatingTransformProperty(this);
1169 }
1170
1171 bool LayerImpl::HasPotentiallyRunningTransformAnimation() const {
1172 if (layer_animation_controller_) {
1173 if (Animation* animation =
1174 layer_animation_controller()->GetAnimation(Animation::TRANSFORM)) {
1175 return !animation->is_finished();
1176 }
1177 return false;
1178 } else {
1179 return layer_tree_impl_->HasPotentiallyRunningTransformAnimation(this);
1180 }
1137 } 1181 }
1138 1182
1139 bool LayerImpl::TransformIsAnimatingOnImplOnly() const { 1183 bool LayerImpl::TransformIsAnimatingOnImplOnly() const {
1184 if (!layer_animation_controller_)
1185 return layer_tree_impl_->TransformIsAnimatingOnImplOnly(this);
1186
1140 Animation* transform_animation = 1187 Animation* transform_animation =
1141 layer_animation_controller_->GetAnimation(Animation::TRANSFORM); 1188 layer_animation_controller_->GetAnimation(Animation::TRANSFORM);
1142 return transform_animation && transform_animation->is_impl_only(); 1189 return transform_animation && transform_animation->is_impl_only();
1143 } 1190 }
1144 1191
1192 bool LayerImpl::HasOnlyTranslationTransforms() const {
1193 if (!layer_animation_controller_)
1194 return layer_tree_impl_->HasOnlyTranslationTransforms(this);
1195
1196 return layer_animation_controller_->HasOnlyTranslationTransforms();
1197 }
1198
1199 bool LayerImpl::MaximumTargetScale(float* max_scale) const {
1200 if (!layer_animation_controller_)
1201 return layer_tree_impl_->MaximumTargetScale(this, max_scale);
1202
1203 return layer_animation_controller_->MaximumTargetScale(max_scale);
1204 }
1205
1206 bool LayerImpl::AnimationStartScale(float* start_scale) const {
1207 if (!layer_animation_controller_)
1208 return layer_tree_impl_->AnimationStartScale(this, start_scale);
1209
1210 return layer_animation_controller_->AnimationStartScale(start_scale);
1211 }
1212
1213 bool LayerImpl::HasFilterAnimationThatInflatesBounds() const {
1214 if (!layer_animation_controller_)
1215 return layer_tree_impl_->HasFilterAnimationThatInflatesBounds(this);
1216
1217 return layer_animation_controller_->HasFilterAnimationThatInflatesBounds();
1218 }
1219
1220 bool LayerImpl::HasTransformAnimationThatInflatesBounds() const {
1221 if (!layer_animation_controller_)
1222 return layer_tree_impl_->HasTransformAnimationThatInflatesBounds(this);
1223
1224 return layer_animation_controller_->HasTransformAnimationThatInflatesBounds();
1225 }
1226
1227 bool LayerImpl::HasAnimationThatInflatesBounds() const {
1228 if (!layer_animation_controller_)
1229 return layer_tree_impl_->HasAnimationThatInflatesBounds(this);
1230
1231 return layer_animation_controller_->HasAnimationThatInflatesBounds();
1232 }
1233
1234 bool LayerImpl::FilterAnimationBoundsForBox(const gfx::BoxF& box,
1235 gfx::BoxF* bounds) const {
1236 if (!layer_animation_controller_)
1237 return layer_tree_impl_->FilterAnimationBoundsForBox(this, box, bounds);
1238
1239 return layer_animation_controller_->FilterAnimationBoundsForBox(box, bounds);
1240 }
1241
1242 bool LayerImpl::TransformAnimationBoundsForBox(const gfx::BoxF& box,
1243 gfx::BoxF* bounds) const {
1244 if (!layer_animation_controller_)
1245 return layer_tree_impl_->TransformAnimationBoundsForBox(this, box, bounds);
1246
1247 return layer_animation_controller_->TransformAnimationBoundsForBox(box,
1248 bounds);
1249 }
1250
1145 void LayerImpl::SetUpdateRect(const gfx::Rect& update_rect) { 1251 void LayerImpl::SetUpdateRect(const gfx::Rect& update_rect) {
1146 update_rect_ = update_rect; 1252 update_rect_ = update_rect;
1147 SetNeedsPushProperties(); 1253 SetNeedsPushProperties();
1148 } 1254 }
1149 1255
1150 void LayerImpl::AddDamageRect(const gfx::RectF& damage_rect) { 1256 void LayerImpl::AddDamageRect(const gfx::RectF& damage_rect) {
1151 damage_rect_ = gfx::UnionRects(damage_rect_, damage_rect); 1257 damage_rect_ = gfx::UnionRects(damage_rect_, damage_rect);
1152 } 1258 }
1153 1259
1154 bool LayerImpl::IsExternalScrollActive() const { 1260 bool LayerImpl::IsExternalScrollActive() const {
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
1587 state->SetInteger("scroll_parent", scroll_parent_->id()); 1693 state->SetInteger("scroll_parent", scroll_parent_->id());
1588 1694
1589 if (clip_parent_) 1695 if (clip_parent_)
1590 state->SetInteger("clip_parent", clip_parent_->id()); 1696 state->SetInteger("clip_parent", clip_parent_->id());
1591 1697
1592 state->SetBoolean("can_use_lcd_text", can_use_lcd_text()); 1698 state->SetBoolean("can_use_lcd_text", can_use_lcd_text());
1593 state->SetBoolean("contents_opaque", contents_opaque()); 1699 state->SetBoolean("contents_opaque", contents_opaque());
1594 1700
1595 state->SetBoolean( 1701 state->SetBoolean(
1596 "has_animation_bounds", 1702 "has_animation_bounds",
1597 layer_animation_controller()->HasAnimationThatInflatesBounds()); 1703 layer_animation_controller_
1704 ? layer_animation_controller_->HasAnimationThatInflatesBounds()
1705 : layer_tree_impl_->HasAnimationThatInflatesBounds(this));
1598 1706
1599 gfx::BoxF box; 1707 gfx::BoxF box;
1600 if (LayerUtils::GetAnimationBounds(*this, &box)) 1708 if (LayerUtils::GetAnimationBounds(*this, &box))
1601 MathUtil::AddToTracedValue("animation_bounds", box, state); 1709 MathUtil::AddToTracedValue("animation_bounds", box, state);
1602 1710
1603 if (debug_info_.get()) { 1711 if (debug_info_.get()) {
1604 std::string str; 1712 std::string str;
1605 debug_info_->AppendAsTraceFormat(&str); 1713 debug_info_->AppendAsTraceFormat(&str);
1606 base::JSONReader json_reader; 1714 base::JSONReader json_reader;
1607 scoped_ptr<base::Value> debug_info_value(json_reader.ReadToValue(str)); 1715 scoped_ptr<base::Value> debug_info_value(json_reader.ReadToValue(str));
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
1680 gfx::Rect LayerImpl::GetScaledEnclosingRectInTargetSpace(float scale) const { 1788 gfx::Rect LayerImpl::GetScaledEnclosingRectInTargetSpace(float scale) const {
1681 gfx::Transform scaled_draw_transform = 1789 gfx::Transform scaled_draw_transform =
1682 draw_properties_.target_space_transform; 1790 draw_properties_.target_space_transform;
1683 scaled_draw_transform.Scale(SK_MScalar1 / scale, SK_MScalar1 / scale); 1791 scaled_draw_transform.Scale(SK_MScalar1 / scale, SK_MScalar1 / scale);
1684 gfx::Size scaled_bounds = gfx::ToCeiledSize(gfx::ScaleSize(bounds(), scale)); 1792 gfx::Size scaled_bounds = gfx::ToCeiledSize(gfx::ScaleSize(bounds(), scale));
1685 return MathUtil::MapEnclosingClippedRect(scaled_draw_transform, 1793 return MathUtil::MapEnclosingClippedRect(scaled_draw_transform,
1686 gfx::Rect(scaled_bounds)); 1794 gfx::Rect(scaled_bounds));
1687 } 1795 }
1688 1796
1689 } // namespace cc 1797 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/layer_impl.h ('k') | cc/layers/layer_utils.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698