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> |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
76 if (pending_twin_set->tilings_.empty()) { | 76 if (pending_twin_set->tilings_.empty()) { |
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 ScaleTranslate2d raster_transform = pending_twin_tiling->raster_transform(); | |
86 PictureLayerTiling* this_tiling = | 87 PictureLayerTiling* this_tiling = |
87 FindTilingWithScaleKey(pending_twin_tiling->contents_scale_key()); | 88 FindTilingWithScaleKey(pending_twin_tiling->contents_scale_key()); |
89 if (this_tiling && this_tiling->raster_transform() != raster_transform) { | |
enne (OOO)
2017/01/03 22:53:53
This could use some unit testing too.
trchen
2017/03/28 21:44:01
Done.
| |
90 Remove(this_tiling); | |
91 this_tiling = nullptr; | |
92 } | |
88 if (!this_tiling) { | 93 if (!this_tiling) { |
89 std::unique_ptr<PictureLayerTiling> new_tiling(new PictureLayerTiling( | 94 std::unique_ptr<PictureLayerTiling> new_tiling(new PictureLayerTiling( |
90 tree_, pending_twin_tiling->raster_scales(), raster_source_, client_, | 95 tree_, raster_transform, raster_source_, client_, |
91 kMaxSoonBorderDistanceInScreenPixels, max_preraster_distance_)); | 96 kMaxSoonBorderDistanceInScreenPixels, max_preraster_distance_)); |
92 tilings_.push_back(std::move(new_tiling)); | 97 tilings_.push_back(std::move(new_tiling)); |
93 this_tiling = tilings_.back().get(); | 98 this_tiling = tilings_.back().get(); |
94 tiling_sort_required = true; | 99 tiling_sort_required = true; |
95 state_since_last_tile_priority_update_.added_tilings = true; | 100 state_since_last_tile_priority_update_.added_tilings = true; |
96 } | 101 } |
97 this_tiling->TakeTilesAndPropertiesFrom(pending_twin_tiling.get(), | 102 this_tiling->TakeTilesAndPropertiesFrom(pending_twin_tiling.get(), |
98 layer_invalidation); | 103 layer_invalidation); |
99 } | 104 } |
100 | 105 |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
263 }); | 268 }); |
264 tilings_.erase(to_remove, tilings_.end()); | 269 tilings_.erase(to_remove, tilings_.end()); |
265 } | 270 } |
266 | 271 |
267 void PictureLayerTilingSet::MarkAllTilingsNonIdeal() { | 272 void PictureLayerTilingSet::MarkAllTilingsNonIdeal() { |
268 for (const auto& tiling : tilings_) | 273 for (const auto& tiling : tilings_) |
269 tiling->set_resolution(NON_IDEAL_RESOLUTION); | 274 tiling->set_resolution(NON_IDEAL_RESOLUTION); |
270 } | 275 } |
271 | 276 |
272 PictureLayerTiling* PictureLayerTilingSet::AddTiling( | 277 PictureLayerTiling* PictureLayerTilingSet::AddTiling( |
273 float contents_scale_key, | 278 const ScaleTranslate2d& raster_transform, |
274 scoped_refptr<RasterSource> raster_source) { | 279 scoped_refptr<RasterSource> raster_source) { |
275 if (!raster_source_) | 280 if (!raster_source_) |
276 raster_source_ = raster_source; | 281 raster_source_ = raster_source; |
277 | 282 |
278 #if DCHECK_IS_ON() | 283 #if DCHECK_IS_ON() |
279 for (size_t i = 0; i < tilings_.size(); ++i) { | 284 for (size_t i = 0; i < tilings_.size(); ++i) { |
280 DCHECK_NE(tilings_[i]->contents_scale_key(), contents_scale_key); | 285 DCHECK_NE(tilings_[i]->contents_scale_key(), raster_transform.scale()); |
281 DCHECK_EQ(tilings_[i]->raster_source(), raster_source.get()); | 286 DCHECK_EQ(tilings_[i]->raster_source(), raster_source.get()); |
282 } | 287 } |
283 #endif // DCHECK_IS_ON() | 288 #endif // DCHECK_IS_ON() |
284 | 289 |
285 gfx::SizeF raster_scales(contents_scale_key, | |
286 contents_scale_key / aspect_ratio_); | |
287 tilings_.push_back(base::MakeUnique<PictureLayerTiling>( | 290 tilings_.push_back(base::MakeUnique<PictureLayerTiling>( |
288 tree_, raster_scales, raster_source, client_, | 291 tree_, raster_transform, raster_source, client_, |
289 kMaxSoonBorderDistanceInScreenPixels, max_preraster_distance_)); | 292 kMaxSoonBorderDistanceInScreenPixels, max_preraster_distance_)); |
290 PictureLayerTiling* appended = tilings_.back().get(); | 293 PictureLayerTiling* appended = tilings_.back().get(); |
291 state_since_last_tile_priority_update_.added_tilings = true; | 294 state_since_last_tile_priority_update_.added_tilings = true; |
292 | 295 |
293 std::sort(tilings_.begin(), tilings_.end(), LargestToSmallestScaleFunctor()); | 296 std::sort(tilings_.begin(), tilings_.end(), LargestToSmallestScaleFunctor()); |
294 return appended; | 297 return appended; |
295 } | 298 } |
296 | 299 |
297 int PictureLayerTilingSet::NumHighResTilings() const { | 300 int PictureLayerTilingSet::NumHighResTilings() const { |
298 return std::count_if(tilings_.begin(), tilings_.end(), | 301 return std::count_if(tilings_.begin(), tilings_.end(), |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
376 snapped_ratio = ratio; | 379 snapped_ratio = ratio; |
377 } | 380 } |
378 } | 381 } |
379 return snapped_contents_scale; | 382 return snapped_contents_scale; |
380 } | 383 } |
381 | 384 |
382 float PictureLayerTilingSet::GetMaximumContentsScale() const { | 385 float PictureLayerTilingSet::GetMaximumContentsScale() const { |
383 if (tilings_.empty()) | 386 if (tilings_.empty()) |
384 return 0.f; | 387 return 0.f; |
385 // The first tiling has the largest contents scale. | 388 // The first tiling has the largest contents scale. |
386 return std::max(tilings_[0]->raster_scales().width(), | 389 return tilings_[0]->raster_transform().scale(); |
387 tilings_[0]->raster_scales().height()); | |
388 } | 390 } |
389 | 391 |
390 bool PictureLayerTilingSet::TilingsNeedUpdate( | 392 bool PictureLayerTilingSet::TilingsNeedUpdate( |
391 const gfx::Rect& visible_rect_in_layer_space, | 393 const gfx::Rect& visible_rect_in_layer_space, |
392 double current_frame_time_in_seconds) { | 394 double current_frame_time_in_seconds) { |
393 // If we don't have any tilings, we don't need an update. | 395 // If we don't have any tilings, we don't need an update. |
394 if (num_tilings() == 0) | 396 if (num_tilings() == 0) |
395 return false; | 397 return false; |
396 | 398 |
397 // If we never updated the tiling set, then our history is empty. We should | 399 // If we never updated the tiling set, then our history is empty. We should |
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
783 case LOWER_THAN_LOW_RES: | 785 case LOWER_THAN_LOW_RES: |
784 range = TilingRange(low_res_range.end, tilings_size); | 786 range = TilingRange(low_res_range.end, tilings_size); |
785 break; | 787 break; |
786 } | 788 } |
787 | 789 |
788 DCHECK_LE(range.start, range.end); | 790 DCHECK_LE(range.start, range.end); |
789 return range; | 791 return range; |
790 } | 792 } |
791 | 793 |
792 } // namespace cc | 794 } // namespace cc |
OLD | NEW |