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

Side by Side Diff: cc/trees/occlusion_tracker.h

Issue 202523002: cc: Replace Region with SimpleEnclosedRegion for occlusion tracking (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: simpleregion: . Created 6 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 | Annotate | Revision Log
OLDNEW
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 #ifndef CC_TREES_OCCLUSION_TRACKER_H_ 5 #ifndef CC_TREES_OCCLUSION_TRACKER_H_
6 #define CC_TREES_OCCLUSION_TRACKER_H_ 6 #define CC_TREES_OCCLUSION_TRACKER_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
11 #include "cc/base/cc_export.h" 11 #include "cc/base/cc_export.h"
12 #include "cc/base/region.h" 12 #include "cc/base/simple_enclosed_region.h"
13 #include "cc/layers/layer_iterator.h" 13 #include "cc/layers/layer_iterator.h"
14 #include "ui/gfx/rect.h" 14 #include "ui/gfx/rect.h"
15 15
16 namespace cc { 16 namespace cc {
17 class LayerImpl; 17 class LayerImpl;
18 class Region;
18 class RenderSurfaceImpl; 19 class RenderSurfaceImpl;
19 class Layer; 20 class Layer;
20 class RenderSurface; 21 class RenderSurface;
21 22
22 // This class is used to track occlusion of layers while traversing them in a 23 // This class is used to track occlusion of layers while traversing them in a
23 // front-to-back order. As each layer is visited, one of the methods in this 24 // front-to-back order. As each layer is visited, one of the methods in this
24 // class is called to notify it about the current target surface. Then, 25 // class is called to notify it about the current target surface. Then,
25 // occlusion in the content space of the current layer may be queried, via 26 // occlusion in the content space of the current layer may be queried, via
26 // methods such as Occluded() and UnoccludedContentRect(). If the current layer 27 // methods such as Occluded() and UnoccludedContentRect(). If the current layer
27 // owns a RenderSurfaceImpl, then occlusion on that RenderSurfaceImpl may also 28 // owns a RenderSurfaceImpl, then occlusion on that RenderSurfaceImpl may also
(...skipping 29 matching lines...) Expand all
57 const gfx::Transform& draw_transform) const; 58 const gfx::Transform& draw_transform) const;
58 59
59 // Gives an unoccluded sub-rect of |content_rect| in the content space of the 60 // Gives an unoccluded sub-rect of |content_rect| in the content space of the
60 // render_target owned by the layer. Used when considering occlusion for a 61 // render_target owned by the layer. Used when considering occlusion for a
61 // contributing surface that is rendering into another target. 62 // contributing surface that is rendering into another target.
62 gfx::Rect UnoccludedContributingSurfaceContentRect( 63 gfx::Rect UnoccludedContributingSurfaceContentRect(
63 const gfx::Rect& content_rect, 64 const gfx::Rect& content_rect,
64 const gfx::Transform& draw_transform) const; 65 const gfx::Transform& draw_transform) const;
65 66
66 // Gives the region of the screen that is not occluded by something opaque. 67 // Gives the region of the screen that is not occluded by something opaque.
67 Region ComputeVisibleRegionInScreen() const { 68 Region ComputeVisibleRegionInScreen() const;
68 DCHECK(!stack_.back().target->parent());
69 return SubtractRegions(screen_space_clip_rect_,
70 stack_.back().occlusion_from_inside_target);
71 }
72 69
73 void set_minimum_tracking_size(const gfx::Size& size) { 70 void set_minimum_tracking_size(const gfx::Size& size) {
74 minimum_tracking_size_ = size; 71 minimum_tracking_size_ = size;
75 } 72 }
76 73
77 // The following is used for visualization purposes. 74 // The following is used for visualization purposes.
78 void set_occluding_screen_space_rects_container( 75 void set_occluding_screen_space_rects_container(
79 std::vector<gfx::Rect>* rects) { 76 std::vector<gfx::Rect>* rects) {
80 occluding_screen_space_rects_ = rects; 77 occluding_screen_space_rects_ = rects;
81 } 78 }
82 void set_non_occluding_screen_space_rects_container( 79 void set_non_occluding_screen_space_rects_container(
83 std::vector<gfx::Rect>* rects) { 80 std::vector<gfx::Rect>* rects) {
84 non_occluding_screen_space_rects_ = rects; 81 non_occluding_screen_space_rects_ = rects;
85 } 82 }
86 83
87 protected: 84 protected:
88 struct StackObject { 85 struct StackObject {
89 StackObject() : target(0) {} 86 StackObject() : target(0) {}
90 explicit StackObject(const LayerType* target) : target(target) {} 87 explicit StackObject(const LayerType* target) : target(target) {}
91 const LayerType* target; 88 const LayerType* target;
92 Region occlusion_from_outside_target; 89 SimpleEnclosedRegion occlusion_from_outside_target;
93 Region occlusion_from_inside_target; 90 SimpleEnclosedRegion occlusion_from_inside_target;
94 }; 91 };
95 92
96 // The stack holds occluded regions for subtrees in the 93 // The stack holds occluded regions for subtrees in the
97 // RenderSurfaceImpl-Layer tree, so that when we leave a subtree we may apply 94 // RenderSurfaceImpl-Layer tree, so that when we leave a subtree we may apply
98 // a mask to it, but not to the parts outside the subtree. 95 // a mask to it, but not to the parts outside the subtree.
99 // - The first time we see a new subtree under a target, we add that target to 96 // - The first time we see a new subtree under a target, we add that target to
100 // the top of the stack. This can happen as a layer representing itself, or as 97 // the top of the stack. This can happen as a layer representing itself, or as
101 // a target surface. 98 // a target surface.
102 // - When we visit a target surface, we apply its mask to its subtree, which 99 // - When we visit a target surface, we apply its mask to its subtree, which
103 // is at the top of the stack. 100 // is at the top of the stack.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 }; 137 };
141 138
142 #if !defined(COMPILER_MSVC) 139 #if !defined(COMPILER_MSVC)
143 extern template class OcclusionTracker<Layer>; 140 extern template class OcclusionTracker<Layer>;
144 extern template class OcclusionTracker<LayerImpl>; 141 extern template class OcclusionTracker<LayerImpl>;
145 #endif 142 #endif
146 143
147 } // namespace cc 144 } // namespace cc
148 145
149 #endif // CC_TREES_OCCLUSION_TRACKER_H_ 146 #endif // CC_TREES_OCCLUSION_TRACKER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698