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

Side by Side Diff: cc/trees/layer_tree.cc

Issue 2216203002: Refactor MutatorHostClient from LayerTreeHost to LayerTree. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "base/auto_reset.h" 5 #include "base/auto_reset.h"
6 #include "cc/animation/animation_host.h" 6 #include "cc/animation/animation_host.h"
7 #include "cc/layers/layer.h" 7 #include "cc/layers/layer.h"
8 #include "cc/proto/layer_tree.pb.h" 8 #include "cc/proto/layer_tree.pb.h"
9 #include "cc/trees/layer_tree.h" 9 #include "cc/trees/layer_tree.h"
10 #include "cc/trees/layer_tree_host.h"
10 11
11 namespace cc { 12 namespace cc {
12 13
13 LayerTree::LayerTree(std::unique_ptr<AnimationHost> animation_host) 14 LayerTree::LayerTree(std::unique_ptr<AnimationHost> animation_host,
15 LayerTreeHost* layer_tree_host)
14 : in_paint_layer_contents_(false), 16 : in_paint_layer_contents_(false),
15 animation_host_(std::move(animation_host)) { 17 animation_host_(std::move(animation_host)),
18 layer_tree_host_(layer_tree_host) {
16 DCHECK(animation_host_); 19 DCHECK(animation_host_);
20 DCHECK(layer_tree_host_);
21 animation_host_->SetMutatorHostClient(this);
17 } 22 }
18 23
19 LayerTree::~LayerTree() {} 24 LayerTree::~LayerTree() {}
20 25
21 void LayerTree::RegisterLayer(Layer* layer) { 26 void LayerTree::RegisterLayer(Layer* layer) {
22 DCHECK(!LayerById(layer->id())); 27 DCHECK(!LayerById(layer->id()));
23 DCHECK(!in_paint_layer_contents_); 28 DCHECK(!in_paint_layer_contents_);
24 layer_id_map_[layer->id()] = layer; 29 layer_id_map_[layer->id()] = layer;
25 if (layer->element_id()) { 30 if (layer->element_id()) {
26 animation_host_->RegisterElement(layer->element_id(), 31 animation_host_->RegisterElement(layer->element_id(),
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 proto->set_in_paint_layer_contents(in_paint_layer_contents()); 84 proto->set_in_paint_layer_contents(in_paint_layer_contents());
80 } 85 }
81 86
82 void LayerTree::FromProtobuf(const proto::LayerTree& proto) { 87 void LayerTree::FromProtobuf(const proto::LayerTree& proto) {
83 for (auto layer_id : proto.layers_that_should_push_properties()) { 88 for (auto layer_id : proto.layers_that_should_push_properties()) {
84 AddLayerShouldPushProperties(layer_id_map_[layer_id]); 89 AddLayerShouldPushProperties(layer_id_map_[layer_id]);
85 } 90 }
86 in_paint_layer_contents_ = proto.in_paint_layer_contents(); 91 in_paint_layer_contents_ = proto.in_paint_layer_contents();
87 } 92 }
88 93
94 Layer* LayerTree::LayerByElementId(ElementId element_id) const {
95 ElementLayersMap::const_iterator iter = element_layers_map_.find(element_id);
96 return iter != element_layers_map_.end() ? iter->second : nullptr;
97 }
98
99 void LayerTree::AddToElementMap(Layer* layer) {
100 if (!layer->element_id())
101 return;
102
103 element_layers_map_[layer->element_id()] = layer;
104 }
105
106 void LayerTree::RemoveFromElementMap(Layer* layer) {
107 if (!layer->element_id())
108 return;
109
110 element_layers_map_.erase(layer->element_id());
111 }
112
113 bool LayerTree::IsElementInList(ElementId element_id,
114 ElementListType list_type) const {
115 return list_type == ElementListType::ACTIVE && LayerByElementId(element_id);
116 }
117
118 void LayerTree::SetMutatorsNeedCommit() {
119 layer_tree_host_->SetNeedsCommit();
120 }
121
122 void LayerTree::SetMutatorsNeedRebuildPropertyTrees() {
123 layer_tree_host_->property_trees()->needs_rebuild = true;
124 }
125
126 void LayerTree::SetElementFilterMutated(ElementId element_id,
127 ElementListType list_type,
128 const FilterOperations& filters) {
129 Layer* layer = LayerByElementId(element_id);
130 DCHECK(layer);
131 layer->OnFilterAnimated(filters);
132 }
133
134 void LayerTree::SetElementOpacityMutated(ElementId element_id,
135 ElementListType list_type,
136 float opacity) {
137 Layer* layer = LayerByElementId(element_id);
138 DCHECK(layer);
139 layer->OnOpacityAnimated(opacity);
140 }
141
142 void LayerTree::SetElementTransformMutated(ElementId element_id,
143 ElementListType list_type,
144 const gfx::Transform& transform) {
145 Layer* layer = LayerByElementId(element_id);
146 DCHECK(layer);
147 layer->OnTransformAnimated(transform);
148 }
149
150 void LayerTree::SetElementScrollOffsetMutated(
151 ElementId element_id,
152 ElementListType list_type,
153 const gfx::ScrollOffset& scroll_offset) {
154 Layer* layer = LayerByElementId(element_id);
155 DCHECK(layer);
156 layer->OnScrollOffsetAnimated(scroll_offset);
157 }
158
159 void LayerTree::ElementTransformIsAnimatingChanged(
160 ElementId element_id,
161 ElementListType list_type,
162 AnimationChangeType change_type,
163 bool is_animating) {
164 Layer* layer = LayerByElementId(element_id);
165 if (layer) {
166 switch (change_type) {
167 case AnimationChangeType::POTENTIAL:
168 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating);
169 break;
170 case AnimationChangeType::RUNNING:
171 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating);
172 break;
173 case AnimationChangeType::BOTH:
174 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating);
175 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating);
176 break;
177 }
178 }
179 }
180
181 void LayerTree::ElementOpacityIsAnimatingChanged(
182 ElementId element_id,
183 ElementListType list_type,
184 AnimationChangeType change_type,
185 bool is_animating) {
186 Layer* layer = LayerByElementId(element_id);
187 if (layer) {
188 switch (change_type) {
189 case AnimationChangeType::POTENTIAL:
190 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating);
191 break;
192 case AnimationChangeType::RUNNING:
193 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating);
194 break;
195 case AnimationChangeType::BOTH:
196 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating);
197 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating);
198 break;
199 }
200 }
201 }
202
203 void LayerTree::ElementFilterIsAnimatingChanged(ElementId element_id,
204 ElementListType list_type,
205 AnimationChangeType change_type,
206 bool is_animating) {
207 Layer* layer = LayerByElementId(element_id);
208 if (layer) {
209 switch (change_type) {
210 case AnimationChangeType::POTENTIAL:
211 layer->OnFilterIsPotentiallyAnimatingChanged(is_animating);
212 break;
213 case AnimationChangeType::RUNNING:
214 layer->OnFilterIsCurrentlyAnimatingChanged(is_animating);
215 break;
216 case AnimationChangeType::BOTH:
217 layer->OnFilterIsPotentiallyAnimatingChanged(is_animating);
218 layer->OnFilterIsCurrentlyAnimatingChanged(is_animating);
219 break;
220 }
221 }
222 }
223
224 gfx::ScrollOffset LayerTree::GetScrollOffsetForAnimation(
225 ElementId element_id) const {
226 Layer* layer = LayerByElementId(element_id);
227 DCHECK(layer);
228 return layer->ScrollOffsetForAnimation();
229 }
230
89 } // namespace cc 231 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698