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

Unified Diff: cc/tiles/picture_layer_tiling.cc

Issue 2726343004: cc: Optimize decode scheduling for checker-images. (Closed)
Patch Set: tested 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
Index: cc/tiles/picture_layer_tiling.cc
diff --git a/cc/tiles/picture_layer_tiling.cc b/cc/tiles/picture_layer_tiling.cc
index 344cb32b6c04cc92ce00887c8862c30add532d73..8b7d5757fb88c7e7868cf4b962febefc526d574e 100644
--- a/cc/tiles/picture_layer_tiling.cc
+++ b/cc/tiles/picture_layer_tiling.cc
@@ -808,6 +808,38 @@ bool PictureLayerTiling::IsTileRequiredForDraw(const Tile* tile) const {
return true;
}
+bool PictureLayerTiling::ShouldDecodeCheckeredImagesForTile(
vmpstr 2017/04/18 00:20:00 None of the checks here really care if the tile is
Khushal 2017/04/19 06:16:41 Answered above.
+ const Tile* tile) const {
+ // If this is the pending tree and the tile is not occluded, it needs to be
+ // decoded for checker-images.
vmpstr 2017/04/18 00:20:00 Tile isn't "decoded", can you rephrase the comment
Khushal 2017/04/19 06:16:41 Done.
+ 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, the tiling may be evicted upon activation,
+ // or we may not have a pending tree. So use the occlusion on the current
vmpstr 2017/04/18 00:20:00 Can you elaborate on this?
Khushal 2017/04/19 06:16:41 The check is for making sure that we don't process
+ // tree.
+ // TODO(khushalsagar): If we have a pending tree but no twin tiling, this tile
+ // will get nuked on activation.
+ 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);
+}
vmpstr 2017/04/18 00:20:00 This function sounds very similar to RequiredForAc
Khushal 2017/04/19 06:16:41 Its similar to RequiredForActivation for the part
+
void PictureLayerTiling::UpdateRequiredStatesOnTile(Tile* tile) const {
tile->set_required_for_activation(IsTileRequiredForActivation(tile));
tile->set_required_for_draw(IsTileRequiredForDraw(tile));
@@ -836,7 +868,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>

Powered by Google App Engine
This is Rietveld 408576698