Chromium Code Reviews

Side by Side Diff: cc/resources/picture_layer_tiling_set.cc

Issue 367833003: cc: Start using raster/eviction iterators. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | | Annotate | Revision Log
OLDNEW
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 8
9 namespace cc { 9 namespace cc {
10 10
(...skipping 57 matching lines...)
68 continue; 68 continue;
69 if (PictureLayerTiling* this_tiling = TilingAtScale(contents_scale)) { 69 if (PictureLayerTiling* this_tiling = TilingAtScale(contents_scale)) {
70 this_tiling->set_resolution(other.tilings_[i]->resolution()); 70 this_tiling->set_resolution(other.tilings_[i]->resolution());
71 71
72 // These two calls must come before updating the pile, because they may 72 // These two calls must come before updating the pile, because they may
73 // destroy tiles that the new pile cannot raster. 73 // destroy tiles that the new pile cannot raster.
74 this_tiling->SetLayerBounds(new_layer_bounds); 74 this_tiling->SetLayerBounds(new_layer_bounds);
75 this_tiling->Invalidate(layer_invalidation); 75 this_tiling->Invalidate(layer_invalidation);
76 76
77 this_tiling->UpdateTilesToCurrentPile(); 77 this_tiling->UpdateTilesToCurrentPile();
78 this_tiling->CreateMissingTilesInLiveTilesRect();
79 if (this_tiling->resolution() == HIGH_RESOLUTION) 78 if (this_tiling->resolution() == HIGH_RESOLUTION)
80 have_high_res_tiling = true; 79 have_high_res_tiling = true;
81 80
82 DCHECK(this_tiling->tile_size() == 81 DCHECK(this_tiling->tile_size() ==
83 client_->CalculateTileSize(this_tiling->TilingRect().size())); 82 client_->CalculateTileSize(this_tiling->TilingRect().size()));
84 continue; 83 continue;
85 } 84 }
86 scoped_ptr<PictureLayerTiling> new_tiling = PictureLayerTiling::Create( 85 scoped_ptr<PictureLayerTiling> new_tiling = PictureLayerTiling::Create(
87 contents_scale, 86 contents_scale,
88 new_layer_bounds, 87 new_layer_bounds,
89 client_); 88 client_);
90 new_tiling->set_resolution(other.tilings_[i]->resolution()); 89 new_tiling->set_resolution(other.tilings_[i]->resolution());
91 if (new_tiling->resolution() == HIGH_RESOLUTION) 90 if (new_tiling->resolution() == HIGH_RESOLUTION)
92 have_high_res_tiling = true; 91 have_high_res_tiling = true;
93 tilings_.push_back(new_tiling.Pass()); 92 tilings_.push_back(new_tiling.Pass());
94 } 93 }
95 tilings_.sort(LargestToSmallestScaleFunctor()); 94 tilings_.sort(LargestToSmallestScaleFunctor());
96 95
97 layer_bounds_ = new_layer_bounds; 96 layer_bounds_ = new_layer_bounds;
98 return have_high_res_tiling; 97 return have_high_res_tiling;
99 } 98 }
100 99
101 void PictureLayerTilingSet::RemoveTilesInRegion(const Region& region) { 100 void PictureLayerTilingSet::RemoveTilesInRegion(const Region& region) {
102 for (size_t i = 0; i < tilings_.size(); ++i) 101 for (size_t i = 0; i < tilings_.size(); ++i)
103 tilings_[i]->RemoveTilesInRegion(region); 102 tilings_[i]->Invalidate(region);
104 } 103 }
105 104
106 PictureLayerTiling* PictureLayerTilingSet::AddTiling(float contents_scale) { 105 PictureLayerTiling* PictureLayerTilingSet::AddTiling(float contents_scale) {
107 for (size_t i = 0; i < tilings_.size(); ++i) 106 for (size_t i = 0; i < tilings_.size(); ++i)
108 DCHECK_NE(tilings_[i]->contents_scale(), contents_scale); 107 DCHECK_NE(tilings_[i]->contents_scale(), contents_scale);
109 108
110 tilings_.push_back(PictureLayerTiling::Create(contents_scale, 109 tilings_.push_back(PictureLayerTiling::Create(contents_scale,
111 layer_bounds_, 110 layer_bounds_,
112 client_)); 111 client_));
113 PictureLayerTiling* appended = tilings_.back(); 112 PictureLayerTiling* appended = tilings_.back();
(...skipping 191 matching lines...)
305 PictureLayerTilingSet::CoverageIterator::operator bool() const { 304 PictureLayerTilingSet::CoverageIterator::operator bool() const {
306 return current_tiling_ < static_cast<int>(set_->tilings_.size()) || 305 return current_tiling_ < static_cast<int>(set_->tilings_.size()) ||
307 region_iter_.has_rect(); 306 region_iter_.has_rect();
308 } 307 }
309 308
310 void PictureLayerTilingSet::DidBecomeActive() { 309 void PictureLayerTilingSet::DidBecomeActive() {
311 for (size_t i = 0; i < tilings_.size(); ++i) 310 for (size_t i = 0; i < tilings_.size(); ++i)
312 tilings_[i]->DidBecomeActive(); 311 tilings_[i]->DidBecomeActive();
313 } 312 }
314 313
315 void PictureLayerTilingSet::DidBecomeRecycled() {
316 for (size_t i = 0; i < tilings_.size(); ++i)
317 tilings_[i]->DidBecomeRecycled();
318 }
319
320 scoped_ptr<base::Value> PictureLayerTilingSet::AsValue() const { 314 scoped_ptr<base::Value> PictureLayerTilingSet::AsValue() const {
321 scoped_ptr<base::ListValue> state(new base::ListValue()); 315 scoped_ptr<base::ListValue> state(new base::ListValue());
322 for (size_t i = 0; i < tilings_.size(); ++i) 316 for (size_t i = 0; i < tilings_.size(); ++i)
323 state->Append(tilings_[i]->AsValue().release()); 317 state->Append(tilings_[i]->AsValue().release());
324 return state.PassAs<base::Value>(); 318 return state.PassAs<base::Value>();
325 } 319 }
326 320
327 size_t PictureLayerTilingSet::GPUMemoryUsageInBytes() const { 321 size_t PictureLayerTilingSet::GPUMemoryUsageInBytes() const {
328 size_t amount = 0; 322 size_t amount = 0;
329 for (size_t i = 0; i < tilings_.size(); ++i) 323 for (size_t i = 0; i < tilings_.size(); ++i)
330 amount += tilings_[i]->GPUMemoryUsageInBytes(); 324 amount += tilings_[i]->GPUMemoryUsageInBytes();
331 return amount; 325 return amount;
332 } 326 }
333 327
334 } // namespace cc 328 } // namespace cc
OLDNEW

Powered by Google App Engine