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

Unified Diff: cc/resources/picture_layer_tiling_set.cc

Issue 812543002: Update from https://crrev.com/308331 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years 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 51896a5b5f7f29cfb287e970fb8b301aaa4b83a0..a3348bc72d350f608c21555cef7a60ed9da5c727 100644
--- a/cc/resources/picture_layer_tiling_set.cc
+++ b/cc/resources/picture_layer_tiling_set.cc
@@ -29,26 +29,98 @@ inline float LargerRatio(float float1, float float2) {
// static
scoped_ptr<PictureLayerTilingSet> PictureLayerTilingSet::Create(
- PictureLayerTilingClient* client) {
- return make_scoped_ptr(new PictureLayerTilingSet(client));
-}
-
-PictureLayerTilingSet::PictureLayerTilingSet(PictureLayerTilingClient* client)
- : client_(client) {
+ PictureLayerTilingClient* client,
+ size_t max_tiles_for_interest_area,
+ float skewport_target_time_in_seconds,
+ int skewport_extrapolation_limit_in_content_pixels) {
+ return make_scoped_ptr(new PictureLayerTilingSet(
+ client, max_tiles_for_interest_area, skewport_target_time_in_seconds,
+ skewport_extrapolation_limit_in_content_pixels));
+}
+
+PictureLayerTilingSet::PictureLayerTilingSet(
+ PictureLayerTilingClient* client,
+ size_t max_tiles_for_interest_area,
+ float skewport_target_time_in_seconds,
+ int skewport_extrapolation_limit_in_content_pixels)
+ : max_tiles_for_interest_area_(max_tiles_for_interest_area),
+ skewport_target_time_in_seconds_(skewport_target_time_in_seconds),
+ skewport_extrapolation_limit_in_content_pixels_(
+ skewport_extrapolation_limit_in_content_pixels),
+ client_(client) {
}
PictureLayerTilingSet::~PictureLayerTilingSet() {
}
-void PictureLayerTilingSet::SetClient(PictureLayerTilingClient* client) {
- client_ = client;
- for (size_t i = 0; i < tilings_.size(); ++i)
- tilings_[i]->SetClient(client_);
-}
+void PictureLayerTilingSet::UpdateTilingsToCurrentRasterSource(
+ RasterSource* raster_source,
+ const PictureLayerTilingSet* twin_set,
+ const gfx::Size& layer_bounds,
+ const Region& layer_invalidation,
+ float minimum_contents_scale) {
+ RemoveTilingsBelowScale(minimum_contents_scale);
-void PictureLayerTilingSet::RemoveTilesInRegion(const Region& region) {
- for (size_t i = 0; i < tilings_.size(); ++i)
- tilings_[i]->RemoveTilesInRegion(region);
+ // Copy over tilings that are shared with the |twin_set| tiling set (if it
+ // exists).
+ if (twin_set) {
+ for (PictureLayerTiling* twin_tiling : twin_set->tilings_) {
+ float contents_scale = twin_tiling->contents_scale();
+ DCHECK_GE(contents_scale, minimum_contents_scale);
+
+ PictureLayerTiling* this_tiling = FindTilingWithScale(contents_scale);
+ if (!this_tiling) {
+ scoped_ptr<PictureLayerTiling> new_tiling = PictureLayerTiling::Create(
+ contents_scale, layer_bounds, client_, max_tiles_for_interest_area_,
+ skewport_target_time_in_seconds_,
+ skewport_extrapolation_limit_in_content_pixels_);
+ tilings_.push_back(new_tiling.Pass());
+ this_tiling = tilings_.back();
+ }
+ this_tiling->CloneTilesAndPropertiesFrom(*twin_tiling);
+ }
+ }
+
+ // For unshared tilings, invalidate tiles and update them to the new raster
+ // source.
+ for (PictureLayerTiling* tiling : tilings_) {
+ if (twin_set && twin_set->FindTilingWithScale(tiling->contents_scale()))
+ continue;
+
+ tiling->Resize(layer_bounds);
+ tiling->Invalidate(layer_invalidation);
+ tiling->SetRasterSource(raster_source);
+ // This is needed for cases where the live tiles rect didn't change but
+ // recordings exist in the raster source that did not exist on the last
+ // raster source.
+ tiling->CreateMissingTilesInLiveTilesRect();
+
+ // If |twin_set| is present, use the resolutions from there. Otherwise leave
+ // all resolutions as they are.
+ if (twin_set)
+ tiling->set_resolution(NON_IDEAL_RESOLUTION);
+ }
+
+ tilings_.sort(LargestToSmallestScaleFunctor());
+
+#if DCHECK_IS_ON
+ for (PictureLayerTiling* tiling : tilings_) {
+ DCHECK(tiling->tile_size() ==
+ client_->CalculateTileSize(tiling->tiling_size()))
+ << "tile_size: " << tiling->tile_size().ToString()
+ << " tiling_size: " << tiling->tiling_size().ToString()
+ << " CalculateTileSize: "
+ << client_->CalculateTileSize(tiling->tiling_size()).ToString();
+ }
+
+ if (!tilings_.empty()) {
+ size_t num_high_res = std::count_if(tilings_.begin(), tilings_.end(),
+ [](PictureLayerTiling* tiling) {
+ return tiling->resolution() == HIGH_RESOLUTION;
+ });
+ DCHECK_EQ(1u, num_high_res);
+ }
+#endif
}
void PictureLayerTilingSet::CleanUpTilings(
@@ -91,14 +163,6 @@ void PictureLayerTilingSet::CleanUpTilings(
}
for (auto* tiling : to_remove) {
- PictureLayerTiling* twin_tiling =
- twin_set ? twin_set->FindTilingWithScale(tiling->contents_scale())
- : nullptr;
- // Only remove tilings from the twin layer if they have
- // NON_IDEAL_RESOLUTION.
- if (twin_tiling && twin_tiling->resolution() == NON_IDEAL_RESOLUTION)
- twin_set->Remove(twin_tiling);
-
PictureLayerTiling* recycled_twin_tiling =
recycled_twin_set
? recycled_twin_set->FindTilingWithScale(tiling->contents_scale())
@@ -113,16 +177,24 @@ void PictureLayerTilingSet::CleanUpTilings(
}
}
+void PictureLayerTilingSet::RemoveNonIdealTilings() {
+ auto to_remove = tilings_.remove_if([](PictureLayerTiling* t) {
+ return t->resolution() == NON_IDEAL_RESOLUTION;
+ });
+ tilings_.erase(to_remove, tilings_.end());
+}
+
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,
- float minimum_contents_scale,
- RasterSource* raster_source) {
+bool PictureLayerTilingSet::SyncTilingsForTesting(
+ const PictureLayerTilingSet& other,
+ const gfx::Size& new_layer_bounds,
+ const Region& layer_invalidation,
+ float minimum_contents_scale,
+ RasterSource* raster_source) {
if (new_layer_bounds.IsEmpty()) {
RemoveAllTilings();
return false;
@@ -151,8 +223,9 @@ bool PictureLayerTilingSet::SyncTilings(const PictureLayerTilingSet& other,
if (PictureLayerTiling* this_tiling = FindTilingWithScale(contents_scale)) {
this_tiling->set_resolution(other.tilings_[i]->resolution());
- this_tiling->UpdateTilesToCurrentRasterSource(
- raster_source, layer_invalidation, new_layer_bounds);
+ this_tiling->Resize(new_layer_bounds);
+ this_tiling->Invalidate(layer_invalidation);
+ this_tiling->SetRasterSource(raster_source);
this_tiling->CreateMissingTilesInLiveTilesRect();
if (this_tiling->resolution() == HIGH_RESOLUTION)
have_high_res_tiling = true;
@@ -166,9 +239,9 @@ bool PictureLayerTilingSet::SyncTilings(const PictureLayerTilingSet& other,
continue;
}
scoped_ptr<PictureLayerTiling> new_tiling = PictureLayerTiling::Create(
- contents_scale,
- new_layer_bounds,
- client_);
+ contents_scale, new_layer_bounds, client_, max_tiles_for_interest_area_,
+ skewport_target_time_in_seconds_,
+ skewport_extrapolation_limit_in_content_pixels_);
new_tiling->set_resolution(other.tilings_[i]->resolution());
if (new_tiling->resolution() == HIGH_RESOLUTION)
have_high_res_tiling = true;
@@ -185,8 +258,10 @@ PictureLayerTiling* PictureLayerTilingSet::AddTiling(
for (size_t i = 0; i < tilings_.size(); ++i)
DCHECK_NE(tilings_[i]->contents_scale(), contents_scale);
- tilings_.push_back(
- PictureLayerTiling::Create(contents_scale, layer_bounds, client_));
+ tilings_.push_back(PictureLayerTiling::Create(
+ contents_scale, layer_bounds, client_, max_tiles_for_interest_area_,
+ skewport_target_time_in_seconds_,
+ skewport_extrapolation_limit_in_content_pixels_));
PictureLayerTiling* appended = tilings_.back();
tilings_.sort(LargestToSmallestScaleFunctor());
@@ -222,6 +297,14 @@ PictureLayerTiling* PictureLayerTilingSet::FindTilingWithResolution(
return *iter;
}
+void PictureLayerTilingSet::RemoveTilingsBelowScale(float minimum_scale) {
+ auto to_remove =
+ tilings_.remove_if([minimum_scale](PictureLayerTiling* tiling) {
+ return tiling->contents_scale() < minimum_scale;
+ });
+ tilings_.erase(to_remove, tilings_.end());
+}
+
void PictureLayerTilingSet::RemoveAllTilings() {
tilings_.clear();
}
« 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