| 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 |