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

Unified Diff: cc/resources/picture_layer_tiling_set.cc

Issue 737943002: Update from https://crrev.com/304715 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month 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
« no previous file with comments | « cc/resources/picture_layer_tiling_set.h ('k') | cc/resources/picture_layer_tiling_set_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/resources/picture_layer_tiling_set.cc
diff --git a/cc/resources/picture_layer_tiling_set.cc b/cc/resources/picture_layer_tiling_set.cc
index 060bd27faf081d783381dc09aad68019d7253021..35170a0baf5e54665be05928bf9d26a51579a8e3 100644
--- a/cc/resources/picture_layer_tiling_set.cc
+++ b/cc/resources/picture_layer_tiling_set.cc
@@ -5,6 +5,7 @@
#include "cc/resources/picture_layer_tiling_set.h"
#include <limits>
+#include <set>
namespace cc {
@@ -17,6 +18,12 @@ class LargestToSmallestScaleFunctor {
}
};
+inline float LargerRatio(float float1, float float2) {
+ DCHECK_GT(float1, 0.f);
+ DCHECK_GT(float2, 0.f);
+ return float1 > float2 ? float1 / float2 : float2 / float1;
+}
+
} // namespace
// static
@@ -43,6 +50,11 @@ void PictureLayerTilingSet::RemoveTilesInRegion(const Region& region) {
tilings_[i]->RemoveTilesInRegion(region);
}
+void PictureLayerTilingSet::MarkAllTilingsNonIdeal() {
+ for (auto* tiling : tilings_)
+ tiling->set_resolution(NON_IDEAL_RESOLUTION);
+}
+
bool PictureLayerTilingSet::SyncTilings(const PictureLayerTilingSet& other,
const gfx::Size& new_layer_bounds,
const Region& layer_invalidation,
@@ -58,7 +70,7 @@ bool PictureLayerTilingSet::SyncTilings(const PictureLayerTilingSet& other,
// Remove any tilings that aren't in |other| or don't meet the minimum.
for (size_t i = 0; i < tilings_.size(); ++i) {
float scale = tilings_[i]->contents_scale();
- if (scale >= minimum_contents_scale && !!other.TilingAtScale(scale))
+ if (scale >= minimum_contents_scale && !!other.FindTilingWithScale(scale))
continue;
// Swap with the last element and remove it.
tilings_.swap(tilings_.begin() + i, tilings_.end() - 1);
@@ -73,7 +85,7 @@ bool PictureLayerTilingSet::SyncTilings(const PictureLayerTilingSet& other,
float contents_scale = other.tilings_[i]->contents_scale();
if (contents_scale < minimum_contents_scale)
continue;
- if (PictureLayerTiling* this_tiling = TilingAtScale(contents_scale)) {
+ if (PictureLayerTiling* this_tiling = FindTilingWithScale(contents_scale)) {
this_tiling->set_resolution(other.tilings_[i]->resolution());
this_tiling->UpdateTilesToCurrentRasterSource(
@@ -127,7 +139,8 @@ int PictureLayerTilingSet::NumHighResTilings() const {
return num_high_res;
}
-PictureLayerTiling* PictureLayerTilingSet::TilingAtScale(float scale) const {
+PictureLayerTiling* PictureLayerTilingSet::FindTilingWithScale(
+ float scale) const {
for (size_t i = 0; i < tilings_.size(); ++i) {
if (tilings_[i]->contents_scale() == scale)
return tilings_[i];
@@ -135,6 +148,17 @@ PictureLayerTiling* PictureLayerTilingSet::TilingAtScale(float scale) const {
return NULL;
}
+PictureLayerTiling* PictureLayerTilingSet::FindTilingWithResolution(
+ TileResolution resolution) const {
+ auto iter = std::find_if(tilings_.begin(), tilings_.end(),
+ [resolution](const PictureLayerTiling* tiling) {
+ return tiling->resolution() == resolution;
+ });
+ if (iter == tilings_.end())
+ return NULL;
+ return *iter;
+}
+
void PictureLayerTilingSet::RemoveAllTilings() {
tilings_.clear();
}
@@ -147,11 +171,45 @@ void PictureLayerTilingSet::Remove(PictureLayerTiling* tiling) {
tilings_.erase(iter);
}
+void PictureLayerTilingSet::RemoveTilingWithScale(float scale) {
+ auto iter = std::find_if(tilings_.begin(), tilings_.end(),
+ [scale](const PictureLayerTiling* tiling) {
+ return tiling->contents_scale() == scale;
+ });
+ if (iter == tilings_.end())
+ return;
+ tilings_.erase(iter);
+}
+
void PictureLayerTilingSet::RemoveAllTiles() {
for (size_t i = 0; i < tilings_.size(); ++i)
tilings_[i]->Reset();
}
+float PictureLayerTilingSet::GetSnappedContentsScale(
+ float start_scale,
+ float snap_to_existing_tiling_ratio) const {
+ // If a tiling exists within the max snapping ratio, snap to its scale.
+ 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 ratio = LargerRatio(tiling_contents_scale, start_scale);
+ if (ratio < snapped_ratio) {
+ snapped_contents_scale = tiling_contents_scale;
+ snapped_ratio = ratio;
+ }
+ }
+ return snapped_contents_scale;
+}
+
+float PictureLayerTilingSet::GetMaximumContentsScale() const {
+ if (tilings_.empty())
+ return 0.f;
+ // The first tiling has the largest contents scale.
+ return tilings_[0]->contents_scale();
+}
+
bool PictureLayerTilingSet::UpdateTilePriorities(
const gfx::Rect& required_rect_in_layer_space,
float ideal_contents_scale,
@@ -181,6 +239,12 @@ bool PictureLayerTilingSet::UpdateTilePriorities(
return true;
}
+void PictureLayerTilingSet::GetAllTilesForTracing(
+ std::set<const Tile*>* tiles) const {
+ for (auto* tiling : tilings_)
+ tiling->GetAllTilesForTracing(tiles);
+}
+
PictureLayerTilingSet::CoverageIterator::CoverageIterator(
const PictureLayerTilingSet* set,
float contents_scale,
« no previous file with comments | « cc/resources/picture_layer_tiling_set.h ('k') | cc/resources/picture_layer_tiling_set_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698