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 <limits> | 7 #include <limits> |
8 #include <set> | 8 #include <set> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "cc/playback/display_list_raster_source.h" | 11 #include "cc/playback/display_list_raster_source.h" |
12 | 12 |
13 namespace cc { | 13 namespace cc { |
14 | 14 |
15 namespace { | 15 namespace { |
16 | 16 |
17 class LargestToSmallestScaleFunctor { | 17 class LargestToSmallestScaleFunctor { |
18 public: | 18 public: |
19 bool operator() (PictureLayerTiling* left, PictureLayerTiling* right) { | 19 bool operator()(const scoped_ptr<PictureLayerTiling>& left, |
20 const scoped_ptr<PictureLayerTiling>& right) { | |
20 return left->contents_scale() > right->contents_scale(); | 21 return left->contents_scale() > right->contents_scale(); |
21 } | 22 } |
22 }; | 23 }; |
23 | 24 |
24 inline float LargerRatio(float float1, float float2) { | 25 inline float LargerRatio(float float1, float float2) { |
25 DCHECK_GT(float1, 0.f); | 26 DCHECK_GT(float1, 0.f); |
26 DCHECK_GT(float2, 0.f); | 27 DCHECK_GT(float2, 0.f); |
27 return float1 > float2 ? float1 / float2 : float2 / float1; | 28 return float1 > float2 ? float1 / float2 : float2 / float1; |
28 } | 29 } |
29 | 30 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
64 const Region& layer_invalidation) { | 65 const Region& layer_invalidation) { |
65 if (pending_twin_set->tilings_.empty()) { | 66 if (pending_twin_set->tilings_.empty()) { |
66 // If the twin (pending) tiling set is empty, it was not updated for the | 67 // If the twin (pending) tiling set is empty, it was not updated for the |
67 // current frame. So we drop tilings from our set as well, instead of | 68 // current frame. So we drop tilings from our set as well, instead of |
68 // leaving behind unshared tilings that are all non-ideal. | 69 // leaving behind unshared tilings that are all non-ideal. |
69 RemoveAllTilings(); | 70 RemoveAllTilings(); |
70 return; | 71 return; |
71 } | 72 } |
72 | 73 |
73 bool tiling_sort_required = false; | 74 bool tiling_sort_required = false; |
74 for (PictureLayerTiling* pending_twin_tiling : pending_twin_set->tilings_) { | 75 for (const scoped_ptr<PictureLayerTiling>& pending_twin_tiling : |
danakj
2015/11/17 01:12:18
auto
vmpstr
2015/11/17 23:26:24
Done.
| |
76 pending_twin_set->tilings_) { | |
75 float contents_scale = pending_twin_tiling->contents_scale(); | 77 float contents_scale = pending_twin_tiling->contents_scale(); |
76 PictureLayerTiling* this_tiling = FindTilingWithScale(contents_scale); | 78 PictureLayerTiling* this_tiling = FindTilingWithScale(contents_scale); |
77 if (!this_tiling) { | 79 if (!this_tiling) { |
78 scoped_ptr<PictureLayerTiling> new_tiling = PictureLayerTiling::Create( | 80 scoped_ptr<PictureLayerTiling> new_tiling = PictureLayerTiling::Create( |
79 tree_, contents_scale, raster_source, client_, | 81 tree_, contents_scale, raster_source, client_, |
80 tiling_interest_area_padding_, skewport_target_time_in_seconds_, | 82 tiling_interest_area_padding_, skewport_target_time_in_seconds_, |
81 skewport_extrapolation_limit_in_content_pixels_); | 83 skewport_extrapolation_limit_in_content_pixels_); |
82 tilings_.push_back(new_tiling.Pass()); | 84 tilings_.push_back(new_tiling.Pass()); |
83 this_tiling = tilings_.back(); | 85 this_tiling = tilings_.back().get(); |
84 tiling_sort_required = true; | 86 tiling_sort_required = true; |
85 } | 87 } |
86 this_tiling->TakeTilesAndPropertiesFrom(pending_twin_tiling, | 88 this_tiling->TakeTilesAndPropertiesFrom(pending_twin_tiling.get(), |
87 layer_invalidation); | 89 layer_invalidation); |
88 } | 90 } |
89 | 91 |
90 if (tiling_sort_required) | 92 if (tiling_sort_required) { |
91 tilings_.sort(LargestToSmallestScaleFunctor()); | 93 std::sort(tilings_.begin(), tilings_.end(), |
94 LargestToSmallestScaleFunctor()); | |
95 } | |
92 } | 96 } |
93 | 97 |
94 void PictureLayerTilingSet::UpdateTilingsToCurrentRasterSourceForActivation( | 98 void PictureLayerTilingSet::UpdateTilingsToCurrentRasterSourceForActivation( |
95 scoped_refptr<DisplayListRasterSource> raster_source, | 99 scoped_refptr<DisplayListRasterSource> raster_source, |
96 const PictureLayerTilingSet* pending_twin_set, | 100 const PictureLayerTilingSet* pending_twin_set, |
97 const Region& layer_invalidation, | 101 const Region& layer_invalidation, |
98 float minimum_contents_scale, | 102 float minimum_contents_scale, |
99 float maximum_contents_scale) { | 103 float maximum_contents_scale) { |
100 RemoveTilingsBelowScale(minimum_contents_scale); | 104 RemoveTilingsBelowScale(minimum_contents_scale); |
101 RemoveTilingsAboveScale(maximum_contents_scale); | 105 RemoveTilingsAboveScale(maximum_contents_scale); |
102 | 106 |
103 // Copy over tilings that are shared with the |pending_twin_set| tiling set. | 107 // Copy over tilings that are shared with the |pending_twin_set| tiling set. |
104 // Also, copy all of the properties from twin tilings. | 108 // Also, copy all of the properties from twin tilings. |
105 CopyTilingsAndPropertiesFromPendingTwin(pending_twin_set, raster_source, | 109 CopyTilingsAndPropertiesFromPendingTwin(pending_twin_set, raster_source, |
106 layer_invalidation); | 110 layer_invalidation); |
107 | 111 |
108 // If the tiling is not shared (FindTilingWithScale returns nullptr), then | 112 // If the tiling is not shared (FindTilingWithScale returns nullptr), then |
109 // invalidate tiles and update them to the new raster source. | 113 // invalidate tiles and update them to the new raster source. |
110 for (PictureLayerTiling* tiling : tilings_) { | 114 for (const scoped_ptr<PictureLayerTiling>& tiling : tilings_) { |
danakj
2015/11/17 01:12:18
auto
vmpstr
2015/11/17 23:26:24
Done.
| |
111 if (pending_twin_set->FindTilingWithScale(tiling->contents_scale())) | 115 if (pending_twin_set->FindTilingWithScale(tiling->contents_scale())) |
112 continue; | 116 continue; |
113 | 117 |
114 tiling->SetRasterSourceAndResize(raster_source); | 118 tiling->SetRasterSourceAndResize(raster_source); |
115 tiling->Invalidate(layer_invalidation); | 119 tiling->Invalidate(layer_invalidation); |
116 // This is needed for cases where the live tiles rect didn't change but | 120 // This is needed for cases where the live tiles rect didn't change but |
117 // recordings exist in the raster source that did not exist on the last | 121 // recordings exist in the raster source that did not exist on the last |
118 // raster source. | 122 // raster source. |
119 tiling->CreateMissingTilesInLiveTilesRect(); | 123 tiling->CreateMissingTilesInLiveTilesRect(); |
120 | 124 |
(...skipping 11 matching lines...) Expand all Loading... | |
132 | 136 |
133 void PictureLayerTilingSet::UpdateTilingsToCurrentRasterSourceForCommit( | 137 void PictureLayerTilingSet::UpdateTilingsToCurrentRasterSourceForCommit( |
134 scoped_refptr<DisplayListRasterSource> raster_source, | 138 scoped_refptr<DisplayListRasterSource> raster_source, |
135 const Region& layer_invalidation, | 139 const Region& layer_invalidation, |
136 float minimum_contents_scale, | 140 float minimum_contents_scale, |
137 float maximum_contents_scale) { | 141 float maximum_contents_scale) { |
138 RemoveTilingsBelowScale(minimum_contents_scale); | 142 RemoveTilingsBelowScale(minimum_contents_scale); |
139 RemoveTilingsAboveScale(maximum_contents_scale); | 143 RemoveTilingsAboveScale(maximum_contents_scale); |
140 | 144 |
141 // Invalidate tiles and update them to the new raster source. | 145 // Invalidate tiles and update them to the new raster source. |
142 for (PictureLayerTiling* tiling : tilings_) { | 146 for (const scoped_ptr<PictureLayerTiling>& tiling : tilings_) { |
danakj
2015/11/17 01:12:18
auto
vmpstr
2015/11/17 23:26:24
Done.
| |
143 DCHECK(tree_ != PENDING_TREE || !tiling->has_tiles()); | 147 DCHECK(tree_ != PENDING_TREE || !tiling->has_tiles()); |
144 tiling->SetRasterSourceAndResize(raster_source); | 148 tiling->SetRasterSourceAndResize(raster_source); |
145 | 149 |
146 // We can commit on either active or pending trees, but only active one can | 150 // We can commit on either active or pending trees, but only active one can |
147 // have tiles at this point. | 151 // have tiles at this point. |
148 if (tree_ == ACTIVE_TREE) | 152 if (tree_ == ACTIVE_TREE) |
149 tiling->Invalidate(layer_invalidation); | 153 tiling->Invalidate(layer_invalidation); |
150 | 154 |
151 // This is needed for cases where the live tiles rect didn't change but | 155 // This is needed for cases where the live tiles rect didn't change but |
152 // recordings exist in the raster source that did not exist on the last | 156 // recordings exist in the raster source that did not exist on the last |
153 // raster source. | 157 // raster source. |
154 tiling->CreateMissingTilesInLiveTilesRect(); | 158 tiling->CreateMissingTilesInLiveTilesRect(); |
155 } | 159 } |
156 VerifyTilings(nullptr /* pending_twin_set */); | 160 VerifyTilings(nullptr /* pending_twin_set */); |
157 } | 161 } |
158 | 162 |
159 void PictureLayerTilingSet::UpdateRasterSourceDueToLCDChange( | 163 void PictureLayerTilingSet::UpdateRasterSourceDueToLCDChange( |
160 const scoped_refptr<DisplayListRasterSource>& raster_source, | 164 const scoped_refptr<DisplayListRasterSource>& raster_source, |
161 const Region& layer_invalidation) { | 165 const Region& layer_invalidation) { |
162 for (PictureLayerTiling* tiling : tilings_) { | 166 for (const scoped_ptr<PictureLayerTiling>& tiling : tilings_) { |
danakj
2015/11/17 01:12:18
auto
vmpstr
2015/11/17 23:26:24
Done.
| |
163 tiling->SetRasterSourceAndResize(raster_source); | 167 tiling->SetRasterSourceAndResize(raster_source); |
164 tiling->Invalidate(layer_invalidation); | 168 tiling->Invalidate(layer_invalidation); |
165 // Since the invalidation changed, we need to create any missing tiles in | 169 // Since the invalidation changed, we need to create any missing tiles in |
166 // the live tiles rect again. | 170 // the live tiles rect again. |
167 tiling->CreateMissingTilesInLiveTilesRect(); | 171 tiling->CreateMissingTilesInLiveTilesRect(); |
168 } | 172 } |
169 } | 173 } |
170 | 174 |
171 void PictureLayerTilingSet::VerifyTilings( | 175 void PictureLayerTilingSet::VerifyTilings( |
172 const PictureLayerTilingSet* pending_twin_set) const { | 176 const PictureLayerTilingSet* pending_twin_set) const { |
173 #if DCHECK_IS_ON() | 177 #if DCHECK_IS_ON() |
174 for (PictureLayerTiling* tiling : tilings_) { | 178 for (const scoped_ptr<PictureLayerTiling>& tiling : tilings_) { |
danakj
2015/11/17 01:12:18
auto
vmpstr
2015/11/17 23:26:24
Done.
| |
175 DCHECK(tiling->tile_size() == | 179 DCHECK(tiling->tile_size() == |
176 client_->CalculateTileSize(tiling->tiling_size())) | 180 client_->CalculateTileSize(tiling->tiling_size())) |
177 << "tile_size: " << tiling->tile_size().ToString() | 181 << "tile_size: " << tiling->tile_size().ToString() |
178 << " tiling_size: " << tiling->tiling_size().ToString() | 182 << " tiling_size: " << tiling->tiling_size().ToString() |
179 << " CalculateTileSize: " | 183 << " CalculateTileSize: " |
180 << client_->CalculateTileSize(tiling->tiling_size()).ToString(); | 184 << client_->CalculateTileSize(tiling->tiling_size()).ToString(); |
181 } | 185 } |
182 | 186 |
183 if (!tilings_.empty()) { | 187 if (!tilings_.empty()) { |
184 DCHECK_LE(NumHighResTilings(), 1); | 188 DCHECK_LE(NumHighResTilings(), 1); |
(...skipping 10 matching lines...) Expand all Loading... | |
195 } | 199 } |
196 #endif | 200 #endif |
197 } | 201 } |
198 | 202 |
199 void PictureLayerTilingSet::CleanUpTilings( | 203 void PictureLayerTilingSet::CleanUpTilings( |
200 float min_acceptable_high_res_scale, | 204 float min_acceptable_high_res_scale, |
201 float max_acceptable_high_res_scale, | 205 float max_acceptable_high_res_scale, |
202 const std::vector<PictureLayerTiling*>& needed_tilings, | 206 const std::vector<PictureLayerTiling*>& needed_tilings, |
203 PictureLayerTilingSet* twin_set) { | 207 PictureLayerTilingSet* twin_set) { |
204 std::vector<PictureLayerTiling*> to_remove; | 208 std::vector<PictureLayerTiling*> to_remove; |
205 for (auto* tiling : tilings_) { | 209 for (const scoped_ptr<PictureLayerTiling>& tiling : tilings_) { |
danakj
2015/11/17 01:12:18
auto
vmpstr
2015/11/17 23:26:25
Done.
| |
206 // Keep all tilings within the min/max scales. | 210 // Keep all tilings within the min/max scales. |
207 if (tiling->contents_scale() >= min_acceptable_high_res_scale && | 211 if (tiling->contents_scale() >= min_acceptable_high_res_scale && |
208 tiling->contents_scale() <= max_acceptable_high_res_scale) { | 212 tiling->contents_scale() <= max_acceptable_high_res_scale) { |
209 continue; | 213 continue; |
210 } | 214 } |
211 | 215 |
212 // Keep low resolution tilings. | 216 // Keep low resolution tilings. |
213 if (tiling->resolution() == LOW_RESOLUTION) | 217 if (tiling->resolution() == LOW_RESOLUTION) |
214 continue; | 218 continue; |
215 | 219 |
216 // Don't remove tilings that are required. | 220 // Don't remove tilings that are required. |
217 if (std::find(needed_tilings.begin(), needed_tilings.end(), tiling) != | 221 if (std::find(needed_tilings.begin(), needed_tilings.end(), tiling) != |
218 needed_tilings.end()) { | 222 needed_tilings.end()) { |
219 continue; | 223 continue; |
220 } | 224 } |
221 | 225 |
222 to_remove.push_back(tiling); | 226 to_remove.push_back(tiling.get()); |
223 } | 227 } |
224 | 228 |
225 for (auto* tiling : to_remove) { | 229 for (auto* tiling : to_remove) { |
226 DCHECK_NE(HIGH_RESOLUTION, tiling->resolution()); | 230 DCHECK_NE(HIGH_RESOLUTION, tiling->resolution()); |
227 Remove(tiling); | 231 Remove(tiling); |
228 } | 232 } |
229 } | 233 } |
230 | 234 |
231 void PictureLayerTilingSet::RemoveNonIdealTilings() { | 235 void PictureLayerTilingSet::RemoveNonIdealTilings() { |
232 auto to_remove = tilings_.remove_if([](PictureLayerTiling* t) { | 236 auto to_remove = |
233 return t->resolution() == NON_IDEAL_RESOLUTION; | 237 std::remove_if(tilings_.begin(), tilings_.end(), |
234 }); | 238 [](const scoped_ptr<PictureLayerTiling>& t) { |
239 return t->resolution() == NON_IDEAL_RESOLUTION; | |
240 }); | |
235 tilings_.erase(to_remove, tilings_.end()); | 241 tilings_.erase(to_remove, tilings_.end()); |
236 } | 242 } |
237 | 243 |
238 void PictureLayerTilingSet::MarkAllTilingsNonIdeal() { | 244 void PictureLayerTilingSet::MarkAllTilingsNonIdeal() { |
239 for (auto* tiling : tilings_) | 245 for (const scoped_ptr<PictureLayerTiling>& tiling : tilings_) |
danakj
2015/11/17 01:12:18
auto
vmpstr
2015/11/17 23:26:25
Done.
| |
240 tiling->set_resolution(NON_IDEAL_RESOLUTION); | 246 tiling->set_resolution(NON_IDEAL_RESOLUTION); |
241 } | 247 } |
242 | 248 |
243 PictureLayerTiling* PictureLayerTilingSet::AddTiling( | 249 PictureLayerTiling* PictureLayerTilingSet::AddTiling( |
244 float contents_scale, | 250 float contents_scale, |
245 scoped_refptr<DisplayListRasterSource> raster_source) { | 251 scoped_refptr<DisplayListRasterSource> raster_source) { |
246 for (size_t i = 0; i < tilings_.size(); ++i) { | 252 for (size_t i = 0; i < tilings_.size(); ++i) { |
247 DCHECK_NE(tilings_[i]->contents_scale(), contents_scale); | 253 DCHECK_NE(tilings_[i]->contents_scale(), contents_scale); |
248 DCHECK_EQ(tilings_[i]->raster_source(), raster_source.get()); | 254 DCHECK_EQ(tilings_[i]->raster_source(), raster_source.get()); |
249 } | 255 } |
250 | 256 |
251 tilings_.push_back(PictureLayerTiling::Create( | 257 tilings_.push_back(PictureLayerTiling::Create( |
252 tree_, contents_scale, raster_source, client_, | 258 tree_, contents_scale, raster_source, client_, |
253 tiling_interest_area_padding_, skewport_target_time_in_seconds_, | 259 tiling_interest_area_padding_, skewport_target_time_in_seconds_, |
254 skewport_extrapolation_limit_in_content_pixels_)); | 260 skewport_extrapolation_limit_in_content_pixels_)); |
255 PictureLayerTiling* appended = tilings_.back(); | 261 PictureLayerTiling* appended = tilings_.back().get(); |
256 | 262 |
257 tilings_.sort(LargestToSmallestScaleFunctor()); | 263 std::sort(tilings_.begin(), tilings_.end(), LargestToSmallestScaleFunctor()); |
258 return appended; | 264 return appended; |
259 } | 265 } |
260 | 266 |
261 int PictureLayerTilingSet::NumHighResTilings() const { | 267 int PictureLayerTilingSet::NumHighResTilings() const { |
262 return std::count_if(tilings_.begin(), tilings_.end(), | 268 return std::count_if(tilings_.begin(), tilings_.end(), |
263 [](PictureLayerTiling* tiling) { | 269 [](const scoped_ptr<PictureLayerTiling>& tiling) { |
264 return tiling->resolution() == HIGH_RESOLUTION; | 270 return tiling->resolution() == HIGH_RESOLUTION; |
265 }); | 271 }); |
266 } | 272 } |
267 | 273 |
268 PictureLayerTiling* PictureLayerTilingSet::FindTilingWithScale( | 274 PictureLayerTiling* PictureLayerTilingSet::FindTilingWithScale( |
269 float scale) const { | 275 float scale) const { |
270 for (size_t i = 0; i < tilings_.size(); ++i) { | 276 for (size_t i = 0; i < tilings_.size(); ++i) { |
271 if (tilings_[i]->contents_scale() == scale) | 277 if (tilings_[i]->contents_scale() == scale) |
272 return tilings_[i]; | 278 return tilings_[i].get(); |
273 } | 279 } |
274 return NULL; | 280 return nullptr; |
danakj
2015/11/17 01:12:18
thx
vmpstr
2015/11/17 23:26:24
Done.
| |
275 } | 281 } |
276 | 282 |
277 PictureLayerTiling* PictureLayerTilingSet::FindTilingWithResolution( | 283 PictureLayerTiling* PictureLayerTilingSet::FindTilingWithResolution( |
278 TileResolution resolution) const { | 284 TileResolution resolution) const { |
279 auto iter = std::find_if(tilings_.begin(), tilings_.end(), | 285 auto iter = |
280 [resolution](const PictureLayerTiling* tiling) { | 286 std::find_if(tilings_.begin(), tilings_.end(), |
281 return tiling->resolution() == resolution; | 287 [resolution](const scoped_ptr<PictureLayerTiling>& tiling) { |
282 }); | 288 return tiling->resolution() == resolution; |
289 }); | |
283 if (iter == tilings_.end()) | 290 if (iter == tilings_.end()) |
284 return NULL; | 291 return nullptr; |
285 return *iter; | 292 return iter->get(); |
286 } | 293 } |
287 | 294 |
288 void PictureLayerTilingSet::RemoveTilingsBelowScale(float minimum_scale) { | 295 void PictureLayerTilingSet::RemoveTilingsBelowScale(float minimum_scale) { |
289 auto to_remove = | 296 auto to_remove = std::remove_if( |
290 tilings_.remove_if([minimum_scale](PictureLayerTiling* tiling) { | 297 tilings_.begin(), tilings_.end(), |
298 [minimum_scale](const scoped_ptr<PictureLayerTiling>& tiling) { | |
291 return tiling->contents_scale() < minimum_scale; | 299 return tiling->contents_scale() < minimum_scale; |
292 }); | 300 }); |
293 tilings_.erase(to_remove, tilings_.end()); | 301 tilings_.erase(to_remove, tilings_.end()); |
294 } | 302 } |
295 | 303 |
296 void PictureLayerTilingSet::RemoveTilingsAboveScale(float maximum_scale) { | 304 void PictureLayerTilingSet::RemoveTilingsAboveScale(float maximum_scale) { |
297 auto to_remove = | 305 auto to_remove = std::remove_if( |
298 tilings_.remove_if([maximum_scale](PictureLayerTiling* tiling) { | 306 tilings_.begin(), tilings_.end(), |
307 [maximum_scale](const scoped_ptr<PictureLayerTiling>& tiling) { | |
299 return tiling->contents_scale() > maximum_scale; | 308 return tiling->contents_scale() > maximum_scale; |
300 }); | 309 }); |
301 tilings_.erase(to_remove, tilings_.end()); | 310 tilings_.erase(to_remove, tilings_.end()); |
302 } | 311 } |
303 | 312 |
304 void PictureLayerTilingSet::RemoveAllTilings() { | 313 void PictureLayerTilingSet::RemoveAllTilings() { |
305 tilings_.clear(); | 314 tilings_.clear(); |
306 } | 315 } |
307 | 316 |
308 void PictureLayerTilingSet::Remove(PictureLayerTiling* tiling) { | 317 void PictureLayerTilingSet::Remove(PictureLayerTiling* tiling) { |
309 ScopedPtrVector<PictureLayerTiling>::iterator iter = | 318 std::vector<scoped_ptr<PictureLayerTiling>>::iterator iter = |
310 std::find(tilings_.begin(), tilings_.end(), tiling); | 319 std::find_if(tilings_.begin(), tilings_.end(), |
320 [tiling](const scoped_ptr<PictureLayerTiling>& candidate) { | |
321 return candidate.get() == tiling; | |
322 }); | |
311 if (iter == tilings_.end()) | 323 if (iter == tilings_.end()) |
312 return; | 324 return; |
313 tilings_.erase(iter); | 325 tilings_.erase(iter); |
314 } | 326 } |
315 | 327 |
316 void PictureLayerTilingSet::RemoveAllTiles() { | 328 void PictureLayerTilingSet::RemoveAllTiles() { |
317 for (size_t i = 0; i < tilings_.size(); ++i) | 329 for (size_t i = 0; i < tilings_.size(); ++i) |
318 tilings_[i]->Reset(); | 330 tilings_[i]->Reset(); |
319 } | 331 } |
320 | 332 |
321 float PictureLayerTilingSet::GetSnappedContentsScale( | 333 float PictureLayerTilingSet::GetSnappedContentsScale( |
322 float start_scale, | 334 float start_scale, |
323 float snap_to_existing_tiling_ratio) const { | 335 float snap_to_existing_tiling_ratio) const { |
324 // If a tiling exists within the max snapping ratio, snap to its scale. | 336 // If a tiling exists within the max snapping ratio, snap to its scale. |
325 float snapped_contents_scale = start_scale; | 337 float snapped_contents_scale = start_scale; |
326 float snapped_ratio = snap_to_existing_tiling_ratio; | 338 float snapped_ratio = snap_to_existing_tiling_ratio; |
327 for (const auto* tiling : tilings_) { | 339 for (const scoped_ptr<PictureLayerTiling>& tiling : tilings_) { |
danakj
2015/11/17 01:12:18
auto
vmpstr
2015/11/17 23:26:24
Done.
| |
328 float tiling_contents_scale = tiling->contents_scale(); | 340 float tiling_contents_scale = tiling->contents_scale(); |
329 float ratio = LargerRatio(tiling_contents_scale, start_scale); | 341 float ratio = LargerRatio(tiling_contents_scale, start_scale); |
330 if (ratio < snapped_ratio) { | 342 if (ratio < snapped_ratio) { |
331 snapped_contents_scale = tiling_contents_scale; | 343 snapped_contents_scale = tiling_contents_scale; |
332 snapped_ratio = ratio; | 344 snapped_ratio = ratio; |
333 } | 345 } |
334 } | 346 } |
335 return snapped_contents_scale; | 347 return snapped_contents_scale; |
336 } | 348 } |
337 | 349 |
338 float PictureLayerTilingSet::GetMaximumContentsScale() const { | 350 float PictureLayerTilingSet::GetMaximumContentsScale() const { |
339 if (tilings_.empty()) | 351 if (tilings_.empty()) |
340 return 0.f; | 352 return 0.f; |
341 // The first tiling has the largest contents scale. | 353 // The first tiling has the largest contents scale. |
342 return tilings_[0]->contents_scale(); | 354 return tilings_[0]->contents_scale(); |
343 } | 355 } |
344 | 356 |
345 bool PictureLayerTilingSet::UpdateTilePriorities( | 357 bool PictureLayerTilingSet::UpdateTilePriorities( |
346 const gfx::Rect& required_rect_in_layer_space, | 358 const gfx::Rect& required_rect_in_layer_space, |
347 float ideal_contents_scale, | 359 float ideal_contents_scale, |
348 double current_frame_time_in_seconds, | 360 double current_frame_time_in_seconds, |
349 const Occlusion& occlusion_in_layer_space, | 361 const Occlusion& occlusion_in_layer_space, |
350 bool can_require_tiles_for_activation) { | 362 bool can_require_tiles_for_activation) { |
351 bool updated = false; | 363 bool updated = false; |
352 for (auto* tiling : tilings_) { | 364 for (const scoped_ptr<PictureLayerTiling>& tiling : tilings_) { |
danakj
2015/11/17 01:12:18
auto
vmpstr
2015/11/17 23:26:24
Done.
| |
353 tiling->set_can_require_tiles_for_activation( | 365 tiling->set_can_require_tiles_for_activation( |
354 can_require_tiles_for_activation); | 366 can_require_tiles_for_activation); |
355 updated |= tiling->ComputeTilePriorityRects( | 367 updated |= tiling->ComputeTilePriorityRects( |
356 required_rect_in_layer_space, ideal_contents_scale, | 368 required_rect_in_layer_space, ideal_contents_scale, |
357 current_frame_time_in_seconds, occlusion_in_layer_space); | 369 current_frame_time_in_seconds, occlusion_in_layer_space); |
358 } | 370 } |
359 return updated; | 371 return updated; |
360 } | 372 } |
361 | 373 |
362 void PictureLayerTilingSet::GetAllPrioritizedTilesForTracing( | 374 void PictureLayerTilingSet::GetAllPrioritizedTilesForTracing( |
363 std::vector<PrioritizedTile>* prioritized_tiles) const { | 375 std::vector<PrioritizedTile>* prioritized_tiles) const { |
364 for (auto* tiling : tilings_) | 376 for (const scoped_ptr<PictureLayerTiling>& tiling : tilings_) |
danakj
2015/11/17 01:12:18
auto
vmpstr
2015/11/17 23:26:24
Done.
| |
365 tiling->GetAllPrioritizedTilesForTracing(prioritized_tiles); | 377 tiling->GetAllPrioritizedTilesForTracing(prioritized_tiles); |
366 } | 378 } |
367 | 379 |
368 PictureLayerTilingSet::CoverageIterator::CoverageIterator( | 380 PictureLayerTilingSet::CoverageIterator::CoverageIterator( |
369 const PictureLayerTilingSet* set, | 381 const PictureLayerTilingSet* set, |
370 float contents_scale, | 382 float contents_scale, |
371 const gfx::Rect& content_rect, | 383 const gfx::Rect& content_rect, |
372 float ideal_contents_scale) | 384 float ideal_contents_scale) |
373 : set_(set), | 385 : set_(set), |
374 contents_scale_(contents_scale), | 386 contents_scale_(contents_scale), |
375 ideal_contents_scale_(ideal_contents_scale), | 387 ideal_contents_scale_(ideal_contents_scale), |
376 current_tiling_(std::numeric_limits<size_t>::max()) { | 388 current_tiling_(std::numeric_limits<size_t>::max()) { |
377 missing_region_.Union(content_rect); | 389 missing_region_.Union(content_rect); |
378 | 390 |
379 size_t tilings_size = set_->tilings_.size(); | 391 size_t tilings_size = set_->tilings_.size(); |
380 for (ideal_tiling_ = 0; ideal_tiling_ < tilings_size; ++ideal_tiling_) { | 392 for (ideal_tiling_ = 0; ideal_tiling_ < tilings_size; ++ideal_tiling_) { |
381 PictureLayerTiling* tiling = set_->tilings_[ideal_tiling_]; | 393 PictureLayerTiling* tiling = set_->tilings_[ideal_tiling_].get(); |
382 if (tiling->contents_scale() < ideal_contents_scale_) { | 394 if (tiling->contents_scale() < ideal_contents_scale_) { |
383 if (ideal_tiling_ > 0) | 395 if (ideal_tiling_ > 0) |
384 ideal_tiling_--; | 396 ideal_tiling_--; |
385 break; | 397 break; |
386 } | 398 } |
387 } | 399 } |
388 | 400 |
389 if (ideal_tiling_ == tilings_size && ideal_tiling_ > 0) | 401 if (ideal_tiling_ == tilings_size && ideal_tiling_ > 0) |
390 ideal_tiling_--; | 402 ideal_tiling_--; |
391 | 403 |
(...skipping 13 matching lines...) Expand all Loading... | |
405 } | 417 } |
406 | 418 |
407 gfx::RectF PictureLayerTilingSet::CoverageIterator::texture_rect() const { | 419 gfx::RectF PictureLayerTilingSet::CoverageIterator::texture_rect() const { |
408 if (!tiling_iter_) | 420 if (!tiling_iter_) |
409 return gfx::RectF(); | 421 return gfx::RectF(); |
410 return tiling_iter_.texture_rect(); | 422 return tiling_iter_.texture_rect(); |
411 } | 423 } |
412 | 424 |
413 Tile* PictureLayerTilingSet::CoverageIterator::operator->() const { | 425 Tile* PictureLayerTilingSet::CoverageIterator::operator->() const { |
414 if (!tiling_iter_) | 426 if (!tiling_iter_) |
415 return NULL; | 427 return nullptr; |
416 return *tiling_iter_; | 428 return *tiling_iter_; |
417 } | 429 } |
418 | 430 |
419 Tile* PictureLayerTilingSet::CoverageIterator::operator*() const { | 431 Tile* PictureLayerTilingSet::CoverageIterator::operator*() const { |
420 if (!tiling_iter_) | 432 if (!tiling_iter_) |
421 return NULL; | 433 return nullptr; |
422 return *tiling_iter_; | 434 return *tiling_iter_; |
423 } | 435 } |
424 | 436 |
425 TileResolution PictureLayerTilingSet::CoverageIterator::resolution() const { | 437 TileResolution PictureLayerTilingSet::CoverageIterator::resolution() const { |
426 const PictureLayerTiling* tiling = CurrentTiling(); | 438 const PictureLayerTiling* tiling = CurrentTiling(); |
427 DCHECK(tiling); | 439 DCHECK(tiling); |
428 return tiling->resolution(); | 440 return tiling->resolution(); |
429 } | 441 } |
430 | 442 |
431 PictureLayerTiling* PictureLayerTilingSet::CoverageIterator::CurrentTiling() | 443 PictureLayerTiling* PictureLayerTilingSet::CoverageIterator::CurrentTiling() |
432 const { | 444 const { |
433 if (current_tiling_ == std::numeric_limits<size_t>::max()) | 445 if (current_tiling_ == std::numeric_limits<size_t>::max()) |
434 return NULL; | 446 return nullptr; |
435 if (current_tiling_ >= set_->tilings_.size()) | 447 if (current_tiling_ >= set_->tilings_.size()) |
436 return NULL; | 448 return nullptr; |
437 return set_->tilings_[current_tiling_]; | 449 return set_->tilings_[current_tiling_].get(); |
438 } | 450 } |
439 | 451 |
440 size_t PictureLayerTilingSet::CoverageIterator::NextTiling() const { | 452 size_t PictureLayerTilingSet::CoverageIterator::NextTiling() const { |
441 // Order returned by this method is: | 453 // Order returned by this method is: |
442 // 1. Ideal tiling index | 454 // 1. Ideal tiling index |
443 // 2. Tiling index < Ideal in decreasing order (higher res than ideal) | 455 // 2. Tiling index < Ideal in decreasing order (higher res than ideal) |
444 // 3. Tiling index > Ideal in increasing order (lower res than ideal) | 456 // 3. Tiling index > Ideal in increasing order (lower res than ideal) |
445 // 4. Tiling index > tilings.size() (invalid index) | 457 // 4. Tiling index > tilings.size() (invalid index) |
446 if (current_tiling_ == std::numeric_limits<size_t>::max()) | 458 if (current_tiling_ == std::numeric_limits<size_t>::max()) |
447 return ideal_tiling_; | 459 return ideal_tiling_; |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
498 gfx::Rect last_rect = region_iter_.rect(); | 510 gfx::Rect last_rect = region_iter_.rect(); |
499 region_iter_.next(); | 511 region_iter_.next(); |
500 | 512 |
501 // Done, found next checkerboard rect to return. | 513 // Done, found next checkerboard rect to return. |
502 if (current_tiling_ >= set_->tilings_.size()) | 514 if (current_tiling_ >= set_->tilings_.size()) |
503 return *this; | 515 return *this; |
504 | 516 |
505 // Construct a new iterator for the next tiling, but we need to loop | 517 // Construct a new iterator for the next tiling, but we need to loop |
506 // again until we get to a valid one. | 518 // again until we get to a valid one. |
507 tiling_iter_ = PictureLayerTiling::CoverageIterator( | 519 tiling_iter_ = PictureLayerTiling::CoverageIterator( |
508 set_->tilings_[current_tiling_], | 520 set_->tilings_[current_tiling_].get(), contents_scale_, last_rect); |
509 contents_scale_, | |
510 last_rect); | |
511 } | 521 } |
512 | 522 |
513 return *this; | 523 return *this; |
514 } | 524 } |
515 | 525 |
516 PictureLayerTilingSet::CoverageIterator::operator bool() const { | 526 PictureLayerTilingSet::CoverageIterator::operator bool() const { |
517 return current_tiling_ < set_->tilings_.size() || region_iter_.has_rect(); | 527 return current_tiling_ < set_->tilings_.size() || region_iter_.has_rect(); |
518 } | 528 } |
519 | 529 |
520 void PictureLayerTilingSet::AsValueInto( | 530 void PictureLayerTilingSet::AsValueInto( |
(...skipping 14 matching lines...) Expand all Loading... | |
535 | 545 |
536 PictureLayerTilingSet::TilingRange PictureLayerTilingSet::GetTilingRange( | 546 PictureLayerTilingSet::TilingRange PictureLayerTilingSet::GetTilingRange( |
537 TilingRangeType type) const { | 547 TilingRangeType type) const { |
538 // Doesn't seem to be the case right now but if it ever becomes a performance | 548 // Doesn't seem to be the case right now but if it ever becomes a performance |
539 // problem to compute these ranges each time this function is called, we can | 549 // problem to compute these ranges each time this function is called, we can |
540 // compute them only when the tiling set has changed instead. | 550 // compute them only when the tiling set has changed instead. |
541 size_t tilings_size = tilings_.size(); | 551 size_t tilings_size = tilings_.size(); |
542 TilingRange high_res_range(0, 0); | 552 TilingRange high_res_range(0, 0); |
543 TilingRange low_res_range(tilings_.size(), tilings_.size()); | 553 TilingRange low_res_range(tilings_.size(), tilings_.size()); |
544 for (size_t i = 0; i < tilings_size; ++i) { | 554 for (size_t i = 0; i < tilings_size; ++i) { |
545 const PictureLayerTiling* tiling = tilings_[i]; | 555 const PictureLayerTiling* tiling = tilings_[i].get(); |
546 if (tiling->resolution() == HIGH_RESOLUTION) | 556 if (tiling->resolution() == HIGH_RESOLUTION) |
547 high_res_range = TilingRange(i, i + 1); | 557 high_res_range = TilingRange(i, i + 1); |
548 if (tiling->resolution() == LOW_RESOLUTION) | 558 if (tiling->resolution() == LOW_RESOLUTION) |
549 low_res_range = TilingRange(i, i + 1); | 559 low_res_range = TilingRange(i, i + 1); |
550 } | 560 } |
551 | 561 |
552 TilingRange range(0, 0); | 562 TilingRange range(0, 0); |
553 switch (type) { | 563 switch (type) { |
554 case HIGHER_THAN_HIGH_RES: | 564 case HIGHER_THAN_HIGH_RES: |
555 range = TilingRange(0, high_res_range.start); | 565 range = TilingRange(0, high_res_range.start); |
(...skipping 19 matching lines...) Expand all Loading... | |
575 case LOWER_THAN_LOW_RES: | 585 case LOWER_THAN_LOW_RES: |
576 range = TilingRange(low_res_range.end, tilings_size); | 586 range = TilingRange(low_res_range.end, tilings_size); |
577 break; | 587 break; |
578 } | 588 } |
579 | 589 |
580 DCHECK_LE(range.start, range.end); | 590 DCHECK_LE(range.start, range.end); |
581 return range; | 591 return range; |
582 } | 592 } |
583 | 593 |
584 } // namespace cc | 594 } // namespace cc |
OLD | NEW |