| 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 c338ea57bf05f8e247f0b4ab276d3e95d84f6968..688d4a23e8ea43745b95f8698569260af2d4cd6f 100644
|
| --- a/cc/tiles/picture_layer_tiling_set.cc
|
| +++ b/cc/tiles/picture_layer_tiling_set.cc
|
| @@ -22,7 +22,8 @@ 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_transform().pre_scale() >
|
| + right->contents_transform().pre_scale();
|
| }
|
| };
|
|
|
| @@ -80,11 +81,18 @@ void PictureLayerTilingSet::CopyTilingsAndPropertiesFromPendingTwin(
|
|
|
| bool tiling_sort_required = false;
|
| for (const auto& pending_twin_tiling : pending_twin_set->tilings_) {
|
| - float contents_scale = pending_twin_tiling->contents_scale();
|
| - PictureLayerTiling* this_tiling = FindTilingWithScale(contents_scale);
|
| + ScaleTranslate2d contents_transform =
|
| + pending_twin_tiling->contents_transform();
|
| + PictureLayerTiling* this_tiling =
|
| + FindTilingWithScale(contents_transform.pre_scale());
|
| + if (this_tiling &&
|
| + this_tiling->contents_transform() != contents_transform) {
|
| + Remove(this_tiling);
|
| + this_tiling = nullptr;
|
| + }
|
| if (!this_tiling) {
|
| std::unique_ptr<PictureLayerTiling> new_tiling(new PictureLayerTiling(
|
| - tree_, contents_scale, raster_source_, client_));
|
| + tree_, contents_transform, raster_source_, client_));
|
| tilings_.push_back(std::move(new_tiling));
|
| this_tiling = tilings_.back().get();
|
| tiling_sort_required = true;
|
| @@ -119,7 +127,8 @@ 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->FindTilingWithScale(tiling->contents_scale()))
|
| + if (pending_twin_set->FindTilingWithScale(
|
| + tiling->contents_transform().pre_scale()))
|
| continue;
|
|
|
| tiling->SetRasterSourceAndResize(raster_source);
|
| @@ -222,8 +231,10 @@ 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 &&
|
| - tiling->contents_scale() <= max_acceptable_high_res_scale) {
|
| + if (tiling->contents_transform().pre_scale() >=
|
| + min_acceptable_high_res_scale &&
|
| + tiling->contents_transform().pre_scale() <=
|
| + max_acceptable_high_res_scale) {
|
| continue;
|
| }
|
|
|
| @@ -261,18 +272,19 @@ void PictureLayerTilingSet::MarkAllTilingsNonIdeal() {
|
| }
|
|
|
| PictureLayerTiling* PictureLayerTilingSet::AddTiling(
|
| - float contents_scale,
|
| + const ScaleTranslate2d& contents_transform,
|
| scoped_refptr<RasterSource> raster_source) {
|
| if (!raster_source_)
|
| raster_source_ = raster_source;
|
|
|
| for (size_t i = 0; i < tilings_.size(); ++i) {
|
| - DCHECK_NE(tilings_[i]->contents_scale(), contents_scale);
|
| + DCHECK_NE(tilings_[i]->contents_transform().pre_scale(),
|
| + contents_transform.pre_scale());
|
| DCHECK_EQ(tilings_[i]->raster_source(), raster_source.get());
|
| }
|
|
|
| tilings_.push_back(base::MakeUnique<PictureLayerTiling>(
|
| - tree_, contents_scale, raster_source, client_));
|
| + tree_, contents_transform, raster_source, client_));
|
| PictureLayerTiling* appended = tilings_.back().get();
|
| state_since_last_tile_priority_update_.added_tilings = true;
|
|
|
| @@ -290,7 +302,7 @@ int PictureLayerTilingSet::NumHighResTilings() const {
|
| PictureLayerTiling* PictureLayerTilingSet::FindTilingWithScale(
|
| float scale) const {
|
| for (size_t i = 0; i < tilings_.size(); ++i) {
|
| - if (tilings_[i]->contents_scale() == scale)
|
| + if (tilings_[i]->contents_transform().pre_scale() == scale)
|
| return tilings_[i].get();
|
| }
|
| return nullptr;
|
| @@ -312,7 +324,7 @@ void PictureLayerTilingSet::RemoveTilingsBelowScale(float minimum_scale) {
|
| auto to_remove = std::remove_if(
|
| tilings_.begin(), tilings_.end(),
|
| [minimum_scale](const std::unique_ptr<PictureLayerTiling>& tiling) {
|
| - return tiling->contents_scale() < minimum_scale;
|
| + return tiling->contents_transform().pre_scale() < minimum_scale;
|
| });
|
| tilings_.erase(to_remove, tilings_.end());
|
| }
|
| @@ -321,7 +333,7 @@ void PictureLayerTilingSet::RemoveTilingsAboveScale(float maximum_scale) {
|
| auto to_remove = std::remove_if(
|
| tilings_.begin(), tilings_.end(),
|
| [maximum_scale](const std::unique_ptr<PictureLayerTiling>& tiling) {
|
| - return tiling->contents_scale() > maximum_scale;
|
| + return tiling->contents_transform().pre_scale() > maximum_scale;
|
| });
|
| tilings_.erase(to_remove, tilings_.end());
|
| }
|
| @@ -353,7 +365,7 @@ float PictureLayerTilingSet::GetSnappedContentsScale(
|
| 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_transform().pre_scale();
|
| float ratio = LargerRatio(tiling_contents_scale, start_scale);
|
| if (ratio < snapped_ratio) {
|
| snapped_contents_scale = tiling_contents_scale;
|
| @@ -367,7 +379,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]->contents_transform().pre_scale();
|
| }
|
|
|
| bool PictureLayerTilingSet::TilingsNeedUpdate(
|
| @@ -554,7 +566,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_transform().pre_scale() < ideal_contents_scale_) {
|
| if (ideal_tiling_ > 0)
|
| ideal_tiling_--;
|
| break;
|
|
|