Chromium Code Reviews| Index: cc/tiles/picture_layer_tiling_set.cc |
| diff --git a/cc/tiles/picture_layer_tiling_set.cc b/cc/tiles/picture_layer_tiling_set.cc |
| index 55b86ae95a4bab317e978d2945f9b64a97d923db..ba69c611a906efdc1d3617ca554af3ccb21a3ff7 100644 |
| --- a/cc/tiles/picture_layer_tiling_set.cc |
| +++ b/cc/tiles/picture_layer_tiling_set.cc |
| @@ -83,11 +83,16 @@ void PictureLayerTilingSet::CopyTilingsAndPropertiesFromPendingTwin( |
| bool tiling_sort_required = false; |
| for (const auto& pending_twin_tiling : pending_twin_set->tilings_) { |
| + ScaleTranslate2d raster_transform = pending_twin_tiling->raster_transform(); |
| PictureLayerTiling* this_tiling = |
| FindTilingWithScaleKey(pending_twin_tiling->contents_scale_key()); |
| + if (this_tiling && this_tiling->raster_transform() != raster_transform) { |
|
enne (OOO)
2017/01/03 22:53:53
This could use some unit testing too.
trchen
2017/03/28 21:44:01
Done.
|
| + Remove(this_tiling); |
| + this_tiling = nullptr; |
| + } |
| if (!this_tiling) { |
| std::unique_ptr<PictureLayerTiling> new_tiling(new PictureLayerTiling( |
| - tree_, pending_twin_tiling->raster_scales(), raster_source_, client_, |
| + tree_, raster_transform, raster_source_, client_, |
| kMaxSoonBorderDistanceInScreenPixels, max_preraster_distance_)); |
| tilings_.push_back(std::move(new_tiling)); |
| this_tiling = tilings_.back().get(); |
| @@ -270,22 +275,20 @@ void PictureLayerTilingSet::MarkAllTilingsNonIdeal() { |
| } |
| PictureLayerTiling* PictureLayerTilingSet::AddTiling( |
| - float contents_scale_key, |
| + const ScaleTranslate2d& raster_transform, |
| scoped_refptr<RasterSource> raster_source) { |
| if (!raster_source_) |
| raster_source_ = raster_source; |
| #if DCHECK_IS_ON() |
| for (size_t i = 0; i < tilings_.size(); ++i) { |
| - DCHECK_NE(tilings_[i]->contents_scale_key(), contents_scale_key); |
| + DCHECK_NE(tilings_[i]->contents_scale_key(), raster_transform.scale()); |
| DCHECK_EQ(tilings_[i]->raster_source(), raster_source.get()); |
| } |
| #endif // DCHECK_IS_ON() |
| - gfx::SizeF raster_scales(contents_scale_key, |
| - contents_scale_key / aspect_ratio_); |
| tilings_.push_back(base::MakeUnique<PictureLayerTiling>( |
| - tree_, raster_scales, raster_source, client_, |
| + tree_, raster_transform, raster_source, client_, |
| kMaxSoonBorderDistanceInScreenPixels, max_preraster_distance_)); |
| PictureLayerTiling* appended = tilings_.back().get(); |
| state_since_last_tile_priority_update_.added_tilings = true; |
| @@ -383,8 +386,7 @@ float PictureLayerTilingSet::GetMaximumContentsScale() const { |
| if (tilings_.empty()) |
| return 0.f; |
| // The first tiling has the largest contents scale. |
| - return std::max(tilings_[0]->raster_scales().width(), |
| - tilings_[0]->raster_scales().height()); |
| + return tilings_[0]->raster_transform().scale(); |
| } |
| bool PictureLayerTilingSet::TilingsNeedUpdate( |