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 #ifndef CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ | 5 #ifndef CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ |
6 #define CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ | 6 #define CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ |
7 | 7 |
8 #include "base/containers/stack_container.h" | 8 #include "base/containers/stack_container.h" |
9 #include "cc/base/cc_export.h" | 9 #include "cc/base/cc_export.h" |
10 #include "cc/resources/picture_layer_tiling_set.h" | 10 #include "cc/resources/picture_layer_tiling_set.h" |
(...skipping 14 matching lines...) Expand all Loading... | |
25 const Tile* Top() const; | 25 const Tile* Top() const; |
26 void Pop(); | 26 void Pop(); |
27 bool IsEmpty() const; | 27 bool IsEmpty() const; |
28 | 28 |
29 private: | 29 private: |
30 // Helper base class for individual region iterators. | 30 // Helper base class for individual region iterators. |
31 class OnePriorityRectIterator { | 31 class OnePriorityRectIterator { |
32 public: | 32 public: |
33 OnePriorityRectIterator(); | 33 OnePriorityRectIterator(); |
34 OnePriorityRectIterator(PictureLayerTiling* tiling, | 34 OnePriorityRectIterator(PictureLayerTiling* tiling, |
35 TilingData* tiling_data); | 35 TilingData* tiling_data, |
36 PictureLayerTiling::PriorityRect priority_rect); | |
36 | 37 |
37 bool done() const { return !tile_; } | 38 bool done() const { return !tile_; } |
38 Tile* operator*() const { return tile_; } | 39 Tile* operator*() const { return tile_; } |
39 | 40 |
40 protected: | 41 protected: |
41 ~OnePriorityRectIterator() = default; | 42 ~OnePriorityRectIterator() = default; |
42 bool TileNeedsRaster(Tile* tile) const { | 43 bool TileNeedsRaster(Tile* tile) const { |
43 return tile->NeedsRaster() && !tiling_->IsTileOccluded(tile); | 44 return tile->NeedsRaster() && !tiling_->IsTileOccluded(tile); |
44 } | 45 } |
45 | 46 |
46 template <typename TilingIteratorType> | 47 template <typename TilingIteratorType> |
47 void AdvanceToNextTile(TilingIteratorType* iterator); | 48 void AdvanceToNextTile(TilingIteratorType* iterator); |
48 template <typename TilingIteratorType> | 49 template <typename TilingIteratorType> |
49 bool GetFirstTileAndCheckIfValid(TilingIteratorType* iterator); | 50 bool GetFirstTileAndCheckIfValid(TilingIteratorType* iterator); |
50 | 51 |
51 Tile* tile_; | 52 Tile* tile_; |
52 PictureLayerTiling* tiling_; | 53 PictureLayerTiling* tiling_; |
54 const PictureLayerTiling* pending_twin_tiling_; | |
53 TilingData* tiling_data_; | 55 TilingData* tiling_data_; |
56 PictureLayerTiling::PriorityRect priority_rect_; | |
54 }; | 57 }; |
55 | 58 |
56 // Iterates over visible rect only, left to right top to bottom order. | 59 // Iterates over visible rect only, left to right top to bottom order. |
57 class VisibleTilingIterator : public OnePriorityRectIterator { | 60 class VisibleTilingIterator : public OnePriorityRectIterator { |
58 public: | 61 public: |
59 VisibleTilingIterator() = default; | 62 VisibleTilingIterator() = default; |
60 VisibleTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data); | 63 VisibleTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data); |
61 | 64 |
62 VisibleTilingIterator& operator++(); | 65 VisibleTilingIterator& operator++(); |
63 | 66 |
(...skipping 16 matching lines...) Expand all Loading... | |
80 // Iterates over skewport only, spiral around the visible rect. | 83 // Iterates over skewport only, spiral around the visible rect. |
81 class SkewportTilingIterator : public OnePriorityRectIterator { | 84 class SkewportTilingIterator : public OnePriorityRectIterator { |
82 public: | 85 public: |
83 SkewportTilingIterator() = default; | 86 SkewportTilingIterator() = default; |
84 SkewportTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data); | 87 SkewportTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data); |
85 | 88 |
86 SkewportTilingIterator& operator++(); | 89 SkewportTilingIterator& operator++(); |
87 | 90 |
88 private: | 91 private: |
89 TilingData::SpiralDifferenceIterator iterator_; | 92 TilingData::SpiralDifferenceIterator iterator_; |
90 gfx::Rect pending_visible_rect_; | |
91 }; | 93 }; |
92 | 94 |
93 // Iterates over soon border only, spiral around the visible rect. | 95 // Iterates over soon border only, spiral around the visible rect. |
94 class SoonBorderTilingIterator : public OnePriorityRectIterator { | 96 class SoonBorderTilingIterator : public OnePriorityRectIterator { |
95 public: | 97 public: |
96 SoonBorderTilingIterator() = default; | 98 SoonBorderTilingIterator() = default; |
97 SoonBorderTilingIterator(PictureLayerTiling* tiling, | 99 SoonBorderTilingIterator(PictureLayerTiling* tiling, |
98 TilingData* tiling_data); | 100 TilingData* tiling_data); |
99 | 101 |
100 SoonBorderTilingIterator& operator++(); | 102 SoonBorderTilingIterator& operator++(); |
101 | 103 |
102 private: | 104 private: |
103 TilingData::SpiralDifferenceIterator iterator_; | 105 TilingData::SpiralDifferenceIterator iterator_; |
104 gfx::Rect pending_visible_rect_; | |
105 }; | 106 }; |
106 | 107 |
107 // Iterates over eventually rect only, spiral around the soon rect. | 108 // Iterates over eventually rect only, spiral around the soon rect. |
108 class EventuallyTilingIterator : public OnePriorityRectIterator { | 109 class EventuallyTilingIterator : public OnePriorityRectIterator { |
109 public: | 110 public: |
110 EventuallyTilingIterator() = default; | 111 EventuallyTilingIterator() = default; |
111 EventuallyTilingIterator(PictureLayerTiling* tiling, | 112 EventuallyTilingIterator(PictureLayerTiling* tiling, |
112 TilingData* tiling_data); | 113 TilingData* tiling_data); |
113 | 114 |
114 EventuallyTilingIterator& operator++(); | 115 EventuallyTilingIterator& operator++(); |
115 | 116 |
116 private: | 117 private: |
117 TilingData::SpiralDifferenceIterator iterator_; | 118 TilingData::SpiralDifferenceIterator iterator_; |
118 gfx::Rect pending_visible_rect_; | |
119 }; | 119 }; |
120 | 120 |
121 // Iterates over all of the above phases in the following order: visible, | 121 // Iterates over all of the above phases in the following order: visible, |
122 // skewport, soon border, eventually. | 122 // skewport, soon border, eventually. |
123 class TilingIterator { | 123 class TilingIterator { |
124 public: | 124 public: |
125 TilingIterator(); | 125 TilingIterator(); |
126 explicit TilingIterator(PictureLayerTiling* tiling, | 126 explicit TilingIterator(PictureLayerTiling* tiling, |
127 TilingData* tiling_data); | 127 TilingData* tiling_data); |
128 ~TilingIterator(); | 128 ~TilingIterator(); |
129 | 129 |
130 bool done() const { return current_tile_ == nullptr; } | 130 bool done() const { return current_tile_ == nullptr; } |
131 const Tile* operator*() const { return current_tile_; } | 131 const Tile* operator*() const { return current_tile_; } |
132 Tile* operator*() { return current_tile_; } | 132 Tile* operator*() { return current_tile_; } |
133 TilePriority::PriorityBin type() const { | 133 TilePriority::PriorityBin type() const { |
134 switch (phase_) { | 134 switch (phase_) { |
135 case VISIBLE_RECT: | 135 case Phase::VISIBLE_RECT: |
136 return TilePriority::NOW; | 136 return TilePriority::NOW; |
137 case PENDING_VISIBLE_RECT: | 137 case Phase::PENDING_VISIBLE_RECT: |
138 case SKEWPORT_RECT: | 138 case Phase::SKEWPORT_RECT: |
139 case SOON_BORDER_RECT: | 139 case Phase::SOON_BORDER_RECT: |
140 return TilePriority::SOON; | 140 return TilePriority::SOON; |
141 case EVENTUALLY_RECT: | 141 case Phase::EVENTUALLY_RECT: |
142 return TilePriority::EVENTUALLY; | 142 return TilePriority::EVENTUALLY; |
143 } | 143 } |
144 NOTREACHED(); | 144 NOTREACHED(); |
145 return TilePriority::EVENTUALLY; | 145 return TilePriority::EVENTUALLY; |
146 } | 146 } |
147 | 147 |
148 TilingIterator& operator++(); | 148 TilingIterator& operator++(); |
149 | 149 |
150 private: | 150 private: |
151 // PENDING VISIBLE RECT refers to the visible rect that will become current | 151 // PENDING VISIBLE RECT refers to the visible rect that will become current |
vmpstr
2015/05/05 18:04:02
Can you move this comment to where the enum is act
USE eero AT chromium.org
2015/05/06 12:05:20
Done.
| |
152 // upon activation (ie, the pending tree's visible rect). Tiles in this | 152 // upon activation (ie, the pending tree's visible rect). Tiles in this |
153 // region that are not part of the current visible rect are all handled | 153 // region that are not part of the current visible rect are all handled |
154 // here. Note that when processing a pending tree, this rect is the same as | 154 // here. Note that when processing a pending tree, this rect is the same as |
155 // the visible rect so no tiles are processed in this case. | 155 // the visible rect so no tiles are processed in this case. |
156 enum Phase { | 156 typedef PictureLayerTiling::PriorityRect Phase; |
vmpstr
2015/05/05 18:04:02
nit: using Phase = PictureLayerTiling::PriorityRec
USE eero AT chromium.org
2015/05/06 12:05:20
I knew that such a statement exists but I could no
| |
157 VISIBLE_RECT, | |
158 PENDING_VISIBLE_RECT, | |
159 SKEWPORT_RECT, | |
160 SOON_BORDER_RECT, | |
161 EVENTUALLY_RECT | |
162 }; | |
163 | 157 |
164 void AdvancePhase(); | 158 void AdvancePhase(); |
165 | 159 |
166 PictureLayerTiling* tiling_; | 160 PictureLayerTiling* tiling_; |
167 TilingData* tiling_data_; | 161 TilingData* tiling_data_; |
168 | 162 |
169 Phase phase_; | 163 Phase phase_; |
170 | 164 |
171 Tile* current_tile_; | 165 Tile* current_tile_; |
172 VisibleTilingIterator visible_iterator_; | 166 VisibleTilingIterator visible_iterator_; |
(...skipping 24 matching lines...) Expand all Loading... | |
197 | 191 |
198 // The max number of stages is 6: 1 low res, 3 high res, and 2 active non | 192 // The max number of stages is 6: 1 low res, 3 high res, and 2 active non |
199 // ideal pending high res. | 193 // ideal pending high res. |
200 base::StackVector<IterationStage, 6> stages_; | 194 base::StackVector<IterationStage, 6> stages_; |
201 TilingIterator iterators_[NUM_ITERATORS]; | 195 TilingIterator iterators_[NUM_ITERATORS]; |
202 }; | 196 }; |
203 | 197 |
204 } // namespace cc | 198 } // namespace cc |
205 | 199 |
206 #endif // CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ | 200 #endif // CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ |
OLD | NEW |