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

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

Issue 1130343005: cc: Optimize OnePriorityRectIterator a little bit. (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/tiles/tiling_set_raster_queue_all.h ('k') | no next file » | 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 #include "cc/tiles/tiling_set_raster_queue_all.h" 5 #include "cc/tiles/tiling_set_raster_queue_all.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "cc/tiles/picture_layer_tiling_set.h" 9 #include "cc/tiles/picture_layer_tiling_set.h"
10 #include "cc/tiles/tile.h" 10 #include "cc/tiles/tile.h"
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 TilingData* tiling_data, 151 TilingData* tiling_data,
152 PictureLayerTiling::PriorityRectType priority_rect_type) 152 PictureLayerTiling::PriorityRectType priority_rect_type)
153 : tiling_(tiling), 153 : tiling_(tiling),
154 tiling_data_(tiling_data), 154 tiling_data_(tiling_data),
155 priority_rect_type_(priority_rect_type) { 155 priority_rect_type_(priority_rect_type) {
156 } 156 }
157 157
158 template <typename TilingIteratorType> 158 template <typename TilingIteratorType>
159 void TilingSetRasterQueueAll::OnePriorityRectIterator::AdvanceToNextTile( 159 void TilingSetRasterQueueAll::OnePriorityRectIterator::AdvanceToNextTile(
160 TilingIteratorType* iterator) { 160 TilingIteratorType* iterator) {
161 bool found_tile = false; 161 for (;;) {
162 while (!found_tile) {
163 ++(*iterator); 162 ++(*iterator);
164 if (!(*iterator)) { 163 if (!(*iterator)) {
165 current_tile_ = PrioritizedTile(); 164 current_tile_ = PrioritizedTile();
166 break; 165 break;
167 } 166 }
168 found_tile = GetFirstTileAndCheckIfValid(iterator); 167 Tile* tile = tiling_->TileAt(iterator->index_x(), iterator->index_y());
168 if (IsTileValid(tile)) {
169 tiling_->UpdateRequiredStatesOnTile(tile);
170 current_tile_ = tiling_->MakePrioritizedTile(tile, priority_rect_type_);
171 break;
172 }
169 } 173 }
170 } 174 }
171 175
172 template <typename TilingIteratorType> 176 template <typename TilingIteratorType>
173 bool TilingSetRasterQueueAll::OnePriorityRectIterator:: 177 bool TilingSetRasterQueueAll::OnePriorityRectIterator::
174 GetFirstTileAndCheckIfValid(TilingIteratorType* iterator) { 178 GetFirstTileAndCheckIfValid(TilingIteratorType* iterator) {
175 Tile* tile = tiling_->TileAt(iterator->index_x(), iterator->index_y()); 179 Tile* tile = tiling_->TileAt(iterator->index_x(), iterator->index_y());
176 if (!tile || !TileNeedsRaster(tile)) { 180 if (!IsTileValid(tile)) {
177 current_tile_ = PrioritizedTile();
178 return false;
179 }
180 // After the pending visible rect has been processed, we must return false
181 // for pending visible rect tiles as tiling iterators do not ignore those
182 // tiles.
183 if (priority_rect_type_ > PictureLayerTiling::PENDING_VISIBLE_RECT &&
184 tiling_->pending_visible_rect().Intersects(tile->content_rect())) {
185 current_tile_ = PrioritizedTile(); 181 current_tile_ = PrioritizedTile();
186 return false; 182 return false;
187 } 183 }
188 tiling_->UpdateRequiredStatesOnTile(tile); 184 tiling_->UpdateRequiredStatesOnTile(tile);
189 current_tile_ = tiling_->MakePrioritizedTile(tile, priority_rect_type_); 185 current_tile_ = tiling_->MakePrioritizedTile(tile, priority_rect_type_);
190 return true; 186 return true;
191 } 187 }
192 188
189 bool TilingSetRasterQueueAll::OnePriorityRectIterator::IsTileValid(
190 const Tile* tile) const {
191 if (!tile || !TileNeedsRaster(tile))
192 return false;
193 // After the pending visible rect has been processed, we must return false
194 // for pending visible rect tiles as tiling iterators do not ignore those
195 // tiles.
196 if (priority_rect_type_ > PictureLayerTiling::PENDING_VISIBLE_RECT &&
197 tiling_->pending_visible_rect().Intersects(tile->content_rect())) {
198 return false;
199 }
200 return true;
201 }
202
193 // VisibleTilingIterator. 203 // VisibleTilingIterator.
194 TilingSetRasterQueueAll::VisibleTilingIterator::VisibleTilingIterator( 204 TilingSetRasterQueueAll::VisibleTilingIterator::VisibleTilingIterator(
195 PictureLayerTiling* tiling, 205 PictureLayerTiling* tiling,
196 TilingData* tiling_data) 206 TilingData* tiling_data)
197 : OnePriorityRectIterator(tiling, 207 : OnePriorityRectIterator(tiling,
198 tiling_data, 208 tiling_data,
199 PictureLayerTiling::VISIBLE_RECT) { 209 PictureLayerTiling::VISIBLE_RECT) {
200 if (!tiling_->has_visible_rect_tiles()) 210 if (!tiling_->has_visible_rect_tiles())
201 return; 211 return;
202 iterator_ = 212 iterator_ =
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 current_tile_ = PrioritizedTile(); 461 current_tile_ = PrioritizedTile();
452 return *this; 462 return *this;
453 } 463 }
454 current_tile_ = *eventually_iterator_; 464 current_tile_ = *eventually_iterator_;
455 break; 465 break;
456 } 466 }
457 return *this; 467 return *this;
458 } 468 }
459 469
460 } // namespace cc 470 } // namespace cc
OLDNEW
« no previous file with comments | « cc/tiles/tiling_set_raster_queue_all.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698