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

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: Fix call site in cc_perftest. 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() {
25 animation_host_->SetMutatorHostClient(nullptr);
26 }
20 27
21 void LayerTree::RegisterLayer(Layer* layer) { 28 void LayerTree::RegisterLayer(Layer* layer) {
22 DCHECK(!LayerById(layer->id())); 29 DCHECK(!LayerById(layer->id()));
23 DCHECK(!in_paint_layer_contents_); 30 DCHECK(!in_paint_layer_contents_);
24 layer_id_map_[layer->id()] = layer; 31 layer_id_map_[layer->id()] = layer;
25 if (layer->element_id()) { 32 if (layer->element_id()) {
26 animation_host_->RegisterElement(layer->element_id(), 33 animation_host_->RegisterElement(layer->element_id(),
27 ElementListType::ACTIVE); 34 ElementListType::ACTIVE);
28 } 35 }
29 } 36 }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 proto->set_in_paint_layer_contents(in_paint_layer_contents()); 86 proto->set_in_paint_layer_contents(in_paint_layer_contents());
80 } 87 }
81 88
82 void LayerTree::FromProtobuf(const proto::LayerTree& proto) { 89 void LayerTree::FromProtobuf(const proto::LayerTree& proto) {
83 for (auto layer_id : proto.layers_that_should_push_properties()) { 90 for (auto layer_id : proto.layers_that_should_push_properties()) {
84 AddLayerShouldPushProperties(layer_id_map_[layer_id]); 91 AddLayerShouldPushProperties(layer_id_map_[layer_id]);
85 } 92 }
86 in_paint_layer_contents_ = proto.in_paint_layer_contents(); 93 in_paint_layer_contents_ = proto.in_paint_layer_contents();
87 } 94 }
88 95
96 Layer* LayerTree::LayerByElementId(ElementId element_id) const {
97 ElementLayersMap::const_iterator iter = element_layers_map_.find(element_id);
98 return iter != element_layers_map_.end() ? iter->second : nullptr;
99 }
100
101 void LayerTree::AddToElementMap(Layer* layer) {
102 if (!layer->element_id())
103 return;
104
105 element_layers_map_[layer->element_id()] = layer;
106 }
107
108 void LayerTree::RemoveFromElementMap(Layer* layer) {
109 if (!layer->element_id())
110 return;
111
112 element_layers_map_.erase(layer->element_id());
113 }
114
115 bool LayerTree::IsElementInList(ElementId element_id,
116 ElementListType list_type) const {
117 return list_type == ElementListType::ACTIVE && LayerByElementId(element_id);
118 }
119
120 void LayerTree::SetMutatorsNeedCommit() {
121 layer_tree_host_->SetNeedsCommit();
122 }
123
124 void LayerTree::SetMutatorsNeedRebuildPropertyTrees() {
125 layer_tree_host_->property_trees()->needs_rebuild = true;
126 }
127
128 void LayerTree::SetElementFilterMutated(ElementId element_id,
129 ElementListType list_type,
130 const FilterOperations& filters) {
131 Layer* layer = LayerByElementId(element_id);
132 DCHECK(layer);
133 layer->OnFilterAnimated(filters);
134 }
135
136 void LayerTree::SetElementOpacityMutated(ElementId element_id,
137 ElementListType list_type,
138 float opacity) {
139 Layer* layer = LayerByElementId(element_id);
140 DCHECK(layer);
141 layer->OnOpacityAnimated(opacity);
142 }
143
144 void LayerTree::SetElementTransformMutated(ElementId element_id,
145 ElementListType list_type,
146 const gfx::Transform& transform) {
147 Layer* layer = LayerByElementId(element_id);
148 DCHECK(layer);
149 layer->OnTransformAnimated(transform);
150 }
151
152 void LayerTree::SetElementScrollOffsetMutated(
153 ElementId element_id,
154 ElementListType list_type,
155 const gfx::ScrollOffset& scroll_offset) {
156 Layer* layer = LayerByElementId(element_id);
157 DCHECK(layer);
158 layer->OnScrollOffsetAnimated(scroll_offset);
159 }
160
161 void LayerTree::ElementTransformIsAnimatingChanged(
162 ElementId element_id,
163 ElementListType list_type,
164 AnimationChangeType change_type,
165 bool is_animating) {
166 Layer* layer = LayerByElementId(element_id);
167 if (layer) {
168 switch (change_type) {
169 case AnimationChangeType::POTENTIAL:
170 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating);
171 break;
172 case AnimationChangeType::RUNNING:
173 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating);
174 break;
175 case AnimationChangeType::BOTH:
176 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating);
177 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating);
178 break;
179 }
180 }
181 }
182
183 void LayerTree::ElementOpacityIsAnimatingChanged(
184 ElementId element_id,
185 ElementListType list_type,
186 AnimationChangeType change_type,
187 bool is_animating) {
188 Layer* layer = LayerByElementId(element_id);
189 if (layer) {
190 switch (change_type) {
191 case AnimationChangeType::POTENTIAL:
192 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating);
193 break;
194 case AnimationChangeType::RUNNING:
195 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating);
196 break;
197 case AnimationChangeType::BOTH:
198 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating);
199 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating);
200 break;
201 }
202 }
203 }
204
205 void LayerTree::ElementFilterIsAnimatingChanged(ElementId element_id,
206 ElementListType list_type,
207 AnimationChangeType change_type,
208 bool is_animating) {
209 Layer* layer = LayerByElementId(element_id);
210 if (layer) {
211 switch (change_type) {
212 case AnimationChangeType::POTENTIAL:
213 layer->OnFilterIsPotentiallyAnimatingChanged(is_animating);
214 break;
215 case AnimationChangeType::RUNNING:
216 layer->OnFilterIsCurrentlyAnimatingChanged(is_animating);
217 break;
218 case AnimationChangeType::BOTH:
219 layer->OnFilterIsPotentiallyAnimatingChanged(is_animating);
220 layer->OnFilterIsCurrentlyAnimatingChanged(is_animating);
221 break;
222 }
223 }
224 }
225
226 gfx::ScrollOffset LayerTree::GetScrollOffsetForAnimation(
227 ElementId element_id) const {
228 Layer* layer = LayerByElementId(element_id);
229 DCHECK(layer);
230 return layer->ScrollOffsetForAnimation();
231 }
232
233 LayerListIterator<Layer> LayerTree::begin() const {
234 return LayerListIterator<Layer>(layer_tree_host_->root_layer());
235 }
236
237 LayerListIterator<Layer> LayerTree::end() const {
238 return LayerListIterator<Layer>(nullptr);
239 }
240
241 LayerListReverseIterator<Layer> LayerTree::rbegin() {
242 return LayerListReverseIterator<Layer>(layer_tree_host_->root_layer());
243 }
244
245 LayerListReverseIterator<Layer> LayerTree::rend() {
246 return LayerListReverseIterator<Layer>(nullptr);
247 }
248
89 } // namespace cc 249 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698