| Index: cc/layers/picture_layer_impl.cc
|
| diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc
|
| index 813bc47877c1f41cd803f2ab5ea4b5c9c45ec01d..60e4b4ebabd8d95f18e880296201d947f5e6f9fd 100644
|
| --- a/cc/layers/picture_layer_impl.cc
|
| +++ b/cc/layers/picture_layer_impl.cc
|
| @@ -276,7 +276,7 @@ void PictureLayerImpl::AppendQuads(RenderPass* render_pass,
|
|
|
| // Keep track of the tilings that were used so that tilings that are
|
| // unused can be considered for removal.
|
| - std::vector<PictureLayerTiling*> seen_tilings;
|
| + last_append_quads_tilings_.clear();
|
|
|
| // Ignore missing tiles outside of viewport for tile priority. This is
|
| // normally the same as draw viewport but can be independently overridden by
|
| @@ -403,8 +403,10 @@ void PictureLayerImpl::AppendQuads(RenderPass* render_pass,
|
| if (iter.resolution() != LOW_RESOLUTION)
|
| only_used_low_res_last_append_quads_ = false;
|
|
|
| - if (seen_tilings.empty() || seen_tilings.back() != iter.CurrentTiling())
|
| - seen_tilings.push_back(iter.CurrentTiling());
|
| + if (last_append_quads_tilings_.empty() ||
|
| + last_append_quads_tilings_.back() != iter.CurrentTiling()) {
|
| + last_append_quads_tilings_.push_back(iter.CurrentTiling());
|
| + }
|
| }
|
|
|
| if (missing_tile_count) {
|
| @@ -421,7 +423,7 @@ void PictureLayerImpl::AppendQuads(RenderPass* render_pass,
|
| // that this is at the expense of doing cause more frequent re-painting. A
|
| // better scheme would be to maintain a tighter visible_content_rect for the
|
| // finer tilings.
|
| - CleanUpTilingsOnActiveLayer(seen_tilings);
|
| + CleanUpTilingsOnActiveLayer(last_append_quads_tilings_);
|
| }
|
|
|
| bool PictureLayerImpl::UpdateTiles(const Occlusion& occlusion_in_content_space,
|
| @@ -442,6 +444,14 @@ bool PictureLayerImpl::UpdateTiles(const Occlusion& occlusion_in_content_space,
|
| return false;
|
| }
|
|
|
| + // Remove any non-ideal tilings that were not used last time we generated
|
| + // quads to save memory and processing time. Note that pending tree should
|
| + // only have one or two tilings (high and low res), so only clean up the
|
| + // active layer. This cleans it up here in case AppendQuads didn't run.
|
| + // If it did run, this would not remove any additional tilings.
|
| + if (GetTree() == ACTIVE_TREE)
|
| + CleanUpTilingsOnActiveLayer(last_append_quads_tilings_);
|
| +
|
| UpdateIdealScales();
|
|
|
| if (!raster_contents_scale_ || ShouldAdjustRasterScale()) {
|
| @@ -460,7 +470,6 @@ bool PictureLayerImpl::UpdateTiles(const Occlusion& occlusion_in_content_space,
|
|
|
| if (draw_transform_is_animating())
|
| raster_source_->SetShouldAttemptToUseDistanceFieldText();
|
| -
|
| return UpdateTilePriorities(occlusion_in_content_space);
|
| }
|
|
|
| @@ -992,7 +1001,7 @@ void PictureLayerImpl::RecalculateRasterScales() {
|
| }
|
|
|
| void PictureLayerImpl::CleanUpTilingsOnActiveLayer(
|
| - std::vector<PictureLayerTiling*> used_tilings) {
|
| + const std::vector<PictureLayerTiling*>& used_tilings) {
|
| DCHECK(layer_tree_impl()->IsActiveTree());
|
| if (tilings_->num_tilings() == 0)
|
| return;
|
|
|