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(
template <typename TilingIteratorType>
void TilingSetRasterQueueAll::OnePriorityRectIterator::AdvanceToNextTile(
TilingIteratorType* iterator) {
bool found_tile = false;
while (!found_tile) {
for (;;) {
++(*iterator);
if (!(*iterator)) {
current_tile_ = PrioritizedTile();
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>
bool TilingSetRasterQueueAll::OnePriorityRectIterator::
GetFirstTileAndCheckIfValid(TilingIteratorType* iterator) {
Tile* tile = tiling_->TileAt(iterator->index_x(), iterator->index_y());
if (!tile || !TileNeedsRaster(tile)) {
if (!IsTileValid(tile)) {
current_tile_ = PrioritizedTile();
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
// for pending visible rect tiles as tiling iterators do not ignore those
// tiles.
if (priority_rect_type_ > PictureLayerTiling::PENDING_VISIBLE_RECT &&
tiling_->pending_visible_rect().Intersects(tile->content_rect())) {
current_tile_ = PrioritizedTile();
return false;
}
tiling_->UpdateRequiredStatesOnTile(tile);
current_tile_ = tiling_->MakePrioritizedTile(tile, priority_rect_type_);
return true;
}
......
......@@ -41,7 +41,7 @@ class CC_EXPORT TilingSetRasterQueueAll {
protected:
~OnePriorityRectIterator() = default;
bool TileNeedsRaster(Tile* tile) const {
bool TileNeedsRaster(const Tile* tile) const {
return tile->draw_info().NeedsRaster() && !tiling_->IsTileOccluded(tile);
}
......@@ -49,6 +49,7 @@ class CC_EXPORT TilingSetRasterQueueAll {
void AdvanceToNextTile(TilingIteratorType* iterator);
template <typename TilingIteratorType>
bool GetFirstTileAndCheckIfValid(TilingIteratorType* iterator);
bool IsTileValid(const Tile* tile) const;
PrioritizedTile current_tile_;
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