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

Unified Diff: cc/resources/tiling_set_eviction_queue.cc

Issue 1130123003: cc: Separate the priority from the tile and put in new PrioritizedTile (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge 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_eviction_queue.h ('k') | cc/resources/tiling_set_raster_queue_all.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/resources/tiling_set_eviction_queue.cc
diff --git a/cc/resources/tiling_set_eviction_queue.cc b/cc/resources/tiling_set_eviction_queue.cc
index f078e90b889f1263ef667ce9ab980a5e66e9e001..c98cc7afd969dc14be9148a892c4a831a0ac0602 100644
--- a/cc/resources/tiling_set_eviction_queue.cc
+++ b/cc/resources/tiling_set_eviction_queue.cc
@@ -10,9 +10,7 @@ namespace cc {
TilingSetEvictionQueue::TilingSetEvictionQueue(
PictureLayerTilingSet* tiling_set)
- : tree_(tiling_set->tree()),
- phase_(EVENTUALLY_RECT),
- current_tile_(nullptr) {
+ : tree_(tiling_set->tree()), phase_(EVENTUALLY_RECT) {
// Early out if the layer has no tilings.
if (!tiling_set->num_tilings())
return;
@@ -73,8 +71,8 @@ void TilingSetEvictionQueue::GenerateTilingOrder(
}
void TilingSetEvictionQueue::AdvancePhase() {
- current_tile_ = nullptr;
- while (!current_tile_ &&
+ current_tile_ = PrioritizedTile();
+ while (!current_tile_.tile() &&
phase_ != VISIBLE_RECT_REQUIRED_FOR_ACTIVATION_UNOCCLUDED) {
phase_ = static_cast<Phase>(phase_ + 1);
switch (phase_) {
@@ -136,22 +134,17 @@ void TilingSetEvictionQueue::AdvancePhase() {
}
bool TilingSetEvictionQueue::IsEmpty() const {
- return !current_tile_;
+ return !current_tile_.tile();
}
-Tile* TilingSetEvictionQueue::Top() {
- DCHECK(!IsEmpty());
- return current_tile_;
-}
-
-const Tile* TilingSetEvictionQueue::Top() const {
+const PrioritizedTile& TilingSetEvictionQueue::Top() const {
DCHECK(!IsEmpty());
return current_tile_;
}
void TilingSetEvictionQueue::Pop() {
DCHECK(!IsEmpty());
- current_tile_ = nullptr;
+ current_tile_ = PrioritizedTile();
switch (phase_) {
case EVENTUALLY_RECT:
++eventually_iterator_;
@@ -183,24 +176,20 @@ void TilingSetEvictionQueue::Pop() {
current_tile_ = *visible_iterator_;
break;
}
- if (!current_tile_)
+ if (!current_tile_.tile())
AdvancePhase();
}
// EvictionRectIterator
TilingSetEvictionQueue::EvictionRectIterator::EvictionRectIterator()
- : tile_(nullptr),
- tilings_(nullptr),
- tree_(ACTIVE_TREE),
- tiling_index_(0) {
+ : tilings_(nullptr), tree_(ACTIVE_TREE), tiling_index_(0) {
}
TilingSetEvictionQueue::EvictionRectIterator::EvictionRectIterator(
std::vector<PictureLayerTiling*>* tilings,
WhichTree tree,
bool skip_pending_visible_rect)
- : tile_(nullptr),
- tilings_(tilings),
+ : tilings_(tilings),
tree_(tree),
skip_pending_visible_rect_(skip_pending_visible_rect),
tiling_index_(0) {
@@ -213,7 +202,7 @@ bool TilingSetEvictionQueue::EvictionRectIterator::AdvanceToNextTile(
while (!found_tile) {
++(*iterator);
if (!(*iterator)) {
- tile_ = nullptr;
+ prioritized_tile_ = PrioritizedTile();
break;
}
found_tile = GetFirstTileAndCheckIfValid(iterator);
@@ -225,15 +214,17 @@ template <typename TilingIteratorType>
bool TilingSetEvictionQueue::EvictionRectIterator::GetFirstTileAndCheckIfValid(
TilingIteratorType* iterator) {
PictureLayerTiling* tiling = (*tilings_)[tiling_index_];
- tile_ = tiling->TileAt(iterator->index_x(), iterator->index_y());
+ Tile* tile = tiling->TileAt(iterator->index_x(), iterator->index_y());
+ prioritized_tile_ = PrioritizedTile();
// If there's nothing to evict, return false.
- if (!tile_ || !tile_->HasResource())
+ if (!tile || !tile->HasResource())
return false;
if (skip_pending_visible_rect_ &&
- tiling->pending_visible_rect().Intersects(tile_->content_rect())) {
+ tiling->pending_visible_rect().Intersects(tile->content_rect())) {
return false;
}
- (*tilings_)[tiling_index_]->UpdateTilePriority(tile_);
+ (*tilings_)[tiling_index_]->UpdateRequiredStatesOnTile(tile);
+ prioritized_tile_ = (*tilings_)[tiling_index_]->MakePrioritizedTile(tile);
// In other cases, the tile we got is a viable candidate, return true.
return true;
}
@@ -422,7 +413,7 @@ TilingSetEvictionQueue::PendingVisibleTilingIterator::
++(*this);
return;
}
- if (!TileMatchesRequiredFlags(tile_)) {
+ if (!TileMatchesRequiredFlags(prioritized_tile_)) {
++(*this);
return;
}
@@ -432,7 +423,7 @@ TilingSetEvictionQueue::PendingVisibleTilingIterator&
TilingSetEvictionQueue::PendingVisibleTilingIterator::
operator++() {
bool found_tile = AdvanceToNextTile(&iterator_);
- while (found_tile && !TileMatchesRequiredFlags(tile_))
+ while (found_tile && !TileMatchesRequiredFlags(prioritized_tile_))
found_tile = AdvanceToNextTile(&iterator_);
while (!found_tile && (tiling_index_ + 1) < tilings_->size()) {
@@ -446,16 +437,16 @@ TilingSetEvictionQueue::PendingVisibleTilingIterator&
found_tile = GetFirstTileAndCheckIfValid(&iterator_);
if (!found_tile)
found_tile = AdvanceToNextTile(&iterator_);
- while (found_tile && !TileMatchesRequiredFlags(tile_))
+ while (found_tile && !TileMatchesRequiredFlags(prioritized_tile_))
found_tile = AdvanceToNextTile(&iterator_);
}
return *this;
}
bool TilingSetEvictionQueue::PendingVisibleTilingIterator::
- TileMatchesRequiredFlags(const Tile* tile) const {
- bool activation_flag_matches =
- tile->required_for_activation() == return_required_for_activation_tiles_;
+ TileMatchesRequiredFlags(const PrioritizedTile& tile) const {
+ bool activation_flag_matches = tile.tile()->required_for_activation() ==
+ return_required_for_activation_tiles_;
return activation_flag_matches;
}
@@ -492,7 +483,7 @@ TilingSetEvictionQueue::VisibleTilingIterator::VisibleTilingIterator(
++(*this);
return;
}
- if (!TileMatchesRequiredFlags(tile_)) {
+ if (!TileMatchesRequiredFlags(prioritized_tile_)) {
++(*this);
return;
}
@@ -502,7 +493,7 @@ TilingSetEvictionQueue::VisibleTilingIterator&
TilingSetEvictionQueue::VisibleTilingIterator::
operator++() {
bool found_tile = AdvanceToNextTile(&iterator_);
- while (found_tile && !TileMatchesRequiredFlags(tile_))
+ while (found_tile && !TileMatchesRequiredFlags(prioritized_tile_))
found_tile = AdvanceToNextTile(&iterator_);
while (!found_tile && (tiling_index_ + 1) < tilings_->size()) {
@@ -517,17 +508,17 @@ TilingSetEvictionQueue::VisibleTilingIterator&
found_tile = GetFirstTileAndCheckIfValid(&iterator_);
if (!found_tile)
found_tile = AdvanceToNextTile(&iterator_);
- while (found_tile && !TileMatchesRequiredFlags(tile_))
+ while (found_tile && !TileMatchesRequiredFlags(prioritized_tile_))
found_tile = AdvanceToNextTile(&iterator_);
}
return *this;
}
bool TilingSetEvictionQueue::VisibleTilingIterator::TileMatchesRequiredFlags(
- const Tile* tile) const {
- bool activation_flag_matches =
- tile->required_for_activation() == return_required_for_activation_tiles_;
- bool occluded_flag_matches = tile->is_occluded() == return_occluded_tiles_;
+ const PrioritizedTile& tile) const {
+ bool activation_flag_matches = tile.tile()->required_for_activation() ==
+ return_required_for_activation_tiles_;
+ bool occluded_flag_matches = tile.is_occluded() == return_occluded_tiles_;
return activation_flag_matches && occluded_flag_matches;
}
« no previous file with comments | « cc/resources/tiling_set_eviction_queue.h ('k') | cc/resources/tiling_set_raster_queue_all.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698