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

Unified Diff: cc/tiles/picture_layer_tiling.cc

Issue 2726343004: cc: Optimize decode scheduling for checker-images. (Closed)
Patch Set: rebase Created 3 years, 8 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/tiles/picture_layer_tiling.h ('k') | cc/tiles/prioritized_tile.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/tiles/picture_layer_tiling.cc
diff --git a/cc/tiles/picture_layer_tiling.cc b/cc/tiles/picture_layer_tiling.cc
index 75fd37debc3845e24f80cd7e28a323ce5a9c7b61..ecf8fe1c188b29fd920f5fcf5ca84747fd932c72 100644
--- a/cc/tiles/picture_layer_tiling.cc
+++ b/cc/tiles/picture_layer_tiling.cc
@@ -804,6 +804,39 @@ bool PictureLayerTiling::IsTileRequiredForDraw(const Tile* tile) const {
return true;
}
+bool PictureLayerTiling::ShouldDecodeCheckeredImagesForTile(
+ const Tile* tile) const {
+ // If this is the pending tree and the tile is not occluded, any checkered
+ // images on this tile should be decoded.
+ if (tree_ == PENDING_TREE)
+ return !IsTileOccludedOnCurrentTree(tile);
+
+ DCHECK_EQ(tree_, ACTIVE_TREE);
+ const PictureLayerTiling* pending_twin =
+ client_->GetPendingOrActiveTwinTiling(this);
+
+ // If we don't have a pending twin, then 2 cases are possible. Either we don't
+ // have a pending tree, in which case we should be decoding images for tiles
+ // which are unoccluded.
+ // If we do have a pending tree, then not having a twin implies that this
+ // tiling will be evicted upon activation. TODO(khushalsagar): Plumb this
+ // information here and return false for this case.
+ if (!pending_twin)
+ return !IsTileOccludedOnCurrentTree(tile);
+
+ // If the tile will be replaced upon activation, then we don't need to process
+ // it for checkered images. Since once the pending tree is activated, it is
+ // the new active tree's content that we will invalidate and replace once the
+ // decode finishes.
+ if (!TilingMatchesTileIndices(pending_twin) ||
+ pending_twin->TileAt(tile->tiling_i_index(), tile->tiling_j_index())) {
+ return false;
+ }
+
+ // Ask the pending twin if this tile will become occluded upon activation.
+ return !pending_twin->IsTileOccludedOnCurrentTree(tile);
+}
+
void PictureLayerTiling::UpdateRequiredStatesOnTile(Tile* tile) const {
tile->set_required_for_activation(IsTileRequiredForActivation(tile));
tile->set_required_for_draw(IsTileRequiredForDraw(tile));
@@ -832,7 +865,8 @@ PrioritizedTile PictureLayerTiling::MakePrioritizedTile(
tile_priority.distance_to_visible >
0.5f * max_skewport_extent_in_screen_space_);
return PrioritizedTile(tile, this, tile_priority, IsTileOccluded(tile),
- process_for_images_only);
+ process_for_images_only,
+ ShouldDecodeCheckeredImagesForTile(tile));
}
std::map<const Tile*, PrioritizedTile>
« no previous file with comments | « cc/tiles/picture_layer_tiling.h ('k') | cc/tiles/prioritized_tile.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698