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

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

Issue 935333002: Update from https://crrev.com/316786 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « cc/trees/occlusion.cc ('k') | cc/trees/occlusion_tracker.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
(...skipping 22 matching lines...) Expand all
33 template <typename LayerType> 33 template <typename LayerType>
34 class CC_EXPORT OcclusionTracker { 34 class CC_EXPORT OcclusionTracker {
35 public: 35 public:
36 explicit OcclusionTracker(const gfx::Rect& screen_space_clip_rect); 36 explicit OcclusionTracker(const gfx::Rect& screen_space_clip_rect);
37 ~OcclusionTracker(); 37 ~OcclusionTracker();
38 38
39 // Return an occlusion that retains the current state of the tracker 39 // Return an occlusion that retains the current state of the tracker
40 // and can be used outside of a layer walk to check occlusion. 40 // and can be used outside of a layer walk to check occlusion.
41 Occlusion GetCurrentOcclusionForLayer( 41 Occlusion GetCurrentOcclusionForLayer(
42 const gfx::Transform& draw_transform) const; 42 const gfx::Transform& draw_transform) const;
43 Occlusion GetCurrentOcclusionForContributingSurface(
44 const gfx::Transform& draw_transform) const;
43 45
44 // Called at the beginning of each step in the LayerIterator's front-to-back 46 // Called at the beginning of each step in the LayerIterator's front-to-back
45 // traversal. 47 // traversal.
46 void EnterLayer(const LayerIteratorPosition<LayerType>& layer_iterator); 48 void EnterLayer(const LayerIteratorPosition<LayerType>& layer_iterator);
47 // Called at the end of each step in the LayerIterator's front-to-back 49 // Called at the end of each step in the LayerIterator's front-to-back
48 // traversal. 50 // traversal.
49 void LeaveLayer(const LayerIteratorPosition<LayerType>& layer_iterator); 51 void LeaveLayer(const LayerIteratorPosition<LayerType>& layer_iterator);
50 52
51 // Gives an unoccluded sub-rect of |content_rect| in the content space of the
52 // render_target owned by the layer. Used when considering occlusion for a
53 // contributing surface that is rendering into another target.
54 gfx::Rect UnoccludedContributingSurfaceContentRect(
55 const gfx::Rect& content_rect,
56 const gfx::Transform& draw_transform) const;
57
58 // Gives the region of the screen that is not occluded by something opaque. 53 // Gives the region of the screen that is not occluded by something opaque.
59 Region ComputeVisibleRegionInScreen() const; 54 Region ComputeVisibleRegionInScreen() const;
60 55
61 void set_minimum_tracking_size(const gfx::Size& size) { 56 void set_minimum_tracking_size(const gfx::Size& size) {
62 minimum_tracking_size_ = size; 57 minimum_tracking_size_ = size;
63 } 58 }
64 59
65 // The following is used for visualization purposes.
66 void set_occluding_screen_space_rects_container(
67 std::vector<gfx::Rect>* rects) {
68 occluding_screen_space_rects_ = rects;
69 }
70 void set_non_occluding_screen_space_rects_container(
71 std::vector<gfx::Rect>* rects) {
72 non_occluding_screen_space_rects_ = rects;
73 }
74
75 protected: 60 protected:
76 struct StackObject { 61 struct StackObject {
77 StackObject() : target(0) {} 62 StackObject() : target(0) {}
78 explicit StackObject(const LayerType* target) : target(target) {} 63 explicit StackObject(const LayerType* target) : target(target) {}
79 const LayerType* target; 64 const LayerType* target;
80 SimpleEnclosedRegion occlusion_from_outside_target; 65 SimpleEnclosedRegion occlusion_from_outside_target;
81 SimpleEnclosedRegion occlusion_from_inside_target; 66 SimpleEnclosedRegion occlusion_from_inside_target;
82 }; 67 };
83 68
84 // The stack holds occluded regions for subtrees in the 69 // The stack holds occluded regions for subtrees in the
(...skipping 28 matching lines...) Expand all
113 // one. We then perform any operations required for merging results from the 98 // one. We then perform any operations required for merging results from the
114 // child subtree into its parent. 99 // child subtree into its parent.
115 void LeaveToRenderTarget(const LayerType* new_target); 100 void LeaveToRenderTarget(const LayerType* new_target);
116 101
117 // Add the layer's occlusion to the tracked state. 102 // Add the layer's occlusion to the tracked state.
118 void MarkOccludedBehindLayer(const LayerType* layer); 103 void MarkOccludedBehindLayer(const LayerType* layer);
119 104
120 gfx::Rect screen_space_clip_rect_; 105 gfx::Rect screen_space_clip_rect_;
121 gfx::Size minimum_tracking_size_; 106 gfx::Size minimum_tracking_size_;
122 107
123 // This is used for visualizing the occlusion tracking process.
124 std::vector<gfx::Rect>* occluding_screen_space_rects_;
125 std::vector<gfx::Rect>* non_occluding_screen_space_rects_;
126
127 DISALLOW_COPY_AND_ASSIGN(OcclusionTracker); 108 DISALLOW_COPY_AND_ASSIGN(OcclusionTracker);
128 }; 109 };
129 110
130 #if !defined(COMPILER_MSVC) 111 #if !defined(COMPILER_MSVC)
131 extern template class OcclusionTracker<Layer>; 112 extern template class OcclusionTracker<Layer>;
132 extern template class OcclusionTracker<LayerImpl>; 113 extern template class OcclusionTracker<LayerImpl>;
133 #endif 114 #endif
134 115
135 } // namespace cc 116 } // namespace cc
136 117
137 #endif // CC_TREES_OCCLUSION_TRACKER_H_ 118 #endif // CC_TREES_OCCLUSION_TRACKER_H_
OLDNEW
« no previous file with comments | « cc/trees/occlusion.cc ('k') | cc/trees/occlusion_tracker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698