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

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

Issue 1051993002: cc: Remove tile sharing from tilings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update Created 5 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/tiling_set_raster_queue_all.h" 5 #include "cc/resources/tiling_set_raster_queue_all.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "cc/resources/picture_layer_tiling_set.h" 9 #include "cc/resources/picture_layer_tiling_set.h"
10 #include "cc/resources/tile.h" 10 #include "cc/resources/tile.h"
11 #include "cc/resources/tile_priority.h" 11 #include "cc/resources/tile_priority.h"
12 12
13 namespace cc { 13 namespace cc {
14 14
15 TilingSetRasterQueueAll::IterationStage::IterationStage(
16 IteratorType type,
17 TilePriority::PriorityBin bin)
18 : iterator_type(type), tile_type(bin) {
19 }
20
15 TilingSetRasterQueueAll::TilingSetRasterQueueAll( 21 TilingSetRasterQueueAll::TilingSetRasterQueueAll(
16 PictureLayerTilingSet* tiling_set, 22 PictureLayerTilingSet* tiling_set,
17 bool prioritize_low_res) 23 bool prioritize_low_res)
18 : tiling_set_(tiling_set), current_stage_(0) { 24 : tiling_set_(tiling_set), current_stage_(0) {
19 DCHECK(tiling_set_); 25 DCHECK(tiling_set_);
20 26
21 // Early out if the tiling set has no tilings. 27 // Early out if the tiling set has no tilings.
22 if (!tiling_set_->num_tilings()) { 28 if (!tiling_set_->num_tilings())
23 current_stage_ = arraysize(stages_);
24 return; 29 return;
25 }
26 30
31 const PictureLayerTilingClient* client = tiling_set->client();
32 WhichTree tree = client->GetTree();
27 // Find high and low res tilings and initialize the iterators. 33 // Find high and low res tilings and initialize the iterators.
34 PictureLayerTiling* high_res_tiling = nullptr;
35 PictureLayerTiling* low_res_tiling = nullptr;
36 PictureLayerTiling* active_non_ideal_pending_high_res_tiling = nullptr;
enne (OOO) 2015/04/20 22:36:28 I know why you need this, but wowwww this variable
vmpstr 2015/04/22 18:38:58 Done.
28 for (size_t i = 0; i < tiling_set_->num_tilings(); ++i) { 37 for (size_t i = 0; i < tiling_set_->num_tilings(); ++i) {
29 PictureLayerTiling* tiling = tiling_set_->tiling_at(i); 38 PictureLayerTiling* tiling = tiling_set_->tiling_at(i);
30 if (tiling->resolution() == HIGH_RESOLUTION) 39 if (tiling->resolution() == HIGH_RESOLUTION)
31 iterators_[HIGH_RES] = TilingIterator(tiling, &tiling->tiling_data_); 40 high_res_tiling = tiling;
32 if (prioritize_low_res && tiling->resolution() == LOW_RESOLUTION) 41 if (prioritize_low_res && tiling->resolution() == LOW_RESOLUTION)
33 iterators_[LOW_RES] = TilingIterator(tiling, &tiling->tiling_data_); 42 low_res_tiling = tiling;
43 if (tree == ACTIVE_TREE && tiling->resolution() == NON_IDEAL_RESOLUTION) {
44 const PictureLayerTiling* twin =
45 client->GetPendingOrActiveTwinTiling(tiling);
46 if (twin && twin->resolution() == HIGH_RESOLUTION)
47 active_non_ideal_pending_high_res_tiling = tiling;
48 }
34 } 49 }
35 50
36 if (prioritize_low_res) { 51 // Reserve the max number of stages: 1 low res, 3 high res, and 2 active non
37 stages_[0].iterator_type = LOW_RES; 52 // ideal pending high res.
38 stages_[0].tile_type = TilePriority::NOW; 53 stages_.reserve(6);
enne (OOO) 2015/04/20 22:36:28 Premature optimization enne says maybe base::Stack
vmpstr 2015/04/22 18:38:57 Done.
39 54
40 stages_[1].iterator_type = HIGH_RES; 55 bool use_low_res_tiling = low_res_tiling && low_res_tiling->has_tiles();
41 stages_[1].tile_type = TilePriority::NOW; 56 if (use_low_res_tiling && prioritize_low_res) {
42 } else { 57 iterators_[LOW_RES] =
43 stages_[0].iterator_type = HIGH_RES; 58 TilingIterator(low_res_tiling, &low_res_tiling->tiling_data_);
44 stages_[0].tile_type = TilePriority::NOW; 59 stages_.push_back(IterationStage(LOW_RES, TilePriority::NOW));
45
46 stages_[1].iterator_type = LOW_RES;
47 stages_[1].tile_type = TilePriority::NOW;
48 } 60 }
49 61
50 stages_[2].iterator_type = HIGH_RES; 62 DCHECK(high_res_tiling);
51 stages_[2].tile_type = TilePriority::SOON; 63 bool use_high_res_tiling = high_res_tiling->has_tiles();
64 if (use_high_res_tiling) {
65 iterators_[HIGH_RES] =
66 TilingIterator(high_res_tiling, &high_res_tiling->tiling_data_);
67 stages_.push_back(IterationStage(HIGH_RES, TilePriority::NOW));
68 }
52 69
53 stages_[3].iterator_type = HIGH_RES; 70 if (low_res_tiling && !prioritize_low_res) {
54 stages_[3].tile_type = TilePriority::EVENTUALLY; 71 iterators_[LOW_RES] =
72 TilingIterator(low_res_tiling, &low_res_tiling->tiling_data_);
73 stages_.push_back(IterationStage(LOW_RES, TilePriority::NOW));
74 }
75
76 if (active_non_ideal_pending_high_res_tiling &&
77 active_non_ideal_pending_high_res_tiling->has_tiles()) {
78 iterators_[ACTIVE_NON_IDEAL_PENDING_HIGH_RES] =
79 TilingIterator(active_non_ideal_pending_high_res_tiling,
80 &active_non_ideal_pending_high_res_tiling->tiling_data_);
81
82 stages_.push_back(
83 IterationStage(ACTIVE_NON_IDEAL_PENDING_HIGH_RES, TilePriority::NOW));
84 stages_.push_back(
85 IterationStage(ACTIVE_NON_IDEAL_PENDING_HIGH_RES, TilePriority::SOON));
86 }
87
88 if (use_high_res_tiling) {
89 stages_.push_back(IterationStage(HIGH_RES, TilePriority::SOON));
90 stages_.push_back(IterationStage(HIGH_RES, TilePriority::EVENTUALLY));
91 }
92
93 if (stages_.empty())
94 return;
55 95
56 IteratorType index = stages_[current_stage_].iterator_type; 96 IteratorType index = stages_[current_stage_].iterator_type;
57 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type; 97 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type;
58 if (iterators_[index].done() || iterators_[index].type() != tile_type) 98 if (iterators_[index].done() || iterators_[index].type() != tile_type)
59 AdvanceToNextStage(); 99 AdvanceToNextStage();
60 } 100 }
61 101
62 TilingSetRasterQueueAll::~TilingSetRasterQueueAll() { 102 TilingSetRasterQueueAll::~TilingSetRasterQueueAll() {
63 } 103 }
64 104
65 bool TilingSetRasterQueueAll::IsEmpty() const { 105 bool TilingSetRasterQueueAll::IsEmpty() const {
66 return current_stage_ >= arraysize(stages_); 106 return current_stage_ >= stages_.size();
67 } 107 }
68 108
69 void TilingSetRasterQueueAll::Pop() { 109 void TilingSetRasterQueueAll::Pop() {
70 IteratorType index = stages_[current_stage_].iterator_type; 110 IteratorType index = stages_[current_stage_].iterator_type;
71 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type; 111 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type;
72 112
73 // First advance the iterator. 113 // First advance the iterator.
74 DCHECK(!iterators_[index].done()); 114 DCHECK(!iterators_[index].done());
75 DCHECK(iterators_[index].type() == tile_type); 115 DCHECK(iterators_[index].type() == tile_type);
76 ++iterators_[index]; 116 ++iterators_[index];
(...skipping 16 matching lines...) Expand all
93 DCHECK(!IsEmpty()); 133 DCHECK(!IsEmpty());
94 134
95 IteratorType index = stages_[current_stage_].iterator_type; 135 IteratorType index = stages_[current_stage_].iterator_type;
96 DCHECK(!iterators_[index].done()); 136 DCHECK(!iterators_[index].done());
97 DCHECK(iterators_[index].type() == stages_[current_stage_].tile_type); 137 DCHECK(iterators_[index].type() == stages_[current_stage_].tile_type);
98 138
99 return *iterators_[index]; 139 return *iterators_[index];
100 } 140 }
101 141
102 void TilingSetRasterQueueAll::AdvanceToNextStage() { 142 void TilingSetRasterQueueAll::AdvanceToNextStage() {
103 DCHECK_LT(current_stage_, arraysize(stages_)); 143 DCHECK_LT(current_stage_, stages_.size());
104 ++current_stage_; 144 ++current_stage_;
105 while (current_stage_ < arraysize(stages_)) { 145 while (current_stage_ < stages_.size()) {
106 IteratorType index = stages_[current_stage_].iterator_type; 146 IteratorType index = stages_[current_stage_].iterator_type;
107 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type; 147 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type;
108 148
109 if (!iterators_[index].done() && iterators_[index].type() == tile_type) 149 if (!iterators_[index].done() && iterators_[index].type() == tile_type)
110 break; 150 break;
111 ++current_stage_; 151 ++current_stage_;
112 } 152 }
113 } 153 }
114 154
115 // OnePriorityRectIterator 155 // OnePriorityRectIterator
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 ++(*this); 206 ++(*this);
167 } 207 }
168 208
169 TilingSetRasterQueueAll::VisibleTilingIterator& 209 TilingSetRasterQueueAll::VisibleTilingIterator&
170 TilingSetRasterQueueAll::VisibleTilingIterator:: 210 TilingSetRasterQueueAll::VisibleTilingIterator::
171 operator++() { 211 operator++() {
172 AdvanceToNextTile(&iterator_); 212 AdvanceToNextTile(&iterator_);
173 return *this; 213 return *this;
174 } 214 }
175 215
216 // PendingVisibleTilingIterator.
217 TilingSetRasterQueueAll::PendingVisibleTilingIterator::
218 PendingVisibleTilingIterator(PictureLayerTiling* tiling,
219 TilingData* tiling_data)
220 : OnePriorityRectIterator(tiling, tiling_data) {
221 iterator_ = TilingData::DifferenceIterator(tiling_data_,
222 tiling_->pending_visible_rect(),
223 tiling_->current_visible_rect());
224 if (!iterator_)
225 return;
226 if (!GetFirstTileAndCheckIfValid(&iterator_))
227 ++(*this);
228 }
229
230 TilingSetRasterQueueAll::PendingVisibleTilingIterator&
231 TilingSetRasterQueueAll::PendingVisibleTilingIterator::
232 operator++() {
233 AdvanceToNextTile(&iterator_);
234 return *this;
235 }
236
176 // SkewportTilingIterator. 237 // SkewportTilingIterator.
177 TilingSetRasterQueueAll::SkewportTilingIterator::SkewportTilingIterator( 238 TilingSetRasterQueueAll::SkewportTilingIterator::SkewportTilingIterator(
178 PictureLayerTiling* tiling, 239 PictureLayerTiling* tiling,
179 TilingData* tiling_data) 240 TilingData* tiling_data)
180 : OnePriorityRectIterator(tiling, tiling_data) { 241 : OnePriorityRectIterator(tiling, tiling_data),
242 pending_visible_rect_(tiling->pending_visible_rect()) {
181 if (!tiling_->has_skewport_rect_tiles()) 243 if (!tiling_->has_skewport_rect_tiles())
182 return; 244 return;
183 iterator_ = TilingData::SpiralDifferenceIterator( 245 iterator_ = TilingData::SpiralDifferenceIterator(
184 tiling_data_, tiling_->current_skewport_rect(), 246 tiling_data_, tiling_->current_skewport_rect(),
185 tiling_->current_visible_rect(), tiling_->current_visible_rect()); 247 tiling_->current_visible_rect(), tiling_->current_visible_rect());
186 if (!iterator_) 248 if (!iterator_)
187 return; 249 return;
188 if (!GetFirstTileAndCheckIfValid(&iterator_)) 250 if (!GetFirstTileAndCheckIfValid(&iterator_)) {
251 ++(*this);
252 return;
253 }
254 if (tile_->content_rect().Intersects(pending_visible_rect_))
189 ++(*this); 255 ++(*this);
190 } 256 }
191 257
192 TilingSetRasterQueueAll::SkewportTilingIterator& 258 TilingSetRasterQueueAll::SkewportTilingIterator&
193 TilingSetRasterQueueAll::SkewportTilingIterator:: 259 TilingSetRasterQueueAll::SkewportTilingIterator::
194 operator++() { 260 operator++() {
195 AdvanceToNextTile(&iterator_); 261 AdvanceToNextTile(&iterator_);
262 while (!done()) {
263 if (!tile_->content_rect().Intersects(pending_visible_rect_))
264 break;
265 AdvanceToNextTile(&iterator_);
266 }
196 return *this; 267 return *this;
197 } 268 }
198 269
199 // SoonBorderTilingIterator. 270 // SoonBorderTilingIterator.
200 TilingSetRasterQueueAll::SoonBorderTilingIterator::SoonBorderTilingIterator( 271 TilingSetRasterQueueAll::SoonBorderTilingIterator::SoonBorderTilingIterator(
201 PictureLayerTiling* tiling, 272 PictureLayerTiling* tiling,
202 TilingData* tiling_data) 273 TilingData* tiling_data)
203 : OnePriorityRectIterator(tiling, tiling_data) { 274 : OnePriorityRectIterator(tiling, tiling_data),
275 pending_visible_rect_(tiling->pending_visible_rect()) {
204 if (!tiling_->has_soon_border_rect_tiles()) 276 if (!tiling_->has_soon_border_rect_tiles())
205 return; 277 return;
206 iterator_ = TilingData::SpiralDifferenceIterator( 278 iterator_ = TilingData::SpiralDifferenceIterator(
207 tiling_data_, tiling_->current_soon_border_rect(), 279 tiling_data_, tiling_->current_soon_border_rect(),
208 tiling_->current_skewport_rect(), tiling_->current_visible_rect()); 280 tiling_->current_skewport_rect(), tiling_->current_visible_rect());
209 if (!iterator_) 281 if (!iterator_)
210 return; 282 return;
211 if (!GetFirstTileAndCheckIfValid(&iterator_)) 283 if (!GetFirstTileAndCheckIfValid(&iterator_)) {
284 ++(*this);
285 return;
286 }
287 if (tile_->content_rect().Intersects(pending_visible_rect_))
212 ++(*this); 288 ++(*this);
213 } 289 }
214 290
215 TilingSetRasterQueueAll::SoonBorderTilingIterator& 291 TilingSetRasterQueueAll::SoonBorderTilingIterator&
216 TilingSetRasterQueueAll::SoonBorderTilingIterator:: 292 TilingSetRasterQueueAll::SoonBorderTilingIterator::
217 operator++() { 293 operator++() {
218 AdvanceToNextTile(&iterator_); 294 AdvanceToNextTile(&iterator_);
295 while (!done()) {
296 if (!tile_->content_rect().Intersects(pending_visible_rect_))
297 break;
298 AdvanceToNextTile(&iterator_);
299 }
219 return *this; 300 return *this;
220 } 301 }
221 302
222 // EventuallyTilingIterator. 303 // EventuallyTilingIterator.
223 TilingSetRasterQueueAll::EventuallyTilingIterator::EventuallyTilingIterator( 304 TilingSetRasterQueueAll::EventuallyTilingIterator::EventuallyTilingIterator(
224 PictureLayerTiling* tiling, 305 PictureLayerTiling* tiling,
225 TilingData* tiling_data) 306 TilingData* tiling_data)
226 : OnePriorityRectIterator(tiling, tiling_data) { 307 : OnePriorityRectIterator(tiling, tiling_data),
308 pending_visible_rect_(tiling->pending_visible_rect()) {
227 if (!tiling_->has_eventually_rect_tiles()) 309 if (!tiling_->has_eventually_rect_tiles())
228 return; 310 return;
229 iterator_ = TilingData::SpiralDifferenceIterator( 311 iterator_ = TilingData::SpiralDifferenceIterator(
230 tiling_data_, tiling_->current_eventually_rect(), 312 tiling_data_, tiling_->current_eventually_rect(),
231 tiling_->current_skewport_rect(), tiling_->current_soon_border_rect()); 313 tiling_->current_skewport_rect(), tiling_->current_soon_border_rect());
232 if (!iterator_) 314 if (!iterator_)
233 return; 315 return;
234 if (!GetFirstTileAndCheckIfValid(&iterator_)) 316 if (!GetFirstTileAndCheckIfValid(&iterator_)) {
317 ++(*this);
318 return;
319 }
320 if (tile_->content_rect().Intersects(pending_visible_rect_))
235 ++(*this); 321 ++(*this);
236 } 322 }
237 323
238 TilingSetRasterQueueAll::EventuallyTilingIterator& 324 TilingSetRasterQueueAll::EventuallyTilingIterator&
239 TilingSetRasterQueueAll::EventuallyTilingIterator:: 325 TilingSetRasterQueueAll::EventuallyTilingIterator::
240 operator++() { 326 operator++() {
241 AdvanceToNextTile(&iterator_); 327 AdvanceToNextTile(&iterator_);
328 while (!done()) {
329 if (!tile_->content_rect().Intersects(pending_visible_rect_))
330 break;
331 AdvanceToNextTile(&iterator_);
332 }
242 return *this; 333 return *this;
243 } 334 }
244 335
245 // TilingIterator 336 // TilingIterator
246 TilingSetRasterQueueAll::TilingIterator::TilingIterator() 337 TilingSetRasterQueueAll::TilingIterator::TilingIterator()
247 : tiling_(NULL), current_tile_(NULL) { 338 : tiling_(NULL), current_tile_(NULL) {
248 } 339 }
249 340
250 TilingSetRasterQueueAll::TilingIterator::TilingIterator( 341 TilingSetRasterQueueAll::TilingIterator::TilingIterator(
251 PictureLayerTiling* tiling, 342 PictureLayerTiling* tiling,
252 TilingData* tiling_data) 343 TilingData* tiling_data)
253 : tiling_(tiling), 344 : tiling_(tiling),
254 tiling_data_(tiling_data), 345 tiling_data_(tiling_data),
255 phase_(VISIBLE_RECT), 346 phase_(VISIBLE_RECT),
256 current_tile_(NULL) { 347 current_tile_(NULL) {
257 visible_iterator_ = VisibleTilingIterator(tiling_, tiling_data_); 348 visible_iterator_ = VisibleTilingIterator(tiling_, tiling_data_);
258 if (visible_iterator_.done()) { 349 if (visible_iterator_.done()) {
259 AdvancePhase(); 350 AdvancePhase();
260 return; 351 return;
261 } 352 }
262 current_tile_ = *visible_iterator_; 353 current_tile_ = *visible_iterator_;
263 } 354 }
264 355
356 TilingSetRasterQueueAll::TilingIterator::~TilingIterator() {
357 }
358
265 void TilingSetRasterQueueAll::TilingIterator::AdvancePhase() { 359 void TilingSetRasterQueueAll::TilingIterator::AdvancePhase() {
266 DCHECK_LT(phase_, EVENTUALLY_RECT); 360 DCHECK_LT(phase_, EVENTUALLY_RECT);
267 361
268 current_tile_ = nullptr; 362 current_tile_ = nullptr;
269 while (!current_tile_ && phase_ < EVENTUALLY_RECT) { 363 while (!current_tile_ && phase_ < EVENTUALLY_RECT) {
270 phase_ = static_cast<Phase>(phase_ + 1); 364 phase_ = static_cast<Phase>(phase_ + 1);
271 switch (phase_) { 365 switch (phase_) {
272 case VISIBLE_RECT: 366 case VISIBLE_RECT:
273 NOTREACHED(); 367 NOTREACHED();
274 return; 368 return;
369 case PENDING_VISIBLE_RECT:
370 pending_visible_iterator_ =
371 PendingVisibleTilingIterator(tiling_, tiling_data_);
372 if (!pending_visible_iterator_.done())
373 current_tile_ = *pending_visible_iterator_;
374 break;
275 case SKEWPORT_RECT: 375 case SKEWPORT_RECT:
276 skewport_iterator_ = SkewportTilingIterator(tiling_, tiling_data_); 376 skewport_iterator_ = SkewportTilingIterator(tiling_, tiling_data_);
277 if (!skewport_iterator_.done()) 377 if (!skewport_iterator_.done())
278 current_tile_ = *skewport_iterator_; 378 current_tile_ = *skewport_iterator_;
279 break; 379 break;
280 case SOON_BORDER_RECT: 380 case SOON_BORDER_RECT:
281 soon_border_iterator_ = SoonBorderTilingIterator(tiling_, tiling_data_); 381 soon_border_iterator_ = SoonBorderTilingIterator(tiling_, tiling_data_);
282 if (!soon_border_iterator_.done()) 382 if (!soon_border_iterator_.done())
283 current_tile_ = *soon_border_iterator_; 383 current_tile_ = *soon_border_iterator_;
284 break; 384 break;
(...skipping 11 matching lines...) Expand all
296 operator++() { 396 operator++() {
297 switch (phase_) { 397 switch (phase_) {
298 case VISIBLE_RECT: 398 case VISIBLE_RECT:
299 ++visible_iterator_; 399 ++visible_iterator_;
300 if (visible_iterator_.done()) { 400 if (visible_iterator_.done()) {
301 AdvancePhase(); 401 AdvancePhase();
302 return *this; 402 return *this;
303 } 403 }
304 current_tile_ = *visible_iterator_; 404 current_tile_ = *visible_iterator_;
305 break; 405 break;
406 case PENDING_VISIBLE_RECT:
407 ++pending_visible_iterator_;
408 if (pending_visible_iterator_.done()) {
409 AdvancePhase();
410 return *this;
411 }
412 current_tile_ = *pending_visible_iterator_;
413 break;
306 case SKEWPORT_RECT: 414 case SKEWPORT_RECT:
307 ++skewport_iterator_; 415 ++skewport_iterator_;
308 if (skewport_iterator_.done()) { 416 if (skewport_iterator_.done()) {
309 AdvancePhase(); 417 AdvancePhase();
310 return *this; 418 return *this;
311 } 419 }
312 current_tile_ = *skewport_iterator_; 420 current_tile_ = *skewport_iterator_;
313 break; 421 break;
314 case SOON_BORDER_RECT: 422 case SOON_BORDER_RECT:
315 ++soon_border_iterator_; 423 ++soon_border_iterator_;
316 if (soon_border_iterator_.done()) { 424 if (soon_border_iterator_.done()) {
317 AdvancePhase(); 425 AdvancePhase();
318 return *this; 426 return *this;
319 } 427 }
320 current_tile_ = *soon_border_iterator_; 428 current_tile_ = *soon_border_iterator_;
321 break; 429 break;
322 case EVENTUALLY_RECT: 430 case EVENTUALLY_RECT:
323 ++eventually_iterator_; 431 ++eventually_iterator_;
324 if (eventually_iterator_.done()) { 432 if (eventually_iterator_.done()) {
325 current_tile_ = nullptr; 433 current_tile_ = nullptr;
326 return *this; 434 return *this;
327 } 435 }
328 current_tile_ = *eventually_iterator_; 436 current_tile_ = *eventually_iterator_;
329 break; 437 break;
330 } 438 }
331 return *this; 439 return *this;
332 } 440 }
333 441
334 } // namespace cc 442 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698