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

Unified Diff: cc/resources/picture_layer_tiling.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/picture_layer_tiling.cc
diff --git a/cc/resources/picture_layer_tiling.cc b/cc/resources/picture_layer_tiling.cc
index 015c492dcc8600d711791d76a64d4213efdf90a4..fedf78dc3182d816abd56121bb5d6a91444e82cd 100644
--- a/cc/resources/picture_layer_tiling.cc
+++ b/cc/resources/picture_layer_tiling.cc
@@ -809,8 +809,9 @@ bool PictureLayerTiling::IsTileRequiredForDraw(const Tile* tile) const {
return true;
}
-void PictureLayerTiling::UpdateTilePriority(Tile* tile) const {
- tile->set_priority(ComputePriorityForTile(tile));
+void PictureLayerTiling::UpdateTilePriority(Tile* tile,
+ PriorityRect priority_rect) const {
+ tile->set_priority(ComputePriorityForTile(tile, priority_rect));
tile->set_is_occluded(IsTileOccluded(tile));
tile->set_required_for_activation(IsTileRequiredForActivation(tile));
tile->set_required_for_draw(IsTileRequiredForDraw(tile));
@@ -824,45 +825,73 @@ void PictureLayerTiling::VerifyAllTilesHaveCurrentRasterSource() const {
}
TilePriority PictureLayerTiling::ComputePriorityForTile(
- const Tile* tile) const {
+ const Tile* tile,
+ PriorityRect priority_rect) const {
// TODO(vmpstr): See if this can be moved to iterators.
TilePriority::PriorityBin max_tile_priority_bin =
client_->GetMaxTilePriorityBin();
+ DCHECK_EQ(ComputePriorityRectForTile(tile), priority_rect);
DCHECK_EQ(TileAt(tile->tiling_i_index(), tile->tiling_j_index()), tile);
- gfx::Rect tile_bounds =
- tiling_data_.TileBounds(tile->tiling_i_index(), tile->tiling_j_index());
- if (max_tile_priority_bin <= TilePriority::NOW &&
- current_visible_rect_.Intersects(tile_bounds)) {
- return TilePriority(resolution_, TilePriority::NOW, 0);
- }
+ TilePriority::PriorityBin priority_bin = max_tile_priority_bin;
- if (max_tile_priority_bin <= TilePriority::SOON &&
- pending_visible_rect().Intersects(tile_bounds)) {
- return TilePriority(resolution_, TilePriority::SOON, 0);
+ switch (priority_rect) {
+ case VISIBLE_RECT:
+ return TilePriority(resolution_, tile_priority_bin, 0);
+ case PENDING_VISIBLE_RECT:
+ if (max_tile_priority_bin <= TilePriority::SOON)
+ return TilePriority(resolution_, TilePriority::SOON, 0);
+ priority_bin = TilePriority::EVENTUALLY;
+ break;
+ case SKEWPORT_RECT:
+ case SOON_BORDER_RECT:
+ if (max_tile_priority_bin <= TilePriority::SOON)
+ priority_bin = TilePriority::SOON;
+ break;
+ case EVENTUALLY_RECT:
+ priority_bin = TilePriority::EVENTUALLY;
+ break;
}
+ gfx::Rect tile_bounds =
+ tiling_data_.TileBounds(tile->tiling_i_index(), tile->tiling_j_index());
DCHECK_GT(current_content_to_screen_scale_, 0.f);
float distance_to_visible =
current_visible_rect_.ManhattanInternalDistance(tile_bounds) *
current_content_to_screen_scale_;
- if (max_tile_priority_bin <= TilePriority::SOON &&
- (current_soon_border_rect_.Intersects(tile_bounds) ||
- current_skewport_rect_.Intersects(tile_bounds))) {
- return TilePriority(resolution_, TilePriority::SOON, distance_to_visible);
- }
+ return TilePriority(resolution_, priority_bin, distance_to_visible);
+}
+
+PictureLayerTiling::PriorityRect PictureLayerTiling::ComputePriorityRectForTile(
vmpstr 2015/05/05 18:04:01 Is this function only used in DCHECKs and tracing?
USE eero AT chromium.org 2015/05/06 12:05:20 It is used also by TilingSetRasterQueueRequired.
+ const Tile* tile) const {
+ DCHECK_EQ(TileAt(tile->tiling_i_index(), tile->tiling_j_index()), tile);
+ gfx::Rect tile_bounds =
+ tiling_data_.TileBounds(tile->tiling_i_index(), tile->tiling_j_index());
+
+ if (current_visible_rect_.Intersects(tile_bounds))
+ return VISIBLE_RECT;
+
+ if (pending_visible_rect().Intersects(tile_bounds))
+ return PENDING_VISIBLE_RECT;
+
+ if (current_skewport_rect_.Intersects(tile_bounds))
+ return SKEWPORT_RECT;
+
+ if (current_soon_border_rect_.Intersects(tile_bounds))
+ return SOON_BORDER_RECT;
- return TilePriority(resolution_, TilePriority::EVENTUALLY,
- distance_to_visible);
+ DCHECK(current_eventually_rect_.Intersects(tile_bounds));
+ return EVENTUALLY_RECT;
}
void PictureLayerTiling::GetAllTilesAndPrioritiesForTracing(
std::map<const Tile*, TilePriority>* tile_map) const {
for (const auto& tile_pair : tiles_) {
const Tile* tile = tile_pair.second.get();
- const TilePriority& priority = ComputePriorityForTile(tile);
+ const TilePriority& priority =
+ ComputePriorityForTile(tile, ComputePriorityRectForTile(tile));
// Store combined priority.
(*tile_map)[tile] = priority;
}

Powered by Google App Engine
This is Rietveld 408576698