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

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: 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
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;

Powered by Google App Engine
This is Rietveld 408576698