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

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: Fixes according to code review. 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"
11 #include "cc/trees/layer_tree_host_common.h"
10 12
11 namespace cc { 13 namespace cc {
12 14
13 LayerTree::LayerTree(std::unique_ptr<AnimationHost> animation_host) 15 LayerTree::LayerTree(std::unique_ptr<AnimationHost> animation_host,
16 LayerTreeHost* layer_tree_host)
14 : in_paint_layer_contents_(false), 17 : in_paint_layer_contents_(false),
15 animation_host_(std::move(animation_host)) { 18 animation_host_(std::move(animation_host)),
19 layer_tree_host_(layer_tree_host) {
16 DCHECK(animation_host_); 20 DCHECK(animation_host_);
21 DCHECK(layer_tree_host_);
22 animation_host_->SetMutatorHostClient(this);
17 } 23 }
18 24
19 LayerTree::~LayerTree() {} 25 LayerTree::~LayerTree() {
26 animation_host_->SetMutatorHostClient(nullptr);
27 }
20 28
21 void LayerTree::RegisterLayer(Layer* layer) { 29 void LayerTree::RegisterLayer(Layer* layer) {
22 DCHECK(!LayerById(layer->id())); 30 DCHECK(!LayerById(layer->id()));
23 DCHECK(!in_paint_layer_contents_); 31 DCHECK(!in_paint_layer_contents_);
24 layer_id_map_[layer->id()] = layer; 32 layer_id_map_[layer->id()] = layer;
25 if (layer->element_id()) { 33 if (layer->element_id()) {
26 animation_host_->RegisterElement(layer->element_id(), 34 animation_host_->RegisterElement(layer->element_id(),
27 ElementListType::ACTIVE); 35 ElementListType::ACTIVE);
28 } 36 }
29 } 37 }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 proto->set_in_paint_layer_contents(in_paint_layer_contents()); 87 proto->set_in_paint_layer_contents(in_paint_layer_contents());
80 } 88 }
81 89
82 void LayerTree::FromProtobuf(const proto::LayerTree& proto) { 90 void LayerTree::FromProtobuf(const proto::LayerTree& proto) {
83 for (auto layer_id : proto.layers_that_should_push_properties()) { 91 for (auto layer_id : proto.layers_that_should_push_properties()) {
84 AddLayerShouldPushProperties(layer_id_map_[layer_id]); 92 AddLayerShouldPushProperties(layer_id_map_[layer_id]);
85 } 93 }
86 in_paint_layer_contents_ = proto.in_paint_layer_contents(); 94 in_paint_layer_contents_ = proto.in_paint_layer_contents();
87 } 95 }
88 96
97 Layer* LayerTree::LayerByElementId(ElementId element_id) const {
98 ElementLayersMap::const_iterator iter = element_layers_map_.find(element_id);
99 return iter != element_layers_map_.end() ? iter->second : nullptr;
100 }
101
102 void LayerTree::RegisterElement(ElementId element_id,
103 ElementListType list_type,
104 Layer* layer) {
105 if (layer->element_id()) {
106 element_layers_map_[layer->element_id()] = layer;
107 }
108
109 animation_host_->RegisterElement(element_id, list_type);
110 }
111
112 void LayerTree::UnregisterElement(ElementId element_id,
113 ElementListType list_type,
114 Layer* layer) {
115 animation_host_->UnregisterElement(element_id, list_type);
116
117 if (layer->element_id()) {
118 element_layers_map_.erase(layer->element_id());
119 }
120 }
121
122 static void SetElementIdForTesting(Layer* layer) {
123 layer->SetElementId(LayerIdToElementIdForTesting(layer->id()));
124 }
125
126 void LayerTree::SetElementIdsForTesting() {
127 LayerTreeHostCommon::CallFunctionForEveryLayer(this, SetElementIdForTesting);
128 }
129
130 bool LayerTree::IsElementInList(ElementId element_id,
131 ElementListType list_type) const {
132 return list_type == ElementListType::ACTIVE && LayerByElementId(element_id);
133 }
134
135 void LayerTree::SetMutatorsNeedCommit() {
136 layer_tree_host_->SetNeedsCommit();
137 }
138
139 void LayerTree::SetMutatorsNeedRebuildPropertyTrees() {
140 layer_tree_host_->property_trees()->needs_rebuild = true;
141 }
142
143 void LayerTree::SetElementFilterMutated(ElementId element_id,
144 ElementListType list_type,
145 const FilterOperations& filters) {
146 Layer* layer = LayerByElementId(element_id);
147 DCHECK(layer);
148 layer->OnFilterAnimated(filters);
149 }
150
151 void LayerTree::SetElementOpacityMutated(ElementId element_id,
152 ElementListType list_type,
153 float opacity) {
154 Layer* layer = LayerByElementId(element_id);
155 DCHECK(layer);
156 layer->OnOpacityAnimated(opacity);
157 }
158
159 void LayerTree::SetElementTransformMutated(ElementId element_id,
160 ElementListType list_type,
161 const gfx::Transform& transform) {
162 Layer* layer = LayerByElementId(element_id);
163 DCHECK(layer);
164 layer->OnTransformAnimated(transform);
165 }
166
167 void LayerTree::SetElementScrollOffsetMutated(
168 ElementId element_id,
169 ElementListType list_type,
170 const gfx::ScrollOffset& scroll_offset) {
171 Layer* layer = LayerByElementId(element_id);
172 DCHECK(layer);
173 layer->OnScrollOffsetAnimated(scroll_offset);
174 }
175
176 void LayerTree::ElementTransformIsAnimatingChanged(
177 ElementId element_id,
178 ElementListType list_type,
179 AnimationChangeType change_type,
180 bool is_animating) {
181 Layer* layer = LayerByElementId(element_id);
182 if (layer) {
183 switch (change_type) {
184 case AnimationChangeType::POTENTIAL:
185 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating);
186 break;
187 case AnimationChangeType::RUNNING:
188 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating);
189 break;
190 case AnimationChangeType::BOTH:
191 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating);
192 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating);
193 break;
194 }
195 }
196 }
197
198 void LayerTree::ElementOpacityIsAnimatingChanged(
199 ElementId element_id,
200 ElementListType list_type,
201 AnimationChangeType change_type,
202 bool is_animating) {
203 Layer* layer = LayerByElementId(element_id);
204 if (layer) {
205 switch (change_type) {
206 case AnimationChangeType::POTENTIAL:
207 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating);
208 break;
209 case AnimationChangeType::RUNNING:
210 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating);
211 break;
212 case AnimationChangeType::BOTH:
213 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating);
214 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating);
215 break;
216 }
217 }
218 }
219
220 void LayerTree::ElementFilterIsAnimatingChanged(ElementId element_id,
221 ElementListType list_type,
222 AnimationChangeType change_type,
223 bool is_animating) {
224 Layer* layer = LayerByElementId(element_id);
225 if (layer) {
226 switch (change_type) {
227 case AnimationChangeType::POTENTIAL:
228 layer->OnFilterIsPotentiallyAnimatingChanged(is_animating);
229 break;
230 case AnimationChangeType::RUNNING:
231 layer->OnFilterIsCurrentlyAnimatingChanged(is_animating);
232 break;
233 case AnimationChangeType::BOTH:
234 layer->OnFilterIsPotentiallyAnimatingChanged(is_animating);
235 layer->OnFilterIsCurrentlyAnimatingChanged(is_animating);
236 break;
237 }
238 }
239 }
240
241 gfx::ScrollOffset LayerTree::GetScrollOffsetForAnimation(
242 ElementId element_id) const {
243 Layer* layer = LayerByElementId(element_id);
244 DCHECK(layer);
245 return layer->ScrollOffsetForAnimation();
246 }
247
248 LayerListIterator<Layer> LayerTree::begin() const {
249 return LayerListIterator<Layer>(layer_tree_host_->root_layer());
250 }
251
252 LayerListIterator<Layer> LayerTree::end() const {
253 return LayerListIterator<Layer>(nullptr);
254 }
255
256 LayerListReverseIterator<Layer> LayerTree::rbegin() {
257 return LayerListReverseIterator<Layer>(layer_tree_host_->root_layer());
258 }
259
260 LayerListReverseIterator<Layer> LayerTree::rend() {
261 return LayerListReverseIterator<Layer>(nullptr);
262 }
263
264 void LayerTree::SetNeedsDisplayOnAllLayers() {
265 for (auto* layer : *this)
266 layer->SetNeedsDisplay();
267 }
268
89 } // namespace cc 269 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree.h ('k') | cc/trees/layer_tree_host.h » ('j') | cc/trees/layer_tree_host.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698