| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/tiles/picture_layer_tiling_set.h" | 5 #include "cc/tiles/picture_layer_tiling_set.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <limits> | 9 #include <limits> |
| 10 #include <set> | 10 #include <set> |
| 11 #include <vector> | 11 #include <vector> |
| 12 | 12 |
| 13 #include "base/memory/ptr_util.h" | 13 #include "base/memory/ptr_util.h" |
| 14 #include "base/trace_event/trace_event.h" | 14 #include "base/trace_event/trace_event.h" |
| 15 #include "cc/playback/raster_source.h" | 15 #include "cc/playback/raster_source.h" |
| 16 #include "ui/gfx/geometry/rect_conversions.h" | 16 #include "ui/gfx/geometry/rect_conversions.h" |
| 17 | 17 |
| 18 namespace cc { | 18 namespace cc { |
| 19 | 19 |
| 20 namespace { | 20 namespace { |
| 21 | 21 |
| 22 class LargestToSmallestScaleFunctor { | 22 class LargestToSmallestScaleFunctor { |
| 23 public: | 23 public: |
| 24 bool operator()(const std::unique_ptr<PictureLayerTiling>& left, | 24 bool operator()(const std::unique_ptr<PictureLayerTiling>& left, |
| 25 const std::unique_ptr<PictureLayerTiling>& right) { | 25 const std::unique_ptr<PictureLayerTiling>& right) { |
| 26 return left->contents_scale_key() > right->contents_scale_key(); | 26 return left->contents_scale() > right->contents_scale(); |
| 27 } | 27 } |
| 28 }; | 28 }; |
| 29 | 29 |
| 30 inline float LargerRatio(float float1, float float2) { | 30 inline float LargerRatio(float float1, float float2) { |
| 31 DCHECK_GT(float1, 0.f); | 31 DCHECK_GT(float1, 0.f); |
| 32 DCHECK_GT(float2, 0.f); | 32 DCHECK_GT(float2, 0.f); |
| 33 return float1 > float2 ? float1 / float2 : float2 / float1; | 33 return float1 > float2 ? float1 / float2 : float2 / float1; |
| 34 } | 34 } |
| 35 | 35 |
| 36 const float kSoonBorderDistanceViewportPercentage = 0.15f; | 36 const float kSoonBorderDistanceViewportPercentage = 0.15f; |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 // If the twin (pending) tiling set is empty, it was not updated for the | 77 // If the twin (pending) tiling set is empty, it was not updated for the |
| 78 // current frame. So we drop tilings from our set as well, instead of | 78 // current frame. So we drop tilings from our set as well, instead of |
| 79 // leaving behind unshared tilings that are all non-ideal. | 79 // leaving behind unshared tilings that are all non-ideal. |
| 80 RemoveAllTilings(); | 80 RemoveAllTilings(); |
| 81 return; | 81 return; |
| 82 } | 82 } |
| 83 | 83 |
| 84 bool tiling_sort_required = false; | 84 bool tiling_sort_required = false; |
| 85 for (const auto& pending_twin_tiling : pending_twin_set->tilings_) { | 85 for (const auto& pending_twin_tiling : pending_twin_set->tilings_) { |
| 86 PictureLayerTiling* this_tiling = | 86 PictureLayerTiling* this_tiling = |
| 87 FindTilingWithScaleKey(pending_twin_tiling->contents_scale_key()); | 87 FindTilingWithScaleKey(pending_twin_tiling->contents_scale()); |
| 88 if (!this_tiling) { | 88 if (!this_tiling) { |
| 89 std::unique_ptr<PictureLayerTiling> new_tiling(new PictureLayerTiling( | 89 std::unique_ptr<PictureLayerTiling> new_tiling(new PictureLayerTiling( |
| 90 tree_, pending_twin_tiling->raster_scales(), raster_source_, client_, | 90 tree_, pending_twin_tiling->contents_scale(), raster_source_, client_, |
| 91 kMaxSoonBorderDistanceInScreenPixels, max_preraster_distance_)); | 91 kMaxSoonBorderDistanceInScreenPixels, max_preraster_distance_)); |
| 92 tilings_.push_back(std::move(new_tiling)); | 92 tilings_.push_back(std::move(new_tiling)); |
| 93 this_tiling = tilings_.back().get(); | 93 this_tiling = tilings_.back().get(); |
| 94 tiling_sort_required = true; | 94 tiling_sort_required = true; |
| 95 state_since_last_tile_priority_update_.added_tilings = true; | 95 state_since_last_tile_priority_update_.added_tilings = true; |
| 96 } | 96 } |
| 97 this_tiling->TakeTilesAndPropertiesFrom(pending_twin_tiling.get(), | 97 this_tiling->TakeTilesAndPropertiesFrom(pending_twin_tiling.get(), |
| 98 layer_invalidation); | 98 layer_invalidation); |
| 99 } | 99 } |
| 100 | 100 |
| 101 if (tiling_sort_required) { | 101 if (tiling_sort_required) { |
| 102 std::sort(tilings_.begin(), tilings_.end(), | 102 std::sort(tilings_.begin(), tilings_.end(), |
| 103 LargestToSmallestScaleFunctor()); | 103 LargestToSmallestScaleFunctor()); |
| 104 } | 104 } |
| 105 } | 105 } |
| 106 | 106 |
| 107 void PictureLayerTilingSet::UpdateTilingsToCurrentRasterSourceForActivation( | 107 void PictureLayerTilingSet::UpdateTilingsToCurrentRasterSourceForActivation( |
| 108 scoped_refptr<RasterSource> raster_source, | 108 scoped_refptr<RasterSource> raster_source, |
| 109 const PictureLayerTilingSet* pending_twin_set, | 109 const PictureLayerTilingSet* pending_twin_set, |
| 110 const Region& layer_invalidation, | 110 const Region& layer_invalidation, |
| 111 float minimum_contents_scale_key, | 111 float minimum_contents_scale, |
| 112 float maximum_contents_scale_key) { | 112 float maximum_contents_scale) { |
| 113 RemoveTilingsBelowScaleKey(minimum_contents_scale_key); | 113 RemoveTilingsBelowScaleKey(minimum_contents_scale); |
| 114 RemoveTilingsAboveScaleKey(maximum_contents_scale_key); | 114 RemoveTilingsAboveScaleKey(maximum_contents_scale); |
| 115 | 115 |
| 116 raster_source_ = raster_source; | 116 raster_source_ = raster_source; |
| 117 | 117 |
| 118 // Copy over tilings that are shared with the |pending_twin_set| tiling set. | 118 // Copy over tilings that are shared with the |pending_twin_set| tiling set. |
| 119 // Also, copy all of the properties from twin tilings. | 119 // Also, copy all of the properties from twin tilings. |
| 120 CopyTilingsAndPropertiesFromPendingTwin(pending_twin_set, raster_source, | 120 CopyTilingsAndPropertiesFromPendingTwin(pending_twin_set, raster_source, |
| 121 layer_invalidation); | 121 layer_invalidation); |
| 122 | 122 |
| 123 // If the tiling is not shared (FindTilingWithScale returns nullptr), then | 123 // If the tiling is not shared (FindTilingWithScale returns nullptr), then |
| 124 // invalidate tiles and update them to the new raster source. | 124 // invalidate tiles and update them to the new raster source. |
| 125 for (const auto& tiling : tilings_) { | 125 for (const auto& tiling : tilings_) { |
| 126 if (pending_twin_set->FindTilingWithScaleKey(tiling->contents_scale_key())) | 126 if (pending_twin_set->FindTilingWithScaleKey(tiling->contents_scale())) |
| 127 continue; | 127 continue; |
| 128 | 128 |
| 129 tiling->SetRasterSourceAndResize(raster_source); | 129 tiling->SetRasterSourceAndResize(raster_source); |
| 130 tiling->Invalidate(layer_invalidation); | 130 tiling->Invalidate(layer_invalidation); |
| 131 state_since_last_tile_priority_update_.invalidated = true; | 131 state_since_last_tile_priority_update_.invalidated = true; |
| 132 // This is needed for cases where the live tiles rect didn't change but | 132 // This is needed for cases where the live tiles rect didn't change but |
| 133 // recordings exist in the raster source that did not exist on the last | 133 // recordings exist in the raster source that did not exist on the last |
| 134 // raster source. | 134 // raster source. |
| 135 tiling->CreateMissingTilesInLiveTilesRect(); | 135 tiling->CreateMissingTilesInLiveTilesRect(); |
| 136 | 136 |
| 137 // |this| is active set and |tiling| is not in the pending set, which means | 137 // |this| is active set and |tiling| is not in the pending set, which means |
| 138 // it is now NON_IDEAL_RESOLUTION. The exception is for LOW_RESOLUTION | 138 // it is now NON_IDEAL_RESOLUTION. The exception is for LOW_RESOLUTION |
| 139 // tilings, which are computed and created entirely on the active tree. | 139 // tilings, which are computed and created entirely on the active tree. |
| 140 // Since the pending tree does not have them, we should just leave them as | 140 // Since the pending tree does not have them, we should just leave them as |
| 141 // low resolution to not lose them. | 141 // low resolution to not lose them. |
| 142 if (tiling->resolution() != LOW_RESOLUTION) | 142 if (tiling->resolution() != LOW_RESOLUTION) |
| 143 tiling->set_resolution(NON_IDEAL_RESOLUTION); | 143 tiling->set_resolution(NON_IDEAL_RESOLUTION); |
| 144 } | 144 } |
| 145 | 145 |
| 146 VerifyTilings(pending_twin_set); | 146 VerifyTilings(pending_twin_set); |
| 147 } | 147 } |
| 148 | 148 |
| 149 void PictureLayerTilingSet::UpdateTilingsToCurrentRasterSourceForCommit( | 149 void PictureLayerTilingSet::UpdateTilingsToCurrentRasterSourceForCommit( |
| 150 scoped_refptr<RasterSource> raster_source, | 150 scoped_refptr<RasterSource> raster_source, |
| 151 const Region& layer_invalidation, | 151 const Region& layer_invalidation, |
| 152 float minimum_contents_scale_key, | 152 float minimum_contents_scale, |
| 153 float maximum_contents_scale_key) { | 153 float maximum_contents_scale) { |
| 154 RemoveTilingsBelowScaleKey(minimum_contents_scale_key); | 154 RemoveTilingsBelowScaleKey(minimum_contents_scale); |
| 155 RemoveTilingsAboveScaleKey(maximum_contents_scale_key); | 155 RemoveTilingsAboveScaleKey(maximum_contents_scale); |
| 156 | 156 |
| 157 raster_source_ = raster_source; | 157 raster_source_ = raster_source; |
| 158 | 158 |
| 159 // Invalidate tiles and update them to the new raster source. | 159 // Invalidate tiles and update them to the new raster source. |
| 160 for (const std::unique_ptr<PictureLayerTiling>& tiling : tilings_) { | 160 for (const std::unique_ptr<PictureLayerTiling>& tiling : tilings_) { |
| 161 DCHECK(tree_ != PENDING_TREE || !tiling->has_tiles()); | 161 DCHECK(tree_ != PENDING_TREE || !tiling->has_tiles()); |
| 162 tiling->SetRasterSourceAndResize(raster_source); | 162 tiling->SetRasterSourceAndResize(raster_source); |
| 163 | 163 |
| 164 // Force |UpdateTilePriorities| on commit for cases where the compositor is | 164 // Force |UpdateTilePriorities| on commit for cases where the compositor is |
| 165 // heavily pipelined resulting in back to back draw and commit. This | 165 // heavily pipelined resulting in back to back draw and commit. This |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 224 } | 224 } |
| 225 | 225 |
| 226 void PictureLayerTilingSet::CleanUpTilings( | 226 void PictureLayerTilingSet::CleanUpTilings( |
| 227 float min_acceptable_high_res_scale_key, | 227 float min_acceptable_high_res_scale_key, |
| 228 float max_acceptable_high_res_scale_key, | 228 float max_acceptable_high_res_scale_key, |
| 229 const std::vector<PictureLayerTiling*>& needed_tilings, | 229 const std::vector<PictureLayerTiling*>& needed_tilings, |
| 230 PictureLayerTilingSet* twin_set) { | 230 PictureLayerTilingSet* twin_set) { |
| 231 std::vector<PictureLayerTiling*> to_remove; | 231 std::vector<PictureLayerTiling*> to_remove; |
| 232 for (const auto& tiling : tilings_) { | 232 for (const auto& tiling : tilings_) { |
| 233 // Keep all tilings within the min/max scales. | 233 // Keep all tilings within the min/max scales. |
| 234 if (tiling->contents_scale_key() >= min_acceptable_high_res_scale_key && | 234 if (tiling->contents_scale() >= min_acceptable_high_res_scale_key && |
| 235 tiling->contents_scale_key() <= max_acceptable_high_res_scale_key) { | 235 tiling->contents_scale() <= max_acceptable_high_res_scale_key) { |
| 236 continue; | 236 continue; |
| 237 } | 237 } |
| 238 | 238 |
| 239 // Keep low resolution tilings. | 239 // Keep low resolution tilings. |
| 240 if (tiling->resolution() == LOW_RESOLUTION) | 240 if (tiling->resolution() == LOW_RESOLUTION) |
| 241 continue; | 241 continue; |
| 242 | 242 |
| 243 // Don't remove tilings that are required. | 243 // Don't remove tilings that are required. |
| 244 if (std::find(needed_tilings.begin(), needed_tilings.end(), tiling.get()) != | 244 if (std::find(needed_tilings.begin(), needed_tilings.end(), tiling.get()) != |
| 245 needed_tilings.end()) { | 245 needed_tilings.end()) { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 263 }); | 263 }); |
| 264 tilings_.erase(to_remove, tilings_.end()); | 264 tilings_.erase(to_remove, tilings_.end()); |
| 265 } | 265 } |
| 266 | 266 |
| 267 void PictureLayerTilingSet::MarkAllTilingsNonIdeal() { | 267 void PictureLayerTilingSet::MarkAllTilingsNonIdeal() { |
| 268 for (const auto& tiling : tilings_) | 268 for (const auto& tiling : tilings_) |
| 269 tiling->set_resolution(NON_IDEAL_RESOLUTION); | 269 tiling->set_resolution(NON_IDEAL_RESOLUTION); |
| 270 } | 270 } |
| 271 | 271 |
| 272 PictureLayerTiling* PictureLayerTilingSet::AddTiling( | 272 PictureLayerTiling* PictureLayerTilingSet::AddTiling( |
| 273 float contents_scale_key, | 273 float contents_scale, |
| 274 scoped_refptr<RasterSource> raster_source) { | 274 scoped_refptr<RasterSource> raster_source) { |
| 275 if (!raster_source_) | 275 if (!raster_source_) |
| 276 raster_source_ = raster_source; | 276 raster_source_ = raster_source; |
| 277 | 277 |
| 278 #if DCHECK_IS_ON() | 278 #if DCHECK_IS_ON() |
| 279 for (size_t i = 0; i < tilings_.size(); ++i) { | 279 for (size_t i = 0; i < tilings_.size(); ++i) { |
| 280 DCHECK_NE(tilings_[i]->contents_scale_key(), contents_scale_key); | 280 DCHECK_NE(tilings_[i]->contents_scale(), contents_scale); |
| 281 DCHECK_EQ(tilings_[i]->raster_source(), raster_source.get()); | 281 DCHECK_EQ(tilings_[i]->raster_source(), raster_source.get()); |
| 282 } | 282 } |
| 283 #endif // DCHECK_IS_ON() | 283 #endif // DCHECK_IS_ON() |
| 284 | 284 |
| 285 gfx::SizeF raster_scales(contents_scale_key, | |
| 286 contents_scale_key / aspect_ratio_); | |
| 287 tilings_.push_back(base::MakeUnique<PictureLayerTiling>( | 285 tilings_.push_back(base::MakeUnique<PictureLayerTiling>( |
| 288 tree_, raster_scales, raster_source, client_, | 286 tree_, contents_scale, raster_source, client_, |
| 289 kMaxSoonBorderDistanceInScreenPixels, max_preraster_distance_)); | 287 kMaxSoonBorderDistanceInScreenPixels, max_preraster_distance_)); |
| 290 PictureLayerTiling* appended = tilings_.back().get(); | 288 PictureLayerTiling* appended = tilings_.back().get(); |
| 291 state_since_last_tile_priority_update_.added_tilings = true; | 289 state_since_last_tile_priority_update_.added_tilings = true; |
| 292 | 290 |
| 293 std::sort(tilings_.begin(), tilings_.end(), LargestToSmallestScaleFunctor()); | 291 std::sort(tilings_.begin(), tilings_.end(), LargestToSmallestScaleFunctor()); |
| 294 return appended; | 292 return appended; |
| 295 } | 293 } |
| 296 | 294 |
| 297 int PictureLayerTilingSet::NumHighResTilings() const { | 295 int PictureLayerTilingSet::NumHighResTilings() const { |
| 298 return std::count_if(tilings_.begin(), tilings_.end(), | 296 return std::count_if(tilings_.begin(), tilings_.end(), |
| 299 [](const std::unique_ptr<PictureLayerTiling>& tiling) { | 297 [](const std::unique_ptr<PictureLayerTiling>& tiling) { |
| 300 return tiling->resolution() == HIGH_RESOLUTION; | 298 return tiling->resolution() == HIGH_RESOLUTION; |
| 301 }); | 299 }); |
| 302 } | 300 } |
| 303 | 301 |
| 304 PictureLayerTiling* PictureLayerTilingSet::FindTilingWithScaleKey( | 302 PictureLayerTiling* PictureLayerTilingSet::FindTilingWithScaleKey( |
| 305 float scale_key) const { | 303 float scale_key) const { |
| 306 for (size_t i = 0; i < tilings_.size(); ++i) { | 304 for (size_t i = 0; i < tilings_.size(); ++i) { |
| 307 if (tilings_[i]->contents_scale_key() == scale_key) | 305 if (tilings_[i]->contents_scale() == scale_key) |
| 308 return tilings_[i].get(); | 306 return tilings_[i].get(); |
| 309 } | 307 } |
| 310 return nullptr; | 308 return nullptr; |
| 311 } | 309 } |
| 312 | 310 |
| 313 PictureLayerTiling* PictureLayerTilingSet::FindTilingWithResolution( | 311 PictureLayerTiling* PictureLayerTilingSet::FindTilingWithResolution( |
| 314 TileResolution resolution) const { | 312 TileResolution resolution) const { |
| 315 auto iter = std::find_if( | 313 auto iter = std::find_if( |
| 316 tilings_.begin(), tilings_.end(), | 314 tilings_.begin(), tilings_.end(), |
| 317 [resolution](const std::unique_ptr<PictureLayerTiling>& tiling) { | 315 [resolution](const std::unique_ptr<PictureLayerTiling>& tiling) { |
| 318 return tiling->resolution() == resolution; | 316 return tiling->resolution() == resolution; |
| 319 }); | 317 }); |
| 320 if (iter == tilings_.end()) | 318 if (iter == tilings_.end()) |
| 321 return nullptr; | 319 return nullptr; |
| 322 return iter->get(); | 320 return iter->get(); |
| 323 } | 321 } |
| 324 | 322 |
| 325 void PictureLayerTilingSet::RemoveTilingsBelowScaleKey( | 323 void PictureLayerTilingSet::RemoveTilingsBelowScaleKey( |
| 326 float minimum_scale_key) { | 324 float minimum_scale_key) { |
| 327 auto to_remove = std::remove_if( | 325 auto to_remove = std::remove_if( |
| 328 tilings_.begin(), tilings_.end(), | 326 tilings_.begin(), tilings_.end(), |
| 329 [minimum_scale_key](const std::unique_ptr<PictureLayerTiling>& tiling) { | 327 [minimum_scale_key](const std::unique_ptr<PictureLayerTiling>& tiling) { |
| 330 return tiling->contents_scale_key() < minimum_scale_key; | 328 return tiling->contents_scale() < minimum_scale_key; |
| 331 }); | 329 }); |
| 332 tilings_.erase(to_remove, tilings_.end()); | 330 tilings_.erase(to_remove, tilings_.end()); |
| 333 } | 331 } |
| 334 | 332 |
| 335 void PictureLayerTilingSet::RemoveTilingsAboveScaleKey( | 333 void PictureLayerTilingSet::RemoveTilingsAboveScaleKey( |
| 336 float maximum_scale_key) { | 334 float maximum_scale_key) { |
| 337 auto to_remove = std::remove_if( | 335 auto to_remove = std::remove_if( |
| 338 tilings_.begin(), tilings_.end(), | 336 tilings_.begin(), tilings_.end(), |
| 339 [maximum_scale_key](const std::unique_ptr<PictureLayerTiling>& tiling) { | 337 [maximum_scale_key](const std::unique_ptr<PictureLayerTiling>& tiling) { |
| 340 return tiling->contents_scale_key() > maximum_scale_key; | 338 return tiling->contents_scale() > maximum_scale_key; |
| 341 }); | 339 }); |
| 342 tilings_.erase(to_remove, tilings_.end()); | 340 tilings_.erase(to_remove, tilings_.end()); |
| 343 } | 341 } |
| 344 | 342 |
| 345 void PictureLayerTilingSet::RemoveAllTilings() { | 343 void PictureLayerTilingSet::RemoveAllTilings() { |
| 346 tilings_.clear(); | 344 tilings_.clear(); |
| 347 } | 345 } |
| 348 | 346 |
| 349 void PictureLayerTilingSet::Remove(PictureLayerTiling* tiling) { | 347 void PictureLayerTilingSet::Remove(PictureLayerTiling* tiling) { |
| 350 auto iter = std::find_if( | 348 auto iter = std::find_if( |
| (...skipping 11 matching lines...) Expand all Loading... |
| 362 tilings_[i]->Reset(); | 360 tilings_[i]->Reset(); |
| 363 } | 361 } |
| 364 | 362 |
| 365 float PictureLayerTilingSet::GetSnappedContentsScaleKey( | 363 float PictureLayerTilingSet::GetSnappedContentsScaleKey( |
| 366 float start_scale, | 364 float start_scale, |
| 367 float snap_to_existing_tiling_ratio) const { | 365 float snap_to_existing_tiling_ratio) const { |
| 368 // If a tiling exists within the max snapping ratio, snap to its scale. | 366 // If a tiling exists within the max snapping ratio, snap to its scale. |
| 369 float snapped_contents_scale = start_scale; | 367 float snapped_contents_scale = start_scale; |
| 370 float snapped_ratio = snap_to_existing_tiling_ratio; | 368 float snapped_ratio = snap_to_existing_tiling_ratio; |
| 371 for (const auto& tiling : tilings_) { | 369 for (const auto& tiling : tilings_) { |
| 372 float tiling_contents_scale = tiling->contents_scale_key(); | 370 float tiling_contents_scale = tiling->contents_scale(); |
| 373 float ratio = LargerRatio(tiling_contents_scale, start_scale); | 371 float ratio = LargerRatio(tiling_contents_scale, start_scale); |
| 374 if (ratio < snapped_ratio) { | 372 if (ratio < snapped_ratio) { |
| 375 snapped_contents_scale = tiling_contents_scale; | 373 snapped_contents_scale = tiling_contents_scale; |
| 376 snapped_ratio = ratio; | 374 snapped_ratio = ratio; |
| 377 } | 375 } |
| 378 } | 376 } |
| 379 return snapped_contents_scale; | 377 return snapped_contents_scale; |
| 380 } | 378 } |
| 381 | 379 |
| 382 float PictureLayerTilingSet::GetMaximumContentsScale() const { | 380 float PictureLayerTilingSet::GetMaximumContentsScale() const { |
| 383 if (tilings_.empty()) | 381 if (tilings_.empty()) |
| 384 return 0.f; | 382 return 0.f; |
| 385 // The first tiling has the largest contents scale. | 383 // The first tiling has the largest contents scale. |
| 386 return std::max(tilings_[0]->raster_scales().width(), | 384 return tilings_[0]->contents_scale(); |
| 387 tilings_[0]->raster_scales().height()); | |
| 388 } | 385 } |
| 389 | 386 |
| 390 bool PictureLayerTilingSet::TilingsNeedUpdate( | 387 bool PictureLayerTilingSet::TilingsNeedUpdate( |
| 391 const gfx::Rect& visible_rect_in_layer_space, | 388 const gfx::Rect& visible_rect_in_layer_space, |
| 392 double current_frame_time_in_seconds) { | 389 double current_frame_time_in_seconds) { |
| 393 // If we don't have any tilings, we don't need an update. | 390 // If we don't have any tilings, we don't need an update. |
| 394 if (num_tilings() == 0) | 391 if (num_tilings() == 0) |
| 395 return false; | 392 return false; |
| 396 | 393 |
| 397 // If we never updated the tiling set, then our history is empty. We should | 394 // If we never updated the tiling set, then our history is empty. We should |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 544 tiling->set_can_require_tiles_for_activation( | 541 tiling->set_can_require_tiles_for_activation( |
| 545 can_require_tiles_for_activation); | 542 can_require_tiles_for_activation); |
| 546 tiling->ComputeTilePriorityRects( | 543 tiling->ComputeTilePriorityRects( |
| 547 visible_rect_in_layer_space_, skewport_in_layer_space_, | 544 visible_rect_in_layer_space_, skewport_in_layer_space_, |
| 548 soon_border_rect_in_layer_space_, eventually_rect_in_layer_space_, | 545 soon_border_rect_in_layer_space_, eventually_rect_in_layer_space_, |
| 549 ideal_contents_scale, occlusion_in_layer_space); | 546 ideal_contents_scale, occlusion_in_layer_space); |
| 550 } | 547 } |
| 551 return true; | 548 return true; |
| 552 } | 549 } |
| 553 | 550 |
| 554 void PictureLayerTilingSet::SetAspectRatio(float ratio) { | |
| 555 if (std::abs(ratio - aspect_ratio_) < std::numeric_limits<float>::epsilon()) | |
| 556 return; | |
| 557 TRACE_EVENT1("cc", "PictureLayerTilingSet::SetAspectRatio", "aspect_ratio", | |
| 558 ratio); | |
| 559 aspect_ratio_ = ratio; | |
| 560 RemoveAllTilings(); | |
| 561 } | |
| 562 | |
| 563 void PictureLayerTilingSet::GetAllPrioritizedTilesForTracing( | 551 void PictureLayerTilingSet::GetAllPrioritizedTilesForTracing( |
| 564 std::vector<PrioritizedTile>* prioritized_tiles) const { | 552 std::vector<PrioritizedTile>* prioritized_tiles) const { |
| 565 for (const auto& tiling : tilings_) | 553 for (const auto& tiling : tilings_) |
| 566 tiling->GetAllPrioritizedTilesForTracing(prioritized_tiles); | 554 tiling->GetAllPrioritizedTilesForTracing(prioritized_tiles); |
| 567 } | 555 } |
| 568 | 556 |
| 569 PictureLayerTilingSet::CoverageIterator::CoverageIterator( | 557 PictureLayerTilingSet::CoverageIterator::CoverageIterator( |
| 570 const PictureLayerTilingSet* set, | 558 const PictureLayerTilingSet* set, |
| 571 float coverage_scale, | 559 float coverage_scale, |
| 572 const gfx::Rect& coverage_rect, | 560 const gfx::Rect& coverage_rect, |
| 573 float ideal_contents_scale) | 561 float ideal_contents_scale) |
| 574 : set_(set), | 562 : set_(set), |
| 575 coverage_scale_(coverage_scale), | 563 coverage_scale_(coverage_scale), |
| 576 current_tiling_(std::numeric_limits<size_t>::max()) { | 564 current_tiling_(std::numeric_limits<size_t>::max()) { |
| 577 missing_region_.Union(coverage_rect); | 565 missing_region_.Union(coverage_rect); |
| 578 | 566 |
| 579 // Determine the smallest content_scale tiling which a scale higher than the | 567 // Determine the smallest content_scale tiling which a scale higher than the |
| 580 // ideal (or the first tiling if all tilings have a scale less than ideal). | 568 // ideal (or the first tiling if all tilings have a scale less than ideal). |
| 581 size_t tilings_size = set_->tilings_.size(); | 569 size_t tilings_size = set_->tilings_.size(); |
| 582 for (ideal_tiling_ = 0; ideal_tiling_ < tilings_size; ++ideal_tiling_) { | 570 for (ideal_tiling_ = 0; ideal_tiling_ < tilings_size; ++ideal_tiling_) { |
| 583 PictureLayerTiling* tiling = set_->tilings_[ideal_tiling_].get(); | 571 PictureLayerTiling* tiling = set_->tilings_[ideal_tiling_].get(); |
| 584 if (tiling->contents_scale_key() < ideal_contents_scale) { | 572 if (tiling->contents_scale() < ideal_contents_scale) { |
| 585 if (ideal_tiling_ > 0) | 573 if (ideal_tiling_ > 0) |
| 586 ideal_tiling_--; | 574 ideal_tiling_--; |
| 587 break; | 575 break; |
| 588 } | 576 } |
| 589 } | 577 } |
| 590 | 578 |
| 591 // If all tilings have a scale larger than the ideal, then use the smallest | 579 // If all tilings have a scale larger than the ideal, then use the smallest |
| 592 // scale (which is the last one). | 580 // scale (which is the last one). |
| 593 if (ideal_tiling_ == tilings_size && ideal_tiling_ > 0) | 581 if (ideal_tiling_ == tilings_size && ideal_tiling_ > 0) |
| 594 ideal_tiling_--; | 582 ideal_tiling_--; |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 783 case LOWER_THAN_LOW_RES: | 771 case LOWER_THAN_LOW_RES: |
| 784 range = TilingRange(low_res_range.end, tilings_size); | 772 range = TilingRange(low_res_range.end, tilings_size); |
| 785 break; | 773 break; |
| 786 } | 774 } |
| 787 | 775 |
| 788 DCHECK_LE(range.start, range.end); | 776 DCHECK_LE(range.start, range.end); |
| 789 return range; | 777 return range; |
| 790 } | 778 } |
| 791 | 779 |
| 792 } // namespace cc | 780 } // namespace cc |
| OLD | NEW |