Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3900)

Unified Diff: cc/tiles/picture_layer_tiling_set.cc

Issue 2175553002: Raster PictureLayerTiling with fractional translation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: clean up Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698