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

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

Issue 1130123003: cc: Separate the priority from the tile and put in new PrioritizedTile (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge 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 #include "cc/resources/tiling_set_raster_queue_all.h" 5 #include "cc/resources/tiling_set_raster_queue_all.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "cc/resources/picture_layer_tiling_set.h" 9 #include "cc/resources/picture_layer_tiling_set.h"
10 #include "cc/resources/tile.h" 10 #include "cc/resources/tile.h"
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 111
112 // First advance the iterator. 112 // First advance the iterator.
113 DCHECK(!iterators_[index].done()); 113 DCHECK(!iterators_[index].done());
114 DCHECK(iterators_[index].type() == tile_type); 114 DCHECK(iterators_[index].type() == tile_type);
115 ++iterators_[index]; 115 ++iterators_[index];
116 116
117 if (iterators_[index].done() || iterators_[index].type() != tile_type) 117 if (iterators_[index].done() || iterators_[index].type() != tile_type)
118 AdvanceToNextStage(); 118 AdvanceToNextStage();
119 } 119 }
120 120
121 Tile* TilingSetRasterQueueAll::Top() { 121 const PrioritizedTile& TilingSetRasterQueueAll::Top() const {
122 DCHECK(!IsEmpty()); 122 DCHECK(!IsEmpty());
123 123
124 IteratorType index = stages_[current_stage_].iterator_type; 124 IteratorType index = stages_[current_stage_].iterator_type;
125 DCHECK(!iterators_[index].done());
126 DCHECK(iterators_[index].type() == stages_[current_stage_].tile_type);
127
128 return *iterators_[index];
129 }
130
131 const Tile* TilingSetRasterQueueAll::Top() const {
132 DCHECK(!IsEmpty());
133
134 IteratorType index = stages_[current_stage_].iterator_type;
135 DCHECK(!iterators_[index].done()); 125 DCHECK(!iterators_[index].done());
136 DCHECK(iterators_[index].type() == stages_[current_stage_].tile_type); 126 DCHECK(iterators_[index].type() == stages_[current_stage_].tile_type);
137 127
138 return *iterators_[index]; 128 return *iterators_[index];
139 } 129 }
140 130
141 void TilingSetRasterQueueAll::AdvanceToNextStage() { 131 void TilingSetRasterQueueAll::AdvanceToNextStage() {
142 DCHECK_LT(current_stage_, stages_->size()); 132 DCHECK_LT(current_stage_, stages_->size());
143 ++current_stage_; 133 ++current_stage_;
144 while (current_stage_ < stages_->size()) { 134 while (current_stage_ < stages_->size()) {
145 IteratorType index = stages_[current_stage_].iterator_type; 135 IteratorType index = stages_[current_stage_].iterator_type;
146 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type; 136 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type;
147 137
148 if (!iterators_[index].done() && iterators_[index].type() == tile_type) 138 if (!iterators_[index].done() && iterators_[index].type() == tile_type)
149 break; 139 break;
150 ++current_stage_; 140 ++current_stage_;
151 } 141 }
152 } 142 }
153 143
154 // OnePriorityRectIterator 144 // OnePriorityRectIterator
155 TilingSetRasterQueueAll::OnePriorityRectIterator::OnePriorityRectIterator() 145 TilingSetRasterQueueAll::OnePriorityRectIterator::OnePriorityRectIterator()
156 : tile_(nullptr), tiling_(nullptr), tiling_data_(nullptr) { 146 : tiling_(nullptr), tiling_data_(nullptr) {
157 } 147 }
158 148
159 TilingSetRasterQueueAll::OnePriorityRectIterator::OnePriorityRectIterator( 149 TilingSetRasterQueueAll::OnePriorityRectIterator::OnePriorityRectIterator(
160 PictureLayerTiling* tiling, 150 PictureLayerTiling* tiling,
161 TilingData* tiling_data) 151 TilingData* tiling_data)
162 : tile_(nullptr), tiling_(tiling), tiling_data_(tiling_data) { 152 : tiling_(tiling), tiling_data_(tiling_data) {
163 } 153 }
164 154
165 template <typename TilingIteratorType> 155 template <typename TilingIteratorType>
166 void TilingSetRasterQueueAll::OnePriorityRectIterator::AdvanceToNextTile( 156 void TilingSetRasterQueueAll::OnePriorityRectIterator::AdvanceToNextTile(
167 TilingIteratorType* iterator) { 157 TilingIteratorType* iterator) {
168 tile_ = nullptr; 158 current_tile_ = PrioritizedTile();
169 while (!tile_ || !TileNeedsRaster(tile_)) { 159 Tile* tile = nullptr;
160 while (!tile || !TileNeedsRaster(tile)) {
170 ++(*iterator); 161 ++(*iterator);
171 if (!(*iterator)) { 162 if (!(*iterator)) {
172 tile_ = nullptr;
173 return; 163 return;
174 } 164 }
175 tile_ = tiling_->TileAt(iterator->index_x(), iterator->index_y()); 165 tile = tiling_->TileAt(iterator->index_x(), iterator->index_y());
176 } 166 }
177 tiling_->UpdateTilePriority(tile_); 167 tiling_->UpdateRequiredStatesOnTile(tile);
168 current_tile_ = tiling_->MakePrioritizedTile(tile);
178 } 169 }
179 170
180 template <typename TilingIteratorType> 171 template <typename TilingIteratorType>
181 bool TilingSetRasterQueueAll::OnePriorityRectIterator:: 172 bool TilingSetRasterQueueAll::OnePriorityRectIterator::
182 GetFirstTileAndCheckIfValid(TilingIteratorType* iterator) { 173 GetFirstTileAndCheckIfValid(TilingIteratorType* iterator) {
183 tile_ = tiling_->TileAt(iterator->index_x(), iterator->index_y()); 174 Tile* tile = tiling_->TileAt(iterator->index_x(), iterator->index_y());
184 if (!tile_ || !TileNeedsRaster(tile_)) { 175 if (!tile || !TileNeedsRaster(tile)) {
185 tile_ = nullptr; 176 current_tile_ = PrioritizedTile();
186 return false; 177 return false;
187 } 178 }
188 tiling_->UpdateTilePriority(tile_); 179 tiling_->UpdateRequiredStatesOnTile(tile);
180 current_tile_ = tiling_->MakePrioritizedTile(tile);
189 return true; 181 return true;
190 } 182 }
191 183
192 // VisibleTilingIterator. 184 // VisibleTilingIterator.
193 TilingSetRasterQueueAll::VisibleTilingIterator::VisibleTilingIterator( 185 TilingSetRasterQueueAll::VisibleTilingIterator::VisibleTilingIterator(
194 PictureLayerTiling* tiling, 186 PictureLayerTiling* tiling,
195 TilingData* tiling_data) 187 TilingData* tiling_data)
196 : OnePriorityRectIterator(tiling, tiling_data) { 188 : OnePriorityRectIterator(tiling, tiling_data) {
197 if (!tiling_->has_visible_rect_tiles()) 189 if (!tiling_->has_visible_rect_tiles())
198 return; 190 return;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 return; 235 return;
244 iterator_ = TilingData::SpiralDifferenceIterator( 236 iterator_ = TilingData::SpiralDifferenceIterator(
245 tiling_data_, tiling_->current_skewport_rect(), 237 tiling_data_, tiling_->current_skewport_rect(),
246 tiling_->current_visible_rect(), tiling_->current_visible_rect()); 238 tiling_->current_visible_rect(), tiling_->current_visible_rect());
247 if (!iterator_) 239 if (!iterator_)
248 return; 240 return;
249 if (!GetFirstTileAndCheckIfValid(&iterator_)) { 241 if (!GetFirstTileAndCheckIfValid(&iterator_)) {
250 ++(*this); 242 ++(*this);
251 return; 243 return;
252 } 244 }
253 if (tile_->content_rect().Intersects(pending_visible_rect_)) 245 if (current_tile_.tile()->content_rect().Intersects(pending_visible_rect_))
254 ++(*this); 246 ++(*this);
255 } 247 }
256 248
257 TilingSetRasterQueueAll::SkewportTilingIterator& 249 TilingSetRasterQueueAll::SkewportTilingIterator&
258 TilingSetRasterQueueAll::SkewportTilingIterator:: 250 TilingSetRasterQueueAll::SkewportTilingIterator::
259 operator++() { 251 operator++() {
260 AdvanceToNextTile(&iterator_); 252 AdvanceToNextTile(&iterator_);
261 while (!done()) { 253 while (!done()) {
262 if (!tile_->content_rect().Intersects(pending_visible_rect_)) 254 if (!current_tile_.tile()->content_rect().Intersects(pending_visible_rect_))
263 break; 255 break;
264 AdvanceToNextTile(&iterator_); 256 AdvanceToNextTile(&iterator_);
265 } 257 }
266 return *this; 258 return *this;
267 } 259 }
268 260
269 // SoonBorderTilingIterator. 261 // SoonBorderTilingIterator.
270 TilingSetRasterQueueAll::SoonBorderTilingIterator::SoonBorderTilingIterator( 262 TilingSetRasterQueueAll::SoonBorderTilingIterator::SoonBorderTilingIterator(
271 PictureLayerTiling* tiling, 263 PictureLayerTiling* tiling,
272 TilingData* tiling_data) 264 TilingData* tiling_data)
273 : OnePriorityRectIterator(tiling, tiling_data), 265 : OnePriorityRectIterator(tiling, tiling_data),
274 pending_visible_rect_(tiling->pending_visible_rect()) { 266 pending_visible_rect_(tiling->pending_visible_rect()) {
275 if (!tiling_->has_soon_border_rect_tiles()) 267 if (!tiling_->has_soon_border_rect_tiles())
276 return; 268 return;
277 iterator_ = TilingData::SpiralDifferenceIterator( 269 iterator_ = TilingData::SpiralDifferenceIterator(
278 tiling_data_, tiling_->current_soon_border_rect(), 270 tiling_data_, tiling_->current_soon_border_rect(),
279 tiling_->current_skewport_rect(), tiling_->current_visible_rect()); 271 tiling_->current_skewport_rect(), tiling_->current_visible_rect());
280 if (!iterator_) 272 if (!iterator_)
281 return; 273 return;
282 if (!GetFirstTileAndCheckIfValid(&iterator_)) { 274 if (!GetFirstTileAndCheckIfValid(&iterator_)) {
283 ++(*this); 275 ++(*this);
284 return; 276 return;
285 } 277 }
286 if (tile_->content_rect().Intersects(pending_visible_rect_)) 278 if (current_tile_.tile()->content_rect().Intersects(pending_visible_rect_))
287 ++(*this); 279 ++(*this);
288 } 280 }
289 281
290 TilingSetRasterQueueAll::SoonBorderTilingIterator& 282 TilingSetRasterQueueAll::SoonBorderTilingIterator&
291 TilingSetRasterQueueAll::SoonBorderTilingIterator:: 283 TilingSetRasterQueueAll::SoonBorderTilingIterator::
292 operator++() { 284 operator++() {
293 AdvanceToNextTile(&iterator_); 285 AdvanceToNextTile(&iterator_);
294 while (!done()) { 286 while (!done()) {
295 if (!tile_->content_rect().Intersects(pending_visible_rect_)) 287 if (!current_tile_.tile()->content_rect().Intersects(pending_visible_rect_))
296 break; 288 break;
297 AdvanceToNextTile(&iterator_); 289 AdvanceToNextTile(&iterator_);
298 } 290 }
299 return *this; 291 return *this;
300 } 292 }
301 293
302 // EventuallyTilingIterator. 294 // EventuallyTilingIterator.
303 TilingSetRasterQueueAll::EventuallyTilingIterator::EventuallyTilingIterator( 295 TilingSetRasterQueueAll::EventuallyTilingIterator::EventuallyTilingIterator(
304 PictureLayerTiling* tiling, 296 PictureLayerTiling* tiling,
305 TilingData* tiling_data) 297 TilingData* tiling_data)
306 : OnePriorityRectIterator(tiling, tiling_data), 298 : OnePriorityRectIterator(tiling, tiling_data),
307 pending_visible_rect_(tiling->pending_visible_rect()) { 299 pending_visible_rect_(tiling->pending_visible_rect()) {
308 if (!tiling_->has_eventually_rect_tiles()) 300 if (!tiling_->has_eventually_rect_tiles())
309 return; 301 return;
310 iterator_ = TilingData::SpiralDifferenceIterator( 302 iterator_ = TilingData::SpiralDifferenceIterator(
311 tiling_data_, tiling_->current_eventually_rect(), 303 tiling_data_, tiling_->current_eventually_rect(),
312 tiling_->current_skewport_rect(), tiling_->current_soon_border_rect()); 304 tiling_->current_skewport_rect(), tiling_->current_soon_border_rect());
313 if (!iterator_) 305 if (!iterator_)
314 return; 306 return;
315 if (!GetFirstTileAndCheckIfValid(&iterator_)) { 307 if (!GetFirstTileAndCheckIfValid(&iterator_)) {
316 ++(*this); 308 ++(*this);
317 return; 309 return;
318 } 310 }
319 if (tile_->content_rect().Intersects(pending_visible_rect_)) 311 if (current_tile_.tile()->content_rect().Intersects(pending_visible_rect_))
320 ++(*this); 312 ++(*this);
321 } 313 }
322 314
323 TilingSetRasterQueueAll::EventuallyTilingIterator& 315 TilingSetRasterQueueAll::EventuallyTilingIterator&
324 TilingSetRasterQueueAll::EventuallyTilingIterator:: 316 TilingSetRasterQueueAll::EventuallyTilingIterator::
325 operator++() { 317 operator++() {
326 AdvanceToNextTile(&iterator_); 318 AdvanceToNextTile(&iterator_);
327 while (!done()) { 319 while (!done()) {
328 if (!tile_->content_rect().Intersects(pending_visible_rect_)) 320 if (!current_tile_.tile()->content_rect().Intersects(pending_visible_rect_))
329 break; 321 break;
330 AdvanceToNextTile(&iterator_); 322 AdvanceToNextTile(&iterator_);
331 } 323 }
332 return *this; 324 return *this;
333 } 325 }
334 326
335 // TilingIterator 327 // TilingIterator
336 TilingSetRasterQueueAll::TilingIterator::TilingIterator() 328 TilingSetRasterQueueAll::TilingIterator::TilingIterator() : tiling_(nullptr) {
337 : tiling_(NULL), current_tile_(NULL) {
338 } 329 }
339 330
340 TilingSetRasterQueueAll::TilingIterator::TilingIterator( 331 TilingSetRasterQueueAll::TilingIterator::TilingIterator(
341 PictureLayerTiling* tiling, 332 PictureLayerTiling* tiling,
342 TilingData* tiling_data) 333 TilingData* tiling_data)
343 : tiling_(tiling), 334 : tiling_(tiling), tiling_data_(tiling_data), phase_(VISIBLE_RECT) {
344 tiling_data_(tiling_data),
345 phase_(VISIBLE_RECT),
346 current_tile_(NULL) {
347 visible_iterator_ = VisibleTilingIterator(tiling_, tiling_data_); 335 visible_iterator_ = VisibleTilingIterator(tiling_, tiling_data_);
348 if (visible_iterator_.done()) { 336 if (visible_iterator_.done()) {
349 AdvancePhase(); 337 AdvancePhase();
350 return; 338 return;
351 } 339 }
352 current_tile_ = *visible_iterator_; 340 current_tile_ = *visible_iterator_;
353 } 341 }
354 342
355 TilingSetRasterQueueAll::TilingIterator::~TilingIterator() { 343 TilingSetRasterQueueAll::TilingIterator::~TilingIterator() {
356 } 344 }
357 345
358 void TilingSetRasterQueueAll::TilingIterator::AdvancePhase() { 346 void TilingSetRasterQueueAll::TilingIterator::AdvancePhase() {
359 DCHECK_LT(phase_, EVENTUALLY_RECT); 347 DCHECK_LT(phase_, EVENTUALLY_RECT);
360 348
361 current_tile_ = nullptr; 349 current_tile_ = PrioritizedTile();
362 while (!current_tile_ && phase_ < EVENTUALLY_RECT) { 350 while (!current_tile_.tile() && phase_ < EVENTUALLY_RECT) {
363 phase_ = static_cast<Phase>(phase_ + 1); 351 phase_ = static_cast<Phase>(phase_ + 1);
364 switch (phase_) { 352 switch (phase_) {
365 case VISIBLE_RECT: 353 case VISIBLE_RECT:
366 NOTREACHED(); 354 NOTREACHED();
367 return; 355 return;
368 case PENDING_VISIBLE_RECT: 356 case PENDING_VISIBLE_RECT:
369 pending_visible_iterator_ = 357 pending_visible_iterator_ =
370 PendingVisibleTilingIterator(tiling_, tiling_data_); 358 PendingVisibleTilingIterator(tiling_, tiling_data_);
371 if (!pending_visible_iterator_.done()) 359 if (!pending_visible_iterator_.done())
372 current_tile_ = *pending_visible_iterator_; 360 current_tile_ = *pending_visible_iterator_;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 ++soon_border_iterator_; 410 ++soon_border_iterator_;
423 if (soon_border_iterator_.done()) { 411 if (soon_border_iterator_.done()) {
424 AdvancePhase(); 412 AdvancePhase();
425 return *this; 413 return *this;
426 } 414 }
427 current_tile_ = *soon_border_iterator_; 415 current_tile_ = *soon_border_iterator_;
428 break; 416 break;
429 case EVENTUALLY_RECT: 417 case EVENTUALLY_RECT:
430 ++eventually_iterator_; 418 ++eventually_iterator_;
431 if (eventually_iterator_.done()) { 419 if (eventually_iterator_.done()) {
432 current_tile_ = nullptr; 420 current_tile_ = PrioritizedTile();
433 return *this; 421 return *this;
434 } 422 }
435 current_tile_ = *eventually_iterator_; 423 current_tile_ = *eventually_iterator_;
436 break; 424 break;
437 } 425 }
438 return *this; 426 return *this;
439 } 427 }
440 428
441 } // namespace cc 429 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/tiling_set_raster_queue_all.h ('k') | cc/resources/tiling_set_raster_queue_required.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698