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

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

Issue 1108773003: Revert of cc: Remove tile sharing from tilings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 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/resources/tiling_set_eviction_queue.cc ('k') | cc/resources/tiling_set_raster_queue_all.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 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"
9 #include "cc/base/cc_export.h" 8 #include "cc/base/cc_export.h"
10 #include "cc/resources/picture_layer_tiling_set.h" 9 #include "cc/resources/picture_layer_tiling_set.h"
11 #include "cc/resources/tile.h" 10 #include "cc/resources/tile.h"
12 #include "cc/resources/tile_priority.h" 11 #include "cc/resources/tile_priority.h"
13 12
14 namespace cc { 13 namespace cc {
15 14
16 // This queue returns all tiles required to be rasterized from HIGH_RESOLUTION 15 // This queue returns all tiles required to be rasterized from HIGH_RESOLUTION
17 // and LOW_RESOLUTION tilings. 16 // and LOW_RESOLUTION tilings.
18 class CC_EXPORT TilingSetRasterQueueAll { 17 class CC_EXPORT TilingSetRasterQueueAll {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 public: 57 public:
59 VisibleTilingIterator() = default; 58 VisibleTilingIterator() = default;
60 VisibleTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data); 59 VisibleTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data);
61 60
62 VisibleTilingIterator& operator++(); 61 VisibleTilingIterator& operator++();
63 62
64 private: 63 private:
65 TilingData::Iterator iterator_; 64 TilingData::Iterator iterator_;
66 }; 65 };
67 66
68 class PendingVisibleTilingIterator : public OnePriorityRectIterator {
69 public:
70 PendingVisibleTilingIterator() = default;
71 PendingVisibleTilingIterator(PictureLayerTiling* tiling,
72 TilingData* tiling_data);
73
74 PendingVisibleTilingIterator& operator++();
75
76 private:
77 TilingData::DifferenceIterator iterator_;
78 };
79
80 // Iterates over skewport only, spiral around the visible rect. 67 // Iterates over skewport only, spiral around the visible rect.
81 class SkewportTilingIterator : public OnePriorityRectIterator { 68 class SkewportTilingIterator : public OnePriorityRectIterator {
82 public: 69 public:
83 SkewportTilingIterator() = default; 70 SkewportTilingIterator() = default;
84 SkewportTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data); 71 SkewportTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data);
85 72
86 SkewportTilingIterator& operator++(); 73 SkewportTilingIterator& operator++();
87 74
88 private: 75 private:
89 TilingData::SpiralDifferenceIterator iterator_; 76 TilingData::SpiralDifferenceIterator iterator_;
90 gfx::Rect pending_visible_rect_;
91 }; 77 };
92 78
93 // Iterates over soon border only, spiral around the visible rect. 79 // Iterates over soon border only, spiral around the visible rect.
94 class SoonBorderTilingIterator : public OnePriorityRectIterator { 80 class SoonBorderTilingIterator : public OnePriorityRectIterator {
95 public: 81 public:
96 SoonBorderTilingIterator() = default; 82 SoonBorderTilingIterator() = default;
97 SoonBorderTilingIterator(PictureLayerTiling* tiling, 83 SoonBorderTilingIterator(PictureLayerTiling* tiling,
98 TilingData* tiling_data); 84 TilingData* tiling_data);
99 85
100 SoonBorderTilingIterator& operator++(); 86 SoonBorderTilingIterator& operator++();
101 87
102 private: 88 private:
103 TilingData::SpiralDifferenceIterator iterator_; 89 TilingData::SpiralDifferenceIterator iterator_;
104 gfx::Rect pending_visible_rect_;
105 }; 90 };
106 91
107 // Iterates over eventually rect only, spiral around the soon rect. 92 // Iterates over eventually rect only, spiral around the soon rect.
108 class EventuallyTilingIterator : public OnePriorityRectIterator { 93 class EventuallyTilingIterator : public OnePriorityRectIterator {
109 public: 94 public:
110 EventuallyTilingIterator() = default; 95 EventuallyTilingIterator() = default;
111 EventuallyTilingIterator(PictureLayerTiling* tiling, 96 EventuallyTilingIterator(PictureLayerTiling* tiling,
112 TilingData* tiling_data); 97 TilingData* tiling_data);
113 98
114 EventuallyTilingIterator& operator++(); 99 EventuallyTilingIterator& operator++();
115 100
116 private: 101 private:
117 TilingData::SpiralDifferenceIterator iterator_; 102 TilingData::SpiralDifferenceIterator iterator_;
118 gfx::Rect pending_visible_rect_;
119 }; 103 };
120 104
121 // Iterates over all of the above phases in the following order: visible, 105 // Iterates over all of the above phases in the following order: visible,
122 // skewport, soon border, eventually. 106 // skewport, soon border, eventually.
123 class TilingIterator { 107 class TilingIterator {
124 public: 108 public:
125 TilingIterator(); 109 TilingIterator();
126 explicit TilingIterator(PictureLayerTiling* tiling, 110 explicit TilingIterator(PictureLayerTiling* tiling,
127 TilingData* tiling_data); 111 TilingData* tiling_data);
128 ~TilingIterator(); 112 ~TilingIterator() = default;
129 113
130 bool done() const { return current_tile_ == nullptr; } 114 bool done() const { return current_tile_ == nullptr; }
131 const Tile* operator*() const { return current_tile_; } 115 const Tile* operator*() const { return current_tile_; }
132 Tile* operator*() { return current_tile_; } 116 Tile* operator*() { return current_tile_; }
133 TilePriority::PriorityBin type() const { 117 TilePriority::PriorityBin type() const {
134 switch (phase_) { 118 switch (phase_) {
135 case VISIBLE_RECT: 119 case VISIBLE_RECT:
136 return TilePriority::NOW; 120 return TilePriority::NOW;
137 case PENDING_VISIBLE_RECT:
138 case SKEWPORT_RECT: 121 case SKEWPORT_RECT:
139 case SOON_BORDER_RECT: 122 case SOON_BORDER_RECT:
140 return TilePriority::SOON; 123 return TilePriority::SOON;
141 case EVENTUALLY_RECT: 124 case EVENTUALLY_RECT:
142 return TilePriority::EVENTUALLY; 125 return TilePriority::EVENTUALLY;
143 } 126 }
144 NOTREACHED(); 127 NOTREACHED();
145 return TilePriority::EVENTUALLY; 128 return TilePriority::EVENTUALLY;
146 } 129 }
147 130
148 TilingIterator& operator++(); 131 TilingIterator& operator++();
149 132
150 private: 133 private:
151 // PENDING VISIBLE RECT refers to the visible rect that will become current
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
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.
156 enum Phase { 134 enum Phase {
157 VISIBLE_RECT, 135 VISIBLE_RECT,
158 PENDING_VISIBLE_RECT,
159 SKEWPORT_RECT, 136 SKEWPORT_RECT,
160 SOON_BORDER_RECT, 137 SOON_BORDER_RECT,
161 EVENTUALLY_RECT 138 EVENTUALLY_RECT
162 }; 139 };
163 140
164 void AdvancePhase(); 141 void AdvancePhase();
165 142
166 PictureLayerTiling* tiling_; 143 PictureLayerTiling* tiling_;
167 TilingData* tiling_data_; 144 TilingData* tiling_data_;
168 145
169 Phase phase_; 146 Phase phase_;
170 147
171 Tile* current_tile_; 148 Tile* current_tile_;
172 VisibleTilingIterator visible_iterator_; 149 VisibleTilingIterator visible_iterator_;
173 PendingVisibleTilingIterator pending_visible_iterator_;
174 SkewportTilingIterator skewport_iterator_; 150 SkewportTilingIterator skewport_iterator_;
175 SoonBorderTilingIterator soon_border_iterator_; 151 SoonBorderTilingIterator soon_border_iterator_;
176 EventuallyTilingIterator eventually_iterator_; 152 EventuallyTilingIterator eventually_iterator_;
177 }; 153 };
178 154
179 enum IteratorType { 155 enum IteratorType { LOW_RES, HIGH_RES, NUM_ITERATORS };
180 LOW_RES,
181 HIGH_RES,
182 ACTIVE_NON_IDEAL_PENDING_HIGH_RES,
183 NUM_ITERATORS
184 };
185 156
186 void AdvanceToNextStage(); 157 void AdvanceToNextStage();
187 158
188 PictureLayerTilingSet* tiling_set_; 159 PictureLayerTilingSet* tiling_set_;
189 160
190 struct IterationStage { 161 struct IterationStage {
191 IterationStage(IteratorType type, TilePriority::PriorityBin bin);
192 IteratorType iterator_type; 162 IteratorType iterator_type;
193 TilePriority::PriorityBin tile_type; 163 TilePriority::PriorityBin tile_type;
194 }; 164 };
195 165
196 size_t current_stage_; 166 size_t current_stage_;
197 167
198 // The max number of stages is 6: 1 low res, 3 high res, and 2 active non 168 // One low res stage, and three high res stages.
199 // ideal pending high res. 169 IterationStage stages_[4];
200 base::StackVector<IterationStage, 6> stages_;
201 TilingIterator iterators_[NUM_ITERATORS]; 170 TilingIterator iterators_[NUM_ITERATORS];
202 }; 171 };
203 172
204 } // namespace cc 173 } // namespace cc
205 174
206 #endif // CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ 175 #endif // CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_
OLDNEW
« no previous file with comments | « cc/resources/tiling_set_eviction_queue.cc ('k') | cc/resources/tiling_set_raster_queue_all.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698