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 d9c21abaed9ca1fa3ca7b576fada379fb282328a..5452019117bd55e160779da311e96f0f01addf20 100644 |
--- a/cc/tiles/picture_layer_tiling_set.cc |
+++ b/cc/tiles/picture_layer_tiling_set.cc |
@@ -24,7 +24,7 @@ class LargestToSmallestScaleFunctor { |
public: |
bool operator()(const std::unique_ptr<PictureLayerTiling>& left, |
const std::unique_ptr<PictureLayerTiling>& right) { |
- return left->contents_scale() > right->contents_scale(); |
+ return left->contents_scale_key() > right->contents_scale_key(); |
} |
}; |
@@ -84,11 +84,17 @@ void PictureLayerTilingSet::CopyTilingsAndPropertiesFromPendingTwin( |
bool tiling_sort_required = false; |
for (const auto& pending_twin_tiling : pending_twin_set->tilings_) { |
+ gfx::AxisTransform2d raster_transform = |
+ pending_twin_tiling->raster_transform(); |
PictureLayerTiling* this_tiling = |
- FindTilingWithScaleKey(pending_twin_tiling->contents_scale()); |
+ FindTilingWithScaleKey(pending_twin_tiling->contents_scale_key()); |
+ if (this_tiling && this_tiling->raster_transform() != raster_transform) { |
+ Remove(this_tiling); |
+ this_tiling = nullptr; |
+ } |
if (!this_tiling) { |
std::unique_ptr<PictureLayerTiling> new_tiling(new PictureLayerTiling( |
- tree_, pending_twin_tiling->contents_scale(), 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(); |
@@ -124,7 +130,7 @@ void PictureLayerTilingSet::UpdateTilingsToCurrentRasterSourceForActivation( |
// If the tiling is not shared (FindTilingWithScale returns nullptr), then |
// invalidate tiles and update them to the new raster source. |
for (const auto& tiling : tilings_) { |
- if (pending_twin_set->FindTilingWithScaleKey(tiling->contents_scale())) |
+ if (pending_twin_set->FindTilingWithScaleKey(tiling->contents_scale_key())) |
continue; |
tiling->SetRasterSourceAndResize(raster_source); |
@@ -241,8 +247,8 @@ void PictureLayerTilingSet::CleanUpTilings( |
std::vector<PictureLayerTiling*> to_remove; |
for (const auto& tiling : tilings_) { |
// Keep all tilings within the min/max scales. |
- if (tiling->contents_scale() >= min_acceptable_high_res_scale_key && |
- tiling->contents_scale() <= max_acceptable_high_res_scale_key) { |
+ if (tiling->contents_scale_key() >= min_acceptable_high_res_scale_key && |
+ tiling->contents_scale_key() <= max_acceptable_high_res_scale_key) { |
continue; |
} |
@@ -277,20 +283,20 @@ void PictureLayerTilingSet::MarkAllTilingsNonIdeal() { |
} |
PictureLayerTiling* PictureLayerTilingSet::AddTiling( |
- float contents_scale, |
+ const gfx::AxisTransform2d& 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(), contents_scale); |
+ DCHECK_NE(tilings_[i]->contents_scale_key(), raster_transform.scale()); |
DCHECK_EQ(tilings_[i]->raster_source(), raster_source.get()); |
} |
#endif // DCHECK_IS_ON() |
tilings_.push_back(base::MakeUnique<PictureLayerTiling>( |
- tree_, contents_scale, 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; |
@@ -309,7 +315,7 @@ int PictureLayerTilingSet::NumHighResTilings() const { |
PictureLayerTiling* PictureLayerTilingSet::FindTilingWithScaleKey( |
float scale_key) const { |
for (size_t i = 0; i < tilings_.size(); ++i) { |
- if (tilings_[i]->contents_scale() == scale_key) |
+ if (tilings_[i]->contents_scale_key() == scale_key) |
return tilings_[i].get(); |
} |
return nullptr; |
@@ -332,7 +338,7 @@ void PictureLayerTilingSet::RemoveTilingsBelowScaleKey( |
base::EraseIf( |
tilings_, |
[minimum_scale_key](const std::unique_ptr<PictureLayerTiling>& tiling) { |
- return tiling->contents_scale() < minimum_scale_key; |
+ return tiling->contents_scale_key() < minimum_scale_key; |
}); |
} |
@@ -341,7 +347,7 @@ void PictureLayerTilingSet::RemoveTilingsAboveScaleKey( |
base::EraseIf( |
tilings_, |
[maximum_scale_key](const std::unique_ptr<PictureLayerTiling>& tiling) { |
- return tiling->contents_scale() > maximum_scale_key; |
+ return tiling->contents_scale_key() > maximum_scale_key; |
}); |
} |
@@ -372,7 +378,7 @@ float PictureLayerTilingSet::GetSnappedContentsScaleKey( |
float snapped_contents_scale = start_scale; |
float snapped_ratio = snap_to_existing_tiling_ratio; |
for (const auto& tiling : tilings_) { |
- float tiling_contents_scale = tiling->contents_scale(); |
+ float tiling_contents_scale = tiling->contents_scale_key(); |
float ratio = LargerRatio(tiling_contents_scale, start_scale); |
if (ratio < snapped_ratio) { |
snapped_contents_scale = tiling_contents_scale; |
@@ -386,7 +392,7 @@ float PictureLayerTilingSet::GetMaximumContentsScale() const { |
if (tilings_.empty()) |
return 0.f; |
// The first tiling has the largest contents scale. |
- return tilings_[0]->contents_scale(); |
+ return tilings_[0]->raster_transform().scale(); |
} |
bool PictureLayerTilingSet::TilingsNeedUpdate( |
@@ -574,7 +580,7 @@ PictureLayerTilingSet::CoverageIterator::CoverageIterator( |
size_t tilings_size = set_->tilings_.size(); |
for (ideal_tiling_ = 0; ideal_tiling_ < tilings_size; ++ideal_tiling_) { |
PictureLayerTiling* tiling = set_->tilings_[ideal_tiling_].get(); |
- if (tiling->contents_scale() < ideal_contents_scale) { |
+ if (tiling->contents_scale_key() < ideal_contents_scale) { |
if (ideal_tiling_ > 0) |
ideal_tiling_--; |
break; |