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

Unified Diff: cc/resources/tiling_set_raster_queue_all.cc

Issue 1126813002: cc: Pass priority rect information from iterators to tilings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase fix 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/resources/tiling_set_raster_queue_all.h ('k') | cc/resources/tiling_set_raster_queue_required.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 ba2f11520b8a946d3c8c5bf97857aef5260fc350..330f0883a80e674aca32d13dba69931d0c7f77d0 100644
--- a/cc/resources/tiling_set_raster_queue_all.cc
+++ b/cc/resources/tiling_set_raster_queue_all.cc
@@ -148,24 +148,25 @@ TilingSetRasterQueueAll::OnePriorityRectIterator::OnePriorityRectIterator()
TilingSetRasterQueueAll::OnePriorityRectIterator::OnePriorityRectIterator(
PictureLayerTiling* tiling,
- TilingData* tiling_data)
- : tiling_(tiling), tiling_data_(tiling_data) {
+ TilingData* tiling_data,
+ PictureLayerTiling::PriorityRectType priority_rect_type)
+ : tiling_(tiling),
+ tiling_data_(tiling_data),
+ priority_rect_type_(priority_rect_type) {
}
template <typename TilingIteratorType>
void TilingSetRasterQueueAll::OnePriorityRectIterator::AdvanceToNextTile(
TilingIteratorType* iterator) {
- current_tile_ = PrioritizedTile();
- Tile* tile = nullptr;
- while (!tile || !TileNeedsRaster(tile)) {
+ bool found_tile = false;
+ while (!found_tile) {
++(*iterator);
if (!(*iterator)) {
- return;
+ current_tile_ = PrioritizedTile();
+ break;
}
- tile = tiling_->TileAt(iterator->index_x(), iterator->index_y());
+ found_tile = GetFirstTileAndCheckIfValid(iterator);
}
- tiling_->UpdateRequiredStatesOnTile(tile);
- current_tile_ = tiling_->MakePrioritizedTile(tile);
}
template <typename TilingIteratorType>
@@ -176,8 +177,16 @@ bool TilingSetRasterQueueAll::OnePriorityRectIterator::
current_tile_ = PrioritizedTile();
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);
+ current_tile_ = tiling_->MakePrioritizedTile(tile, priority_rect_type_);
return true;
}
@@ -185,7 +194,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_ =
@@ -208,7 +219,9 @@ TilingSetRasterQueueAll::VisibleTilingIterator&
TilingSetRasterQueueAll::PendingVisibleTilingIterator::
PendingVisibleTilingIterator(PictureLayerTiling* tiling,
TilingData* tiling_data)
- : OnePriorityRectIterator(tiling, tiling_data) {
+ : OnePriorityRectIterator(tiling,
+ tiling_data,
+ PictureLayerTiling::PENDING_VISIBLE_RECT) {
iterator_ = TilingData::DifferenceIterator(tiling_data_,
tiling_->pending_visible_rect(),
tiling_->current_visible_rect());
@@ -229,7 +242,9 @@ TilingSetRasterQueueAll::PendingVisibleTilingIterator&
TilingSetRasterQueueAll::SkewportTilingIterator::SkewportTilingIterator(
PictureLayerTiling* tiling,
TilingData* tiling_data)
- : OnePriorityRectIterator(tiling, tiling_data),
+ : OnePriorityRectIterator(tiling,
+ tiling_data,
+ PictureLayerTiling::SKEWPORT_RECT),
pending_visible_rect_(tiling->pending_visible_rect()) {
if (!tiling_->has_skewport_rect_tiles())
return;
@@ -242,6 +257,8 @@ TilingSetRasterQueueAll::SkewportTilingIterator::SkewportTilingIterator(
++(*this);
return;
}
+ // TODO(e_hakkinen): This is not needed as GetFirstTileAndCheckIfValid
+ // does the same checking.
if (current_tile_.tile()->content_rect().Intersects(pending_visible_rect_))
++(*this);
}
@@ -250,6 +267,8 @@ TilingSetRasterQueueAll::SkewportTilingIterator&
TilingSetRasterQueueAll::SkewportTilingIterator::
operator++() {
AdvanceToNextTile(&iterator_);
+ // TODO(e_hakkinen): This is not needed as GetFirstTileAndCheckIfValid called
+ // by AdvanceToNextTile does the same checking.
while (!done()) {
if (!current_tile_.tile()->content_rect().Intersects(pending_visible_rect_))
break;
@@ -262,7 +281,9 @@ TilingSetRasterQueueAll::SkewportTilingIterator&
TilingSetRasterQueueAll::SoonBorderTilingIterator::SoonBorderTilingIterator(
PictureLayerTiling* tiling,
TilingData* tiling_data)
- : OnePriorityRectIterator(tiling, tiling_data),
+ : OnePriorityRectIterator(tiling,
+ tiling_data,
+ PictureLayerTiling::SOON_BORDER_RECT),
pending_visible_rect_(tiling->pending_visible_rect()) {
if (!tiling_->has_soon_border_rect_tiles())
return;
@@ -275,6 +296,8 @@ TilingSetRasterQueueAll::SoonBorderTilingIterator::SoonBorderTilingIterator(
++(*this);
return;
}
+ // TODO(e_hakkinen): This is not needed as GetFirstTileAndCheckIfValid
+ // does the same checking.
if (current_tile_.tile()->content_rect().Intersects(pending_visible_rect_))
++(*this);
}
@@ -283,6 +306,8 @@ TilingSetRasterQueueAll::SoonBorderTilingIterator&
TilingSetRasterQueueAll::SoonBorderTilingIterator::
operator++() {
AdvanceToNextTile(&iterator_);
+ // TODO(e_hakkinen): This is not needed as GetFirstTileAndCheckIfValid called
+ // by AdvanceToNextTile does the same checking.
while (!done()) {
if (!current_tile_.tile()->content_rect().Intersects(pending_visible_rect_))
break;
@@ -295,7 +320,9 @@ TilingSetRasterQueueAll::SoonBorderTilingIterator&
TilingSetRasterQueueAll::EventuallyTilingIterator::EventuallyTilingIterator(
PictureLayerTiling* tiling,
TilingData* tiling_data)
- : OnePriorityRectIterator(tiling, tiling_data),
+ : OnePriorityRectIterator(tiling,
+ tiling_data,
+ PictureLayerTiling::EVENTUALLY_RECT),
pending_visible_rect_(tiling->pending_visible_rect()) {
if (!tiling_->has_eventually_rect_tiles())
return;
@@ -308,6 +335,8 @@ TilingSetRasterQueueAll::EventuallyTilingIterator::EventuallyTilingIterator(
++(*this);
return;
}
+ // TODO(e_hakkinen): This is not needed as GetFirstTileAndCheckIfValid
+ // does the same checking.
if (current_tile_.tile()->content_rect().Intersects(pending_visible_rect_))
++(*this);
}
@@ -316,6 +345,8 @@ TilingSetRasterQueueAll::EventuallyTilingIterator&
TilingSetRasterQueueAll::EventuallyTilingIterator::
operator++() {
AdvanceToNextTile(&iterator_);
+ // TODO(e_hakkinen): This is not needed as GetFirstTileAndCheckIfValid called
+ // by AdvanceToNextTile does the same checking.
while (!done()) {
if (!current_tile_.tile()->content_rect().Intersects(pending_visible_rect_))
break;
@@ -331,7 +362,7 @@ TilingSetRasterQueueAll::TilingIterator::TilingIterator() : tiling_(nullptr) {
TilingSetRasterQueueAll::TilingIterator::TilingIterator(
PictureLayerTiling* tiling,
TilingData* tiling_data)
- : tiling_(tiling), tiling_data_(tiling_data), phase_(VISIBLE_RECT) {
+ : tiling_(tiling), tiling_data_(tiling_data), phase_(Phase::VISIBLE_RECT) {
visible_iterator_ = VisibleTilingIterator(tiling_, tiling_data_);
if (visible_iterator_.done()) {
AdvancePhase();
@@ -344,32 +375,32 @@ TilingSetRasterQueueAll::TilingIterator::~TilingIterator() {
}
void TilingSetRasterQueueAll::TilingIterator::AdvancePhase() {
- DCHECK_LT(phase_, EVENTUALLY_RECT);
+ DCHECK_LT(phase_, Phase::EVENTUALLY_RECT);
current_tile_ = PrioritizedTile();
- while (!current_tile_.tile() && phase_ < EVENTUALLY_RECT) {
+ while (!current_tile_.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_;
@@ -382,7 +413,7 @@ TilingSetRasterQueueAll::TilingIterator&
TilingSetRasterQueueAll::TilingIterator::
operator++() {
switch (phase_) {
- case VISIBLE_RECT:
+ case Phase::VISIBLE_RECT:
++visible_iterator_;
if (visible_iterator_.done()) {
AdvancePhase();
@@ -390,7 +421,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();
@@ -398,7 +429,7 @@ TilingSetRasterQueueAll::TilingIterator&
}
current_tile_ = *pending_visible_iterator_;
break;
- case SKEWPORT_RECT:
+ case Phase::SKEWPORT_RECT:
++skewport_iterator_;
if (skewport_iterator_.done()) {
AdvancePhase();
@@ -406,7 +437,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();
@@ -414,7 +445,7 @@ TilingSetRasterQueueAll::TilingIterator&
}
current_tile_ = *soon_border_iterator_;
break;
- case EVENTUALLY_RECT:
+ case Phase::EVENTUALLY_RECT:
++eventually_iterator_;
if (eventually_iterator_.done()) {
current_tile_ = PrioritizedTile();
« no previous file with comments | « cc/resources/tiling_set_raster_queue_all.h ('k') | cc/resources/tiling_set_raster_queue_required.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698