Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(613)

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

Issue 12865017: Makes tile-creation lazy (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: addressing last round of feedback Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | 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
11 namespace { 11 namespace {
12 12
13 class LargestToSmallestScaleFunctor { 13 class LargestToSmallestScaleFunctor {
14 public: 14 public:
15 bool operator() (PictureLayerTiling* left, PictureLayerTiling* right) { 15 bool operator() (PictureLayerTiling* left, PictureLayerTiling* right) {
16 return left->contents_scale() > right->contents_scale(); 16 return left->contents_scale() > right->contents_scale();
17 } 17 }
18 }; 18 };
19 19
20 } // namespace 20 } // namespace
21 21
22 22
23 PictureLayerTilingSet::PictureLayerTilingSet( 23 PictureLayerTilingSet::PictureLayerTilingSet(
24 PictureLayerTilingClient * client) 24 PictureLayerTilingClient* client,
25 : client_(client) { 25 gfx::Size layer_bounds)
26 : client_(client),
27 layer_bounds_(layer_bounds) {
26 } 28 }
27 29
28 PictureLayerTilingSet::~PictureLayerTilingSet() { 30 PictureLayerTilingSet::~PictureLayerTilingSet() {
29 } 31 }
30 32
31 void PictureLayerTilingSet::SetClient(PictureLayerTilingClient* client) { 33 void PictureLayerTilingSet::SetClient(PictureLayerTilingClient* client) {
32 client_ = client; 34 client_ = client;
33 for (size_t i = 0; i < tilings_.size(); ++i) 35 for (size_t i = 0; i < tilings_.size(); ++i)
34 tilings_[i]->SetClient(client_); 36 tilings_[i]->SetClient(client_);
35 } 37 }
36 38
37 void PictureLayerTilingSet::CloneAll( 39 void PictureLayerTilingSet::CloneAll(
38 const PictureLayerTilingSet& other, 40 const PictureLayerTilingSet& other,
39 const Region& invalidation,
40 float minimum_contents_scale) { 41 float minimum_contents_scale) {
41 tilings_.clear(); 42 tilings_.clear();
42 tilings_.reserve(other.tilings_.size()); 43 tilings_.reserve(other.tilings_.size());
43 for (size_t i = 0; i < other.tilings_.size(); ++i) { 44 for (size_t i = 0; i < other.tilings_.size(); ++i) {
44 if (other.tilings_[i]->contents_scale() < minimum_contents_scale) 45 const PictureLayerTiling* tiling = other.tilings_[i];
46 if (tiling->contents_scale() < minimum_contents_scale)
45 continue; 47 continue;
46 Clone(other.tilings_[i], invalidation); 48 tilings_.push_back(tiling->Clone(layer_bounds_, client_));
47 } 49 }
50 tilings_.sort(LargestToSmallestScaleFunctor());
48 } 51 }
49 52
50 void PictureLayerTilingSet::Clone( 53 void PictureLayerTilingSet::Clone(const PictureLayerTiling* tiling) {
51 const PictureLayerTiling* tiling,
52 const Region& invalidation) {
53
54 for (size_t i = 0; i < tilings_.size(); ++i) 54 for (size_t i = 0; i < tilings_.size(); ++i)
55 DCHECK_NE(tilings_[i]->contents_scale(), tiling->contents_scale()); 55 DCHECK_NE(tilings_[i]->contents_scale(), tiling->contents_scale());
56 56
57 tilings_.push_back(tiling->Clone()); 57 tilings_.push_back(tiling->Clone(layer_bounds_, client_));
58 gfx::Size size = tilings_.back()->layer_bounds();
59 tilings_.back()->SetClient(client_);
60 tilings_.back()->Invalidate(invalidation);
61 // Intentionally use this set's layer bounds, as it may have changed.
62 tilings_.back()->SetLayerBounds(layer_bounds_);
63
64 tilings_.sort(LargestToSmallestScaleFunctor()); 58 tilings_.sort(LargestToSmallestScaleFunctor());
65 } 59 }
66 60
67 void PictureLayerTilingSet::SetLayerBounds(gfx::Size layer_bounds) {
68 if (layer_bounds_ == layer_bounds)
69 return;
70 layer_bounds_ = layer_bounds;
71 for (size_t i = 0; i < tilings_.size(); ++i)
72 tilings_[i]->SetLayerBounds(layer_bounds);
73 }
74
75 gfx::Size PictureLayerTilingSet::LayerBounds() const {
76 return layer_bounds_;
77 }
78
79 void PictureLayerTilingSet::Invalidate(const Region& layer_invalidation) {
80 for (size_t i = 0; i < tilings_.size(); ++i)
81 tilings_[i]->Invalidate(layer_invalidation);
82 }
83
84 void PictureLayerTilingSet::InvalidateTilesWithText() { 61 void PictureLayerTilingSet::InvalidateTilesWithText() {
85 for (size_t i = 0; i < tilings_.size(); ++i) 62 for (size_t i = 0; i < tilings_.size(); ++i)
86 tilings_[i]->InvalidateTilesWithText(); 63 tilings_[i]->InvalidateTilesWithText();
87 } 64 }
88 65
89 PictureLayerTiling* PictureLayerTilingSet::AddTiling(float contents_scale) { 66 PictureLayerTiling* PictureLayerTilingSet::AddTiling(float contents_scale) {
90 tilings_.push_back(PictureLayerTiling::Create(contents_scale)); 67 tilings_.push_back(PictureLayerTiling::Create(contents_scale,
68 layer_bounds_,
69 client_));
91 PictureLayerTiling* appended = tilings_.back(); 70 PictureLayerTiling* appended = tilings_.back();
92 appended->SetClient(client_);
93 appended->SetLayerBounds(layer_bounds_);
94 71
95 tilings_.sort(LargestToSmallestScaleFunctor()); 72 tilings_.sort(LargestToSmallestScaleFunctor());
96 return appended; 73 return appended;
97 } 74 }
98 75
99 void PictureLayerTilingSet::RemoveAllTilings() { 76 void PictureLayerTilingSet::RemoveAllTilings() {
100 tilings_.clear(); 77 tilings_.clear();
101 } 78 }
102 79
103 void PictureLayerTilingSet::Remove(PictureLayerTiling* tiling) { 80 void PictureLayerTilingSet::Remove(PictureLayerTiling* tiling) {
104 ScopedPtrVector<PictureLayerTiling>::iterator iter = 81 ScopedPtrVector<PictureLayerTiling>::iterator iter =
105 std::find(tilings_.begin(), tilings_.end(), tiling); 82 std::find(tilings_.begin(), tilings_.end(), tiling);
106 if (iter == tilings_.end()) 83 if (iter == tilings_.end())
107 return; 84 return;
108 tilings_.erase(iter); 85 tilings_.erase(iter);
109 } 86 }
110 87
111 void PictureLayerTilingSet::RemoveAllTiles() { 88 void PictureLayerTilingSet::RemoveAllTiles() {
112 for (size_t i = 0; i < tilings_.size(); ++i) 89 for (size_t i = 0; i < tilings_.size(); ++i)
113 tilings_[i]->Reset(); 90 tilings_[i]->Reset();
114 } 91 }
115 92
116 void PictureLayerTilingSet::CreateTilesFromLayerRect(gfx::Rect layer_rect) {
117 for (size_t i = 0; i < tilings_.size(); ++i)
118 tilings_[i]->CreateTilesFromLayerRect(layer_rect);
119 }
120
121 PictureLayerTilingSet::CoverageIterator::CoverageIterator( 93 PictureLayerTilingSet::CoverageIterator::CoverageIterator(
122 const PictureLayerTilingSet* set, 94 const PictureLayerTilingSet* set,
123 float contents_scale, 95 float contents_scale,
124 gfx::Rect content_rect, 96 gfx::Rect content_rect,
125 float ideal_contents_scale) 97 float ideal_contents_scale)
126 : set_(set), 98 : set_(set),
127 contents_scale_(contents_scale), 99 contents_scale_(contents_scale),
128 ideal_contents_scale_(ideal_contents_scale), 100 ideal_contents_scale_(ideal_contents_scale),
129 current_tiling_(-1) { 101 current_tiling_(-1) {
130 missing_region_.Union(content_rect); 102 missing_region_.Union(content_rect);
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 } 290 }
319 291
320 scoped_ptr<base::Value> PictureLayerTilingSet::AsValue() const { 292 scoped_ptr<base::Value> PictureLayerTilingSet::AsValue() const {
321 scoped_ptr<base::ListValue> state(new base::ListValue()); 293 scoped_ptr<base::ListValue> state(new base::ListValue());
322 for (size_t i = 0; i < tilings_.size(); ++i) 294 for (size_t i = 0; i < tilings_.size(); ++i)
323 state->Append(tilings_[i]->AsValue().release()); 295 state->Append(tilings_[i]->AsValue().release());
324 return state.PassAs<base::Value>(); 296 return state.PassAs<base::Value>();
325 } 297 }
326 298
327 } // namespace cc 299 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/picture_layer_tiling_set.h ('k') | cc/resources/picture_layer_tiling_set_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698