OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/occlusion_tracker.h" | 5 #include "cc/trees/occlusion_tracker.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "cc/base/math_util.h" | 9 #include "cc/base/math_util.h" |
10 #include "cc/base/region.h" | 10 #include "cc/base/region.h" |
11 #include "cc/layers/layer.h" | 11 #include "cc/layers/layer.h" |
12 #include "cc/layers/layer_impl.h" | 12 #include "cc/layers/layer_impl.h" |
13 #include "cc/layers/render_surface.h" | 13 #include "cc/layers/render_surface.h" |
14 #include "cc/layers/render_surface_impl.h" | 14 #include "cc/layers/render_surface_impl.h" |
15 #include "ui/gfx/quad_f.h" | 15 #include "ui/gfx/quad_f.h" |
16 #include "ui/gfx/rect_conversions.h" | 16 #include "ui/gfx/rect_conversions.h" |
17 | 17 |
18 namespace cc { | 18 namespace cc { |
19 | 19 |
20 template <typename LayerType> | 20 template <typename LayerType> |
21 OcclusionTracker<LayerType>::OcclusionTracker( | 21 OcclusionTracker<LayerType>::OcclusionTracker( |
22 const gfx::Rect& screen_space_clip_rect) | 22 const gfx::Rect& screen_space_clip_rect) |
23 : screen_space_clip_rect_(screen_space_clip_rect), | 23 : screen_space_clip_rect_(screen_space_clip_rect), |
24 occluding_screen_space_rects_(NULL), | 24 occluding_screen_space_rects_(nullptr), |
25 non_occluding_screen_space_rects_(NULL) {} | 25 non_occluding_screen_space_rects_(nullptr) { |
| 26 } |
26 | 27 |
27 template <typename LayerType> | 28 template <typename LayerType> |
28 OcclusionTracker<LayerType>::~OcclusionTracker() {} | 29 OcclusionTracker<LayerType>::~OcclusionTracker() {} |
29 | 30 |
30 template <typename LayerType> | 31 template <typename LayerType> |
31 Occlusion OcclusionTracker<LayerType>::GetCurrentOcclusionForLayer( | 32 Occlusion OcclusionTracker<LayerType>::GetCurrentOcclusionForLayer( |
32 const gfx::Transform& draw_transform) const { | 33 const gfx::Transform& draw_transform) const { |
33 DCHECK(!stack_.empty()); | 34 DCHECK(!stack_.empty()); |
34 const StackObject& back = stack_.back(); | 35 const StackObject& back = stack_.back(); |
35 return Occlusion(draw_transform, | 36 return Occlusion(draw_transform, |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 return layer->hide_layer_and_subtree() || | 149 return layer->hide_layer_and_subtree() || |
149 (layer->parent() && LayerIsHidden(layer->parent())); | 150 (layer->parent() && LayerIsHidden(layer->parent())); |
150 } | 151 } |
151 | 152 |
152 template <typename LayerType> | 153 template <typename LayerType> |
153 void OcclusionTracker<LayerType>::EnterRenderTarget( | 154 void OcclusionTracker<LayerType>::EnterRenderTarget( |
154 const LayerType* new_target) { | 155 const LayerType* new_target) { |
155 if (!stack_.empty() && stack_.back().target == new_target) | 156 if (!stack_.empty() && stack_.back().target == new_target) |
156 return; | 157 return; |
157 | 158 |
158 const LayerType* old_target = NULL; | 159 const LayerType* old_target = nullptr; |
159 const typename LayerType::RenderSurfaceType* old_occlusion_immune_ancestor = | 160 const typename LayerType::RenderSurfaceType* old_occlusion_immune_ancestor = |
160 NULL; | 161 nullptr; |
161 if (!stack_.empty()) { | 162 if (!stack_.empty()) { |
162 old_target = stack_.back().target; | 163 old_target = stack_.back().target; |
163 old_occlusion_immune_ancestor = | 164 old_occlusion_immune_ancestor = |
164 old_target->render_surface()->nearest_occlusion_immune_ancestor(); | 165 old_target->render_surface()->nearest_occlusion_immune_ancestor(); |
165 } | 166 } |
166 const typename LayerType::RenderSurfaceType* new_occlusion_immune_ancestor = | 167 const typename LayerType::RenderSurfaceType* new_occlusion_immune_ancestor = |
167 new_target->render_surface()->nearest_occlusion_immune_ancestor(); | 168 new_target->render_surface()->nearest_occlusion_immune_ancestor(); |
168 | 169 |
169 stack_.push_back(StackObject(new_target)); | 170 stack_.push_back(StackObject(new_target)); |
170 | 171 |
(...skipping 10 matching lines...) Expand all Loading... |
181 bool have_transform_from_screen_to_new_target = false; | 182 bool have_transform_from_screen_to_new_target = false; |
182 gfx::Transform inverse_new_target_screen_space_transform( | 183 gfx::Transform inverse_new_target_screen_space_transform( |
183 // Note carefully, not used if screen space transform is uninvertible. | 184 // Note carefully, not used if screen space transform is uninvertible. |
184 gfx::Transform::kSkipInitialization); | 185 gfx::Transform::kSkipInitialization); |
185 if (SurfaceTransformsToScreenKnown(new_target->render_surface())) { | 186 if (SurfaceTransformsToScreenKnown(new_target->render_surface())) { |
186 have_transform_from_screen_to_new_target = | 187 have_transform_from_screen_to_new_target = |
187 new_target->render_surface()->screen_space_transform().GetInverse( | 188 new_target->render_surface()->screen_space_transform().GetInverse( |
188 &inverse_new_target_screen_space_transform); | 189 &inverse_new_target_screen_space_transform); |
189 } | 190 } |
190 | 191 |
191 bool entering_root_target = new_target->parent() == NULL; | 192 bool entering_root_target = new_target->parent() == nullptr; |
192 | 193 |
193 bool copy_outside_occlusion_forward = | 194 bool copy_outside_occlusion_forward = |
194 stack_.size() > 1 && | 195 stack_.size() > 1 && |
195 !entering_unoccluded_subtree && | 196 !entering_unoccluded_subtree && |
196 have_transform_from_screen_to_new_target && | 197 have_transform_from_screen_to_new_target && |
197 !entering_root_target; | 198 !entering_root_target; |
198 if (!copy_outside_occlusion_forward) | 199 if (!copy_outside_occlusion_forward) |
199 return; | 200 return; |
200 | 201 |
201 int last_index = stack_.size() - 1; | 202 int last_index = stack_.size() - 1; |
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
548 for (size_t i = 0; i < occluded.GetRegionComplexity(); ++i) | 549 for (size_t i = 0; i < occluded.GetRegionComplexity(); ++i) |
549 visible_region.Subtract(occluded.GetRect(i)); | 550 visible_region.Subtract(occluded.GetRect(i)); |
550 return visible_region; | 551 return visible_region; |
551 } | 552 } |
552 | 553 |
553 // Instantiate (and export) templates here for the linker. | 554 // Instantiate (and export) templates here for the linker. |
554 template class OcclusionTracker<Layer>; | 555 template class OcclusionTracker<Layer>; |
555 template class OcclusionTracker<LayerImpl>; | 556 template class OcclusionTracker<LayerImpl>; |
556 | 557 |
557 } // namespace cc | 558 } // namespace cc |
OLD | NEW |