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

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

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