Index: cc/resources/tiling_set_raster_queue_all.cc |
diff --git a/cc/resources/tiling_set_raster_queue_all.cc b/cc/resources/tiling_set_raster_queue_all.cc |
index 6f212152a98cfcfb3caebe1951cc4ff1a77f1158..a2ecffde7ee76da3d957b1542af8afc7b7e7f36a 100644 |
--- a/cc/resources/tiling_set_raster_queue_all.cc |
+++ b/cc/resources/tiling_set_raster_queue_all.cc |
@@ -153,28 +153,38 @@ void TilingSetRasterQueueAll::AdvanceToNextStage() { |
// OnePriorityRectIterator |
TilingSetRasterQueueAll::OnePriorityRectIterator::OnePriorityRectIterator() |
- : tile_(nullptr), tiling_(nullptr), tiling_data_(nullptr) { |
+ : tile_(nullptr), |
+ tiling_(nullptr), |
+ pending_twin_tiling_(nullptr), |
+ tiling_data_(nullptr) { |
} |
TilingSetRasterQueueAll::OnePriorityRectIterator::OnePriorityRectIterator( |
PictureLayerTiling* tiling, |
- TilingData* tiling_data) |
- : tile_(nullptr), tiling_(tiling), tiling_data_(tiling_data) { |
+ TilingData* tiling_data, |
+ PictureLayerTiling::PriorityRect priority_rect) |
+ : tile_(nullptr), |
+ tiling_(tiling), |
+ pending_twin_tiling_( |
vmpstr
2015/05/05 18:04:02
Why are you adding this here? Why is getting tilin
USE eero AT chromium.org
2015/05/06 12:05:20
As a premature (size) optimisation. I removed it.
|
+ tiling->tree() == ACTIVE_TREE |
+ ? tiling->client()->GetPendingOrActiveTwinTiling(tiling) |
+ : nullptr), |
+ tiling_data_(tiling_data), |
+ priority_rect_(priority_rect) { |
} |
template <typename TilingIteratorType> |
void TilingSetRasterQueueAll::OnePriorityRectIterator::AdvanceToNextTile( |
TilingIteratorType* iterator) { |
- tile_ = nullptr; |
- while (!tile_ || !TileNeedsRaster(tile_)) { |
+ bool found_tile = false; |
+ while (!found_tile) { |
++(*iterator); |
if (!(*iterator)) { |
tile_ = nullptr; |
- return; |
+ break; |
} |
- tile_ = tiling_->TileAt(iterator->index_x(), iterator->index_y()); |
+ found_tile = GetFirstTileAndCheckIfValid(iterator); |
} |
- tiling_->UpdateTilePriority(tile_); |
} |
template <typename TilingIteratorType> |
@@ -185,7 +195,13 @@ bool TilingSetRasterQueueAll::OnePriorityRectIterator:: |
tile_ = nullptr; |
return false; |
} |
- tiling_->UpdateTilePriority(tile_); |
+ if (priority_rect_ > PictureLayerTiling::PriorityRect::PENDING_VISIBLE_RECT && |
+ pending_twin_tiling_ && |
+ pending_twin_tiling_->current_visible_rect().Intersects( |
+ tile_->content_rect())) { |
+ return false; |
+ } |
+ tiling_->UpdateTilePriority(tile_, priority_rect_); |
return true; |
} |
@@ -193,7 +209,9 @@ bool TilingSetRasterQueueAll::OnePriorityRectIterator:: |
TilingSetRasterQueueAll::VisibleTilingIterator::VisibleTilingIterator( |
PictureLayerTiling* tiling, |
TilingData* tiling_data) |
- : OnePriorityRectIterator(tiling, tiling_data) { |
+ : OnePriorityRectIterator(tiling, |
+ tiling_data, |
+ PictureLayerTiling::VISIBLE_RECT) { |
if (!tiling_->has_visible_rect_tiles()) |
return; |
iterator_ = |
@@ -216,10 +234,14 @@ TilingSetRasterQueueAll::VisibleTilingIterator& |
TilingSetRasterQueueAll::PendingVisibleTilingIterator:: |
PendingVisibleTilingIterator(PictureLayerTiling* tiling, |
TilingData* tiling_data) |
- : OnePriorityRectIterator(tiling, tiling_data) { |
- iterator_ = TilingData::DifferenceIterator(tiling_data_, |
- tiling_->pending_visible_rect(), |
- tiling_->current_visible_rect()); |
+ : OnePriorityRectIterator(tiling, |
+ tiling_data, |
+ PictureLayerTiling::PENDING_VISIBLE_RECT) { |
+ if (!pending_twin_tiling_ || !pending_twin_tiling_->has_visible_rect_tiles()) |
+ return; |
+ iterator_ = TilingData::DifferenceIterator( |
+ tiling_data_, pending_twin_tiling_->current_visible_rect(), |
+ tiling_->current_visible_rect()); |
if (!iterator_) |
return; |
if (!GetFirstTileAndCheckIfValid(&iterator_)) |
@@ -237,8 +259,9 @@ TilingSetRasterQueueAll::PendingVisibleTilingIterator& |
TilingSetRasterQueueAll::SkewportTilingIterator::SkewportTilingIterator( |
PictureLayerTiling* tiling, |
TilingData* tiling_data) |
- : OnePriorityRectIterator(tiling, tiling_data), |
- pending_visible_rect_(tiling->pending_visible_rect()) { |
+ : OnePriorityRectIterator(tiling, |
+ tiling_data, |
+ PictureLayerTiling::SKEWPORT_RECT) { |
if (!tiling_->has_skewport_rect_tiles()) |
return; |
iterator_ = TilingData::SpiralDifferenceIterator( |
@@ -246,11 +269,7 @@ TilingSetRasterQueueAll::SkewportTilingIterator::SkewportTilingIterator( |
tiling_->current_visible_rect(), tiling_->current_visible_rect()); |
if (!iterator_) |
return; |
- if (!GetFirstTileAndCheckIfValid(&iterator_)) { |
- ++(*this); |
- return; |
- } |
- if (tile_->content_rect().Intersects(pending_visible_rect_)) |
+ if (!GetFirstTileAndCheckIfValid(&iterator_)) |
++(*this); |
} |
@@ -258,11 +277,6 @@ TilingSetRasterQueueAll::SkewportTilingIterator& |
TilingSetRasterQueueAll::SkewportTilingIterator:: |
operator++() { |
AdvanceToNextTile(&iterator_); |
- while (!done()) { |
- if (!tile_->content_rect().Intersects(pending_visible_rect_)) |
- break; |
- AdvanceToNextTile(&iterator_); |
- } |
return *this; |
} |
@@ -270,8 +284,9 @@ TilingSetRasterQueueAll::SkewportTilingIterator& |
TilingSetRasterQueueAll::SoonBorderTilingIterator::SoonBorderTilingIterator( |
PictureLayerTiling* tiling, |
TilingData* tiling_data) |
- : OnePriorityRectIterator(tiling, tiling_data), |
- pending_visible_rect_(tiling->pending_visible_rect()) { |
+ : OnePriorityRectIterator(tiling, |
+ tiling_data, |
+ PictureLayerTiling::SOON_BORDER_RECT) { |
if (!tiling_->has_soon_border_rect_tiles()) |
return; |
iterator_ = TilingData::SpiralDifferenceIterator( |
@@ -279,11 +294,7 @@ TilingSetRasterQueueAll::SoonBorderTilingIterator::SoonBorderTilingIterator( |
tiling_->current_skewport_rect(), tiling_->current_visible_rect()); |
if (!iterator_) |
return; |
- if (!GetFirstTileAndCheckIfValid(&iterator_)) { |
- ++(*this); |
- return; |
- } |
- if (tile_->content_rect().Intersects(pending_visible_rect_)) |
+ if (!GetFirstTileAndCheckIfValid(&iterator_)) |
++(*this); |
} |
@@ -291,11 +302,6 @@ TilingSetRasterQueueAll::SoonBorderTilingIterator& |
TilingSetRasterQueueAll::SoonBorderTilingIterator:: |
operator++() { |
AdvanceToNextTile(&iterator_); |
- while (!done()) { |
- if (!tile_->content_rect().Intersects(pending_visible_rect_)) |
- break; |
- AdvanceToNextTile(&iterator_); |
- } |
return *this; |
} |
@@ -303,8 +309,9 @@ TilingSetRasterQueueAll::SoonBorderTilingIterator& |
TilingSetRasterQueueAll::EventuallyTilingIterator::EventuallyTilingIterator( |
PictureLayerTiling* tiling, |
TilingData* tiling_data) |
- : OnePriorityRectIterator(tiling, tiling_data), |
- pending_visible_rect_(tiling->pending_visible_rect()) { |
+ : OnePriorityRectIterator(tiling, |
+ tiling_data, |
+ PictureLayerTiling::EVENTUALLY_RECT) { |
if (!tiling_->has_eventually_rect_tiles()) |
return; |
iterator_ = TilingData::SpiralDifferenceIterator( |
@@ -312,11 +319,7 @@ TilingSetRasterQueueAll::EventuallyTilingIterator::EventuallyTilingIterator( |
tiling_->current_skewport_rect(), tiling_->current_soon_border_rect()); |
if (!iterator_) |
return; |
- if (!GetFirstTileAndCheckIfValid(&iterator_)) { |
- ++(*this); |
- return; |
- } |
- if (tile_->content_rect().Intersects(pending_visible_rect_)) |
vmpstr
2015/05/05 18:04:02
I see that this is less code, but can you maybe do
USE eero AT chromium.org
2015/05/06 12:05:20
Yes, of course.
|
+ if (!GetFirstTileAndCheckIfValid(&iterator_)) |
++(*this); |
} |
@@ -324,11 +327,6 @@ TilingSetRasterQueueAll::EventuallyTilingIterator& |
TilingSetRasterQueueAll::EventuallyTilingIterator:: |
operator++() { |
AdvanceToNextTile(&iterator_); |
- while (!done()) { |
- if (!tile_->content_rect().Intersects(pending_visible_rect_)) |
- break; |
- AdvanceToNextTile(&iterator_); |
- } |
return *this; |
} |
@@ -342,7 +340,7 @@ TilingSetRasterQueueAll::TilingIterator::TilingIterator( |
TilingData* tiling_data) |
: tiling_(tiling), |
tiling_data_(tiling_data), |
- phase_(VISIBLE_RECT), |
+ phase_(Phase::VISIBLE_RECT), |
current_tile_(NULL) { |
visible_iterator_ = VisibleTilingIterator(tiling_, tiling_data_); |
if (visible_iterator_.done()) { |
@@ -356,32 +354,32 @@ TilingSetRasterQueueAll::TilingIterator::~TilingIterator() { |
} |
void TilingSetRasterQueueAll::TilingIterator::AdvancePhase() { |
- DCHECK_LT(phase_, EVENTUALLY_RECT); |
+ DCHECK_LT(phase_, Phase::EVENTUALLY_RECT); |
current_tile_ = nullptr; |
- while (!current_tile_ && phase_ < EVENTUALLY_RECT) { |
+ while (!current_tile_ && phase_ < Phase::EVENTUALLY_RECT) { |
phase_ = static_cast<Phase>(phase_ + 1); |
switch (phase_) { |
- case VISIBLE_RECT: |
+ case Phase::VISIBLE_RECT: |
NOTREACHED(); |
return; |
- case PENDING_VISIBLE_RECT: |
+ case Phase::PENDING_VISIBLE_RECT: |
pending_visible_iterator_ = |
PendingVisibleTilingIterator(tiling_, tiling_data_); |
if (!pending_visible_iterator_.done()) |
current_tile_ = *pending_visible_iterator_; |
break; |
- case SKEWPORT_RECT: |
+ case Phase::SKEWPORT_RECT: |
skewport_iterator_ = SkewportTilingIterator(tiling_, tiling_data_); |
if (!skewport_iterator_.done()) |
current_tile_ = *skewport_iterator_; |
break; |
- case SOON_BORDER_RECT: |
+ case Phase::SOON_BORDER_RECT: |
soon_border_iterator_ = SoonBorderTilingIterator(tiling_, tiling_data_); |
if (!soon_border_iterator_.done()) |
current_tile_ = *soon_border_iterator_; |
break; |
- case EVENTUALLY_RECT: |
+ case Phase::EVENTUALLY_RECT: |
eventually_iterator_ = EventuallyTilingIterator(tiling_, tiling_data_); |
if (!eventually_iterator_.done()) |
current_tile_ = *eventually_iterator_; |
@@ -394,7 +392,7 @@ TilingSetRasterQueueAll::TilingIterator& |
TilingSetRasterQueueAll::TilingIterator:: |
operator++() { |
switch (phase_) { |
- case VISIBLE_RECT: |
+ case Phase::VISIBLE_RECT: |
++visible_iterator_; |
if (visible_iterator_.done()) { |
AdvancePhase(); |
@@ -402,7 +400,7 @@ TilingSetRasterQueueAll::TilingIterator& |
} |
current_tile_ = *visible_iterator_; |
break; |
- case PENDING_VISIBLE_RECT: |
+ case Phase::PENDING_VISIBLE_RECT: |
++pending_visible_iterator_; |
if (pending_visible_iterator_.done()) { |
AdvancePhase(); |
@@ -410,7 +408,7 @@ TilingSetRasterQueueAll::TilingIterator& |
} |
current_tile_ = *pending_visible_iterator_; |
break; |
- case SKEWPORT_RECT: |
+ case Phase::SKEWPORT_RECT: |
++skewport_iterator_; |
if (skewport_iterator_.done()) { |
AdvancePhase(); |
@@ -418,7 +416,7 @@ TilingSetRasterQueueAll::TilingIterator& |
} |
current_tile_ = *skewport_iterator_; |
break; |
- case SOON_BORDER_RECT: |
+ case Phase::SOON_BORDER_RECT: |
++soon_border_iterator_; |
if (soon_border_iterator_.done()) { |
AdvancePhase(); |
@@ -426,7 +424,7 @@ TilingSetRasterQueueAll::TilingIterator& |
} |
current_tile_ = *soon_border_iterator_; |
break; |
- case EVENTUALLY_RECT: |
+ case Phase::EVENTUALLY_RECT: |
++eventually_iterator_; |
if (eventually_iterator_.done()) { |
current_tile_ = nullptr; |