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/resources/picture_layer_tiling_set.h" | 5 #include "cc/resources/picture_layer_tiling_set.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 #include <set> | 8 #include <set> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 11 matching lines...) Expand all Loading... |
22 inline float LargerRatio(float float1, float float2) { | 22 inline float LargerRatio(float float1, float float2) { |
23 DCHECK_GT(float1, 0.f); | 23 DCHECK_GT(float1, 0.f); |
24 DCHECK_GT(float2, 0.f); | 24 DCHECK_GT(float2, 0.f); |
25 return float1 > float2 ? float1 / float2 : float2 / float1; | 25 return float1 > float2 ? float1 / float2 : float2 / float1; |
26 } | 26 } |
27 | 27 |
28 } // namespace | 28 } // namespace |
29 | 29 |
30 // static | 30 // static |
31 scoped_ptr<PictureLayerTilingSet> PictureLayerTilingSet::Create( | 31 scoped_ptr<PictureLayerTilingSet> PictureLayerTilingSet::Create( |
32 PictureLayerTilingClient* client) { | 32 PictureLayerTilingClient* client, |
33 return make_scoped_ptr(new PictureLayerTilingSet(client)); | 33 size_t max_tiles_for_interest_area, |
| 34 float skewport_target_time_in_seconds, |
| 35 int skewport_extrapolation_limit_in_content_pixels) { |
| 36 return make_scoped_ptr(new PictureLayerTilingSet( |
| 37 client, max_tiles_for_interest_area, skewport_target_time_in_seconds, |
| 38 skewport_extrapolation_limit_in_content_pixels)); |
34 } | 39 } |
35 | 40 |
36 PictureLayerTilingSet::PictureLayerTilingSet(PictureLayerTilingClient* client) | 41 PictureLayerTilingSet::PictureLayerTilingSet( |
37 : client_(client) { | 42 PictureLayerTilingClient* client, |
| 43 size_t max_tiles_for_interest_area, |
| 44 float skewport_target_time_in_seconds, |
| 45 int skewport_extrapolation_limit_in_content_pixels) |
| 46 : max_tiles_for_interest_area_(max_tiles_for_interest_area), |
| 47 skewport_target_time_in_seconds_(skewport_target_time_in_seconds), |
| 48 skewport_extrapolation_limit_in_content_pixels_( |
| 49 skewport_extrapolation_limit_in_content_pixels), |
| 50 client_(client) { |
38 } | 51 } |
39 | 52 |
40 PictureLayerTilingSet::~PictureLayerTilingSet() { | 53 PictureLayerTilingSet::~PictureLayerTilingSet() { |
41 } | 54 } |
42 | 55 |
43 void PictureLayerTilingSet::UpdateTilingsToCurrentRasterSource( | 56 void PictureLayerTilingSet::UpdateTilingsToCurrentRasterSource( |
44 RasterSource* raster_source, | 57 RasterSource* raster_source, |
45 const PictureLayerTilingSet* twin_set, | 58 const PictureLayerTilingSet* twin_set, |
46 const gfx::Size& layer_bounds, | 59 const gfx::Size& layer_bounds, |
47 const Region& layer_invalidation, | 60 const Region& layer_invalidation, |
48 float minimum_contents_scale) { | 61 float minimum_contents_scale) { |
49 RemoveTilingsBelowScale(minimum_contents_scale); | 62 RemoveTilingsBelowScale(minimum_contents_scale); |
50 | 63 |
51 // Copy over tilings that are shared with the |twin_set| tiling set (if it | 64 // Copy over tilings that are shared with the |twin_set| tiling set (if it |
52 // exists). | 65 // exists). |
53 if (twin_set) { | 66 if (twin_set) { |
54 for (PictureLayerTiling* twin_tiling : twin_set->tilings_) { | 67 for (PictureLayerTiling* twin_tiling : twin_set->tilings_) { |
55 float contents_scale = twin_tiling->contents_scale(); | 68 float contents_scale = twin_tiling->contents_scale(); |
56 DCHECK_GE(contents_scale, minimum_contents_scale); | 69 DCHECK_GE(contents_scale, minimum_contents_scale); |
57 | 70 |
58 PictureLayerTiling* this_tiling = FindTilingWithScale(contents_scale); | 71 PictureLayerTiling* this_tiling = FindTilingWithScale(contents_scale); |
59 if (!this_tiling) { | 72 if (!this_tiling) { |
60 scoped_ptr<PictureLayerTiling> new_tiling = | 73 scoped_ptr<PictureLayerTiling> new_tiling = PictureLayerTiling::Create( |
61 PictureLayerTiling::Create(contents_scale, layer_bounds, client_); | 74 contents_scale, layer_bounds, client_, max_tiles_for_interest_area_, |
| 75 skewport_target_time_in_seconds_, |
| 76 skewport_extrapolation_limit_in_content_pixels_); |
62 tilings_.push_back(new_tiling.Pass()); | 77 tilings_.push_back(new_tiling.Pass()); |
63 this_tiling = tilings_.back(); | 78 this_tiling = tilings_.back(); |
64 } | 79 } |
65 this_tiling->CloneTilesAndPropertiesFrom(*twin_tiling); | 80 this_tiling->CloneTilesAndPropertiesFrom(*twin_tiling); |
66 } | 81 } |
67 } | 82 } |
68 | 83 |
69 // For unshared tilings, invalidate tiles and update them to the new raster | 84 // For unshared tilings, invalidate tiles and update them to the new raster |
70 // source. | 85 // source. |
71 for (PictureLayerTiling* tiling : tilings_) { | 86 for (PictureLayerTiling* tiling : tilings_) { |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 | 230 |
216 DCHECK(this_tiling->tile_size() == | 231 DCHECK(this_tiling->tile_size() == |
217 client_->CalculateTileSize(this_tiling->tiling_size())) | 232 client_->CalculateTileSize(this_tiling->tiling_size())) |
218 << "tile_size: " << this_tiling->tile_size().ToString() | 233 << "tile_size: " << this_tiling->tile_size().ToString() |
219 << " tiling_size: " << this_tiling->tiling_size().ToString() | 234 << " tiling_size: " << this_tiling->tiling_size().ToString() |
220 << " CalculateTileSize: " | 235 << " CalculateTileSize: " |
221 << client_->CalculateTileSize(this_tiling->tiling_size()).ToString(); | 236 << client_->CalculateTileSize(this_tiling->tiling_size()).ToString(); |
222 continue; | 237 continue; |
223 } | 238 } |
224 scoped_ptr<PictureLayerTiling> new_tiling = PictureLayerTiling::Create( | 239 scoped_ptr<PictureLayerTiling> new_tiling = PictureLayerTiling::Create( |
225 contents_scale, | 240 contents_scale, new_layer_bounds, client_, max_tiles_for_interest_area_, |
226 new_layer_bounds, | 241 skewport_target_time_in_seconds_, |
227 client_); | 242 skewport_extrapolation_limit_in_content_pixels_); |
228 new_tiling->set_resolution(other.tilings_[i]->resolution()); | 243 new_tiling->set_resolution(other.tilings_[i]->resolution()); |
229 if (new_tiling->resolution() == HIGH_RESOLUTION) | 244 if (new_tiling->resolution() == HIGH_RESOLUTION) |
230 have_high_res_tiling = true; | 245 have_high_res_tiling = true; |
231 tilings_.push_back(new_tiling.Pass()); | 246 tilings_.push_back(new_tiling.Pass()); |
232 } | 247 } |
233 tilings_.sort(LargestToSmallestScaleFunctor()); | 248 tilings_.sort(LargestToSmallestScaleFunctor()); |
234 | 249 |
235 return have_high_res_tiling; | 250 return have_high_res_tiling; |
236 } | 251 } |
237 | 252 |
238 PictureLayerTiling* PictureLayerTilingSet::AddTiling( | 253 PictureLayerTiling* PictureLayerTilingSet::AddTiling( |
239 float contents_scale, | 254 float contents_scale, |
240 const gfx::Size& layer_bounds) { | 255 const gfx::Size& layer_bounds) { |
241 for (size_t i = 0; i < tilings_.size(); ++i) | 256 for (size_t i = 0; i < tilings_.size(); ++i) |
242 DCHECK_NE(tilings_[i]->contents_scale(), contents_scale); | 257 DCHECK_NE(tilings_[i]->contents_scale(), contents_scale); |
243 | 258 |
244 tilings_.push_back( | 259 tilings_.push_back(PictureLayerTiling::Create( |
245 PictureLayerTiling::Create(contents_scale, layer_bounds, client_)); | 260 contents_scale, layer_bounds, client_, max_tiles_for_interest_area_, |
| 261 skewport_target_time_in_seconds_, |
| 262 skewport_extrapolation_limit_in_content_pixels_)); |
246 PictureLayerTiling* appended = tilings_.back(); | 263 PictureLayerTiling* appended = tilings_.back(); |
247 | 264 |
248 tilings_.sort(LargestToSmallestScaleFunctor()); | 265 tilings_.sort(LargestToSmallestScaleFunctor()); |
249 return appended; | 266 return appended; |
250 } | 267 } |
251 | 268 |
252 int PictureLayerTilingSet::NumHighResTilings() const { | 269 int PictureLayerTilingSet::NumHighResTilings() const { |
253 int num_high_res = 0; | 270 int num_high_res = 0; |
254 for (size_t i = 0; i < tilings_.size(); ++i) { | 271 for (size_t i = 0; i < tilings_.size(); ++i) { |
255 if (tilings_[i]->resolution() == HIGH_RESOLUTION) | 272 if (tilings_[i]->resolution() == HIGH_RESOLUTION) |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
582 case LOWER_THAN_LOW_RES: | 599 case LOWER_THAN_LOW_RES: |
583 range = TilingRange(low_res_range.end, tilings_.size()); | 600 range = TilingRange(low_res_range.end, tilings_.size()); |
584 break; | 601 break; |
585 } | 602 } |
586 | 603 |
587 DCHECK_LE(range.start, range.end); | 604 DCHECK_LE(range.start, range.end); |
588 return range; | 605 return range; |
589 } | 606 } |
590 | 607 |
591 } // namespace cc | 608 } // namespace cc |
OLD | NEW |