Commit 1172ff24 authored by vmpstr's avatar vmpstr Committed by Commit bot

cc: Optimize OnePriorityRectIterator a little bit.

This is a pretty small optimization, but it saves a few struct
copies, which seems to make a small difference (~1% improvement) in a
targeted perftest that runs this function.

R=enne
BUG=488636

Review URL: https://codereview.chromium.org/1130343005

Cr-Commit-Position: refs/heads/master@{#330637}
parent eadea210
...@@ -158,14 +158,18 @@ TilingSetRasterQueueAll::OnePriorityRectIterator::OnePriorityRectIterator( ...@@ -158,14 +158,18 @@ TilingSetRasterQueueAll::OnePriorityRectIterator::OnePriorityRectIterator(
template <typename TilingIteratorType> template <typename TilingIteratorType>
void TilingSetRasterQueueAll::OnePriorityRectIterator::AdvanceToNextTile( void TilingSetRasterQueueAll::OnePriorityRectIterator::AdvanceToNextTile(
TilingIteratorType* iterator) { TilingIteratorType* iterator) {
bool found_tile = false; for (;;) {
while (!found_tile) {
++(*iterator); ++(*iterator);
if (!(*iterator)) { if (!(*iterator)) {
current_tile_ = PrioritizedTile(); current_tile_ = PrioritizedTile();
break; break;
} }
found_tile = GetFirstTileAndCheckIfValid(iterator); Tile* tile = tiling_->TileAt(iterator->index_x(), iterator->index_y());
if (IsTileValid(tile)) {
tiling_->UpdateRequiredStatesOnTile(tile);
current_tile_ = tiling_->MakePrioritizedTile(tile, priority_rect_type_);
break;
}
} }
} }
...@@ -173,20 +177,26 @@ template <typename TilingIteratorType> ...@@ -173,20 +177,26 @@ template <typename TilingIteratorType>
bool TilingSetRasterQueueAll::OnePriorityRectIterator:: bool TilingSetRasterQueueAll::OnePriorityRectIterator::
GetFirstTileAndCheckIfValid(TilingIteratorType* iterator) { GetFirstTileAndCheckIfValid(TilingIteratorType* iterator) {
Tile* tile = tiling_->TileAt(iterator->index_x(), iterator->index_y()); Tile* tile = tiling_->TileAt(iterator->index_x(), iterator->index_y());
if (!tile || !TileNeedsRaster(tile)) { if (!IsTileValid(tile)) {
current_tile_ = PrioritizedTile(); current_tile_ = PrioritizedTile();
return false; return false;
} }
tiling_->UpdateRequiredStatesOnTile(tile);
current_tile_ = tiling_->MakePrioritizedTile(tile, priority_rect_type_);
return true;
}
bool TilingSetRasterQueueAll::OnePriorityRectIterator::IsTileValid(
const Tile* tile) const {
if (!tile || !TileNeedsRaster(tile))
return false;
// After the pending visible rect has been processed, we must return false // After the pending visible rect has been processed, we must return false
// for pending visible rect tiles as tiling iterators do not ignore those // for pending visible rect tiles as tiling iterators do not ignore those
// tiles. // tiles.
if (priority_rect_type_ > PictureLayerTiling::PENDING_VISIBLE_RECT && if (priority_rect_type_ > PictureLayerTiling::PENDING_VISIBLE_RECT &&
tiling_->pending_visible_rect().Intersects(tile->content_rect())) { tiling_->pending_visible_rect().Intersects(tile->content_rect())) {
current_tile_ = PrioritizedTile();
return false; return false;
} }
tiling_->UpdateRequiredStatesOnTile(tile);
current_tile_ = tiling_->MakePrioritizedTile(tile, priority_rect_type_);
return true; return true;
} }
......
...@@ -41,7 +41,7 @@ class CC_EXPORT TilingSetRasterQueueAll { ...@@ -41,7 +41,7 @@ class CC_EXPORT TilingSetRasterQueueAll {
protected: protected:
~OnePriorityRectIterator() = default; ~OnePriorityRectIterator() = default;
bool TileNeedsRaster(Tile* tile) const { bool TileNeedsRaster(const Tile* tile) const {
return tile->draw_info().NeedsRaster() && !tiling_->IsTileOccluded(tile); return tile->draw_info().NeedsRaster() && !tiling_->IsTileOccluded(tile);
} }
...@@ -49,6 +49,7 @@ class CC_EXPORT TilingSetRasterQueueAll { ...@@ -49,6 +49,7 @@ class CC_EXPORT TilingSetRasterQueueAll {
void AdvanceToNextTile(TilingIteratorType* iterator); void AdvanceToNextTile(TilingIteratorType* iterator);
template <typename TilingIteratorType> template <typename TilingIteratorType>
bool GetFirstTileAndCheckIfValid(TilingIteratorType* iterator); bool GetFirstTileAndCheckIfValid(TilingIteratorType* iterator);
bool IsTileValid(const Tile* tile) const;
PrioritizedTile current_tile_; PrioritizedTile current_tile_;
PictureLayerTiling* tiling_; PictureLayerTiling* tiling_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment