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

Side by Side Diff: cc/resources/tiling_set_raster_queue_all.h

Issue 1126813002: cc: Pass priority rect information from iterators to tilings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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
OLDNEW
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
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
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
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_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698