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( |