OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/trees/draw_property_utils.h" | 5 #include "cc/trees/draw_property_utils.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "cc/base/math_util.h" | 9 #include "cc/base/math_util.h" |
10 #include "cc/layers/layer.h" | 10 #include "cc/layers/layer.h" |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 } | 150 } |
151 | 151 |
152 static bool IsInvisibleDueToTransform(Layer* layer, const TransformTree& tree) { | 152 static bool IsInvisibleDueToTransform(Layer* layer, const TransformTree& tree) { |
153 return HasSingularTransform(layer, tree) || IsBackFaceInvisible(layer, tree); | 153 return HasSingularTransform(layer, tree) || IsBackFaceInvisible(layer, tree); |
154 } | 154 } |
155 | 155 |
156 void FindLayersThatNeedVisibleRects(Layer* layer, | 156 void FindLayersThatNeedVisibleRects(Layer* layer, |
157 const TransformTree& tree, | 157 const TransformTree& tree, |
158 bool subtree_is_visible_from_ancestor, | 158 bool subtree_is_visible_from_ancestor, |
159 std::vector<Layer*>* layers_to_update) { | 159 std::vector<Layer*>* layers_to_update) { |
160 const bool subtree_is_invisble = | 160 const bool layer_is_invisible = |
161 layer->opacity() == 0.0f || | 161 (!layer->opacity() && !layer->OpacityIsAnimating() && |
| 162 !layer->OpacityCanAnimateOnImplThread()); |
| 163 const bool layer_is_backfacing = |
162 (layer->has_render_surface() && !layer->double_sided() && | 164 (layer->has_render_surface() && !layer->double_sided() && |
163 IsSurfaceBackFaceExposed(layer, tree)); | 165 IsSurfaceBackFaceExposed(layer, tree)); |
164 | 166 |
| 167 const bool subtree_is_invisble = layer_is_invisible || layer_is_backfacing; |
165 if (subtree_is_invisble) | 168 if (subtree_is_invisble) |
166 return; | 169 return; |
167 | 170 |
168 bool layer_is_drawn = | 171 bool layer_is_drawn = |
169 layer->HasCopyRequest() || | 172 layer->HasCopyRequest() || |
170 (subtree_is_visible_from_ancestor && !layer->hide_layer_and_subtree()); | 173 (subtree_is_visible_from_ancestor && !layer->hide_layer_and_subtree()); |
171 | 174 |
172 if (layer_is_drawn && layer->DrawsContent()) { | 175 if (layer_is_drawn && layer->DrawsContent()) { |
173 const bool visible = !IsInvisibleDueToTransform(layer, tree); | 176 const bool visible = !IsInvisibleDueToTransform(layer, tree); |
174 if (visible) | 177 if (visible) |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 } | 258 } |
256 | 259 |
257 void ComputeVisibleRectsUsingPropertyTrees( | 260 void ComputeVisibleRectsUsingPropertyTrees( |
258 Layer* root_layer, | 261 Layer* root_layer, |
259 const Layer* page_scale_layer, | 262 const Layer* page_scale_layer, |
260 float page_scale_factor, | 263 float page_scale_factor, |
261 float device_scale_factor, | 264 float device_scale_factor, |
262 const gfx::Rect& viewport, | 265 const gfx::Rect& viewport, |
263 const gfx::Transform& device_transform, | 266 const gfx::Transform& device_transform, |
264 TransformTree* transform_tree, | 267 TransformTree* transform_tree, |
265 ClipTree* clip_tree) { | 268 ClipTree* clip_tree, |
| 269 OpacityTree* opacity_tree) { |
266 PropertyTreeBuilder::BuildPropertyTrees( | 270 PropertyTreeBuilder::BuildPropertyTrees( |
267 root_layer, page_scale_layer, page_scale_factor, device_scale_factor, | 271 root_layer, page_scale_layer, page_scale_factor, device_scale_factor, |
268 viewport, device_transform, transform_tree, clip_tree); | 272 viewport, device_transform, transform_tree, clip_tree, opacity_tree); |
269 ComputeTransforms(transform_tree); | 273 ComputeTransforms(transform_tree); |
270 ComputeClips(clip_tree, *transform_tree); | 274 ComputeClips(clip_tree, *transform_tree); |
271 | 275 |
272 std::vector<Layer*> layers_to_update; | 276 std::vector<Layer*> layers_to_update; |
273 const bool subtree_is_visible_from_ancestor = true; | 277 const bool subtree_is_visible_from_ancestor = true; |
274 FindLayersThatNeedVisibleRects(root_layer, *transform_tree, | 278 FindLayersThatNeedVisibleRects(root_layer, *transform_tree, |
275 subtree_is_visible_from_ancestor, | 279 subtree_is_visible_from_ancestor, |
276 &layers_to_update); | 280 &layers_to_update); |
277 CalculateVisibleRects(layers_to_update, *clip_tree, *transform_tree); | 281 CalculateVisibleRects(layers_to_update, *clip_tree, *transform_tree); |
278 } | 282 } |
279 | 283 |
280 } // namespace cc | 284 } // namespace cc |
OLD | NEW |