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

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

Issue 638353002: [C++11 Allowed Features] Declares a type-safe null pointer converting from NULL to nullptr in src/… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Formating. Created 6 years, 2 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 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.h" 5 #include "cc/resources/picture_layer_tiling.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <limits> 9 #include <limits>
10 #include <set> 10 #include <set>
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 int after_right = -1; 202 int after_right = -1;
203 int after_bottom = -1; 203 int after_bottom = -1;
204 if (!live_tiles_rect_.IsEmpty()) { 204 if (!live_tiles_rect_.IsEmpty()) {
205 after_right = 205 after_right =
206 tiling_data_.TileXIndexFromSrcCoord(live_tiles_rect_.right() - 1); 206 tiling_data_.TileXIndexFromSrcCoord(live_tiles_rect_.right() - 1);
207 after_bottom = 207 after_bottom =
208 tiling_data_.TileYIndexFromSrcCoord(live_tiles_rect_.bottom() - 1); 208 tiling_data_.TileYIndexFromSrcCoord(live_tiles_rect_.bottom() - 1);
209 } 209 }
210 210
211 // There is no recycled twin since this is run on the pending tiling. 211 // There is no recycled twin since this is run on the pending tiling.
212 PictureLayerTiling* recycled_twin = NULL; 212 PictureLayerTiling* recycled_twin = nullptr;
213 DCHECK_EQ(recycled_twin, client_->GetRecycledTwinTiling(this)); 213 DCHECK_EQ(recycled_twin, client_->GetRecycledTwinTiling(this));
214 DCHECK_EQ(PENDING_TREE, client_->GetTree()); 214 DCHECK_EQ(PENDING_TREE, client_->GetTree());
215 215
216 // Drop tiles outside the new layer bounds if the layer shrank. 216 // Drop tiles outside the new layer bounds if the layer shrank.
217 for (int i = after_right + 1; i <= before_right; ++i) { 217 for (int i = after_right + 1; i <= before_right; ++i) {
218 for (int j = before_top; j <= before_bottom; ++j) 218 for (int j = before_top; j <= before_bottom; ++j)
219 RemoveTileAt(i, j, recycled_twin); 219 RemoveTileAt(i, j, recycled_twin);
220 } 220 }
221 for (int i = before_left; i <= after_right; ++i) { 221 for (int i = before_left; i <= after_right; ++i) {
222 for (int j = after_bottom + 1; j <= before_bottom; ++j) 222 for (int j = after_bottom + 1; j <= before_bottom; ++j)
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 if (content_rect.IsEmpty()) 283 if (content_rect.IsEmpty())
284 continue; 284 continue;
285 // Since the content_rect includes border pixels already, don't include 285 // Since the content_rect includes border pixels already, don't include
286 // borders when iterating to avoid double counting them. 286 // borders when iterating to avoid double counting them.
287 bool include_borders = false; 287 bool include_borders = false;
288 for (TilingData::Iterator iter( 288 for (TilingData::Iterator iter(
289 &tiling_data_, content_rect, include_borders); 289 &tiling_data_, content_rect, include_borders);
290 iter; 290 iter;
291 ++iter) { 291 ++iter) {
292 // There is no recycled twin since this is run on the pending tiling. 292 // There is no recycled twin since this is run on the pending tiling.
293 PictureLayerTiling* recycled_twin = NULL; 293 PictureLayerTiling* recycled_twin = nullptr;
294 DCHECK_EQ(recycled_twin, client_->GetRecycledTwinTiling(this)); 294 DCHECK_EQ(recycled_twin, client_->GetRecycledTwinTiling(this));
295 DCHECK_EQ(PENDING_TREE, client_->GetTree()); 295 DCHECK_EQ(PENDING_TREE, client_->GetTree());
296 if (RemoveTileAt(iter.index_x(), iter.index_y(), recycled_twin)) 296 if (RemoveTileAt(iter.index_x(), iter.index_y(), recycled_twin))
297 new_tile_keys.push_back(iter.index()); 297 new_tile_keys.push_back(iter.index());
298 } 298 }
299 } 299 }
300 300
301 if (recreate_invalidated_tiles && !new_tile_keys.empty()) { 301 if (recreate_invalidated_tiles && !new_tile_keys.empty()) {
302 for (size_t i = 0; i < new_tile_keys.size(); ++i) { 302 for (size_t i = 0; i < new_tile_keys.size(); ++i) {
303 // Don't try to share a tile with the twin layer, it's been invalidated so 303 // Don't try to share a tile with the twin layer, it's been invalidated so
304 // we have to make our own tile here. 304 // we have to make our own tile here.
305 const PictureLayerTiling* twin_tiling = NULL; 305 const PictureLayerTiling* twin_tiling = nullptr;
306 CreateTile(new_tile_keys[i].first, new_tile_keys[i].second, twin_tiling); 306 CreateTile(new_tile_keys[i].first, new_tile_keys[i].second, twin_tiling);
307 } 307 }
308 } 308 }
309 } 309 }
310 310
311 PictureLayerTiling::CoverageIterator::CoverageIterator() 311 PictureLayerTiling::CoverageIterator::CoverageIterator()
312 : tiling_(NULL), 312 : tiling_(nullptr),
313 current_tile_(NULL), 313 current_tile_(nullptr),
314 tile_i_(0), 314 tile_i_(0),
315 tile_j_(0), 315 tile_j_(0),
316 left_(0), 316 left_(0),
317 top_(0), 317 top_(0),
318 right_(-1), 318 right_(-1),
319 bottom_(-1) { 319 bottom_(-1) {
320 } 320 }
321 321
322 PictureLayerTiling::CoverageIterator::CoverageIterator( 322 PictureLayerTiling::CoverageIterator::CoverageIterator(
323 const PictureLayerTiling* tiling, 323 const PictureLayerTiling* tiling,
324 float dest_scale, 324 float dest_scale,
325 const gfx::Rect& dest_rect) 325 const gfx::Rect& dest_rect)
326 : tiling_(tiling), 326 : tiling_(tiling),
327 dest_rect_(dest_rect), 327 dest_rect_(dest_rect),
328 dest_to_content_scale_(0), 328 dest_to_content_scale_(0),
329 current_tile_(NULL), 329 current_tile_(nullptr),
330 tile_i_(0), 330 tile_i_(0),
331 tile_j_(0), 331 tile_j_(0),
332 left_(0), 332 left_(0),
333 top_(0), 333 top_(0),
334 right_(-1), 334 right_(-1),
335 bottom_(-1) { 335 bottom_(-1) {
336 DCHECK(tiling_); 336 DCHECK(tiling_);
337 if (dest_rect_.IsEmpty()) 337 if (dest_rect_.IsEmpty())
338 return; 338 return;
339 339
(...skipping 30 matching lines...) Expand all
370 return *this; 370 return *this;
371 371
372 bool first_time = tile_i_ < left_; 372 bool first_time = tile_i_ < left_;
373 bool new_row = false; 373 bool new_row = false;
374 tile_i_++; 374 tile_i_++;
375 if (tile_i_ > right_) { 375 if (tile_i_ > right_) {
376 tile_i_ = left_; 376 tile_i_ = left_;
377 tile_j_++; 377 tile_j_++;
378 new_row = true; 378 new_row = true;
379 if (tile_j_ > bottom_) { 379 if (tile_j_ > bottom_) {
380 current_tile_ = NULL; 380 current_tile_ = nullptr;
381 return *this; 381 return *this;
382 } 382 }
383 } 383 }
384 384
385 current_tile_ = tiling_->TileAt(tile_i_, tile_j_); 385 current_tile_ = tiling_->TileAt(tile_i_, tile_j_);
386 386
387 // Calculate the current geometry rect. Due to floating point rounding 387 // Calculate the current geometry rect. Due to floating point rounding
388 // and ToEnclosingRect, tiles might overlap in destination space on the 388 // and ToEnclosingRect, tiles might overlap in destination space on the
389 // edges. 389 // edges.
390 gfx::Rect last_geometry_rect = current_geometry_rect_; 390 gfx::Rect last_geometry_rect = current_geometry_rect_;
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 460
461 bool PictureLayerTiling::RemoveTileAt(int i, 461 bool PictureLayerTiling::RemoveTileAt(int i,
462 int j, 462 int j,
463 PictureLayerTiling* recycled_twin) { 463 PictureLayerTiling* recycled_twin) {
464 TileMap::iterator found = tiles_.find(TileMapKey(i, j)); 464 TileMap::iterator found = tiles_.find(TileMapKey(i, j));
465 if (found == tiles_.end()) 465 if (found == tiles_.end())
466 return false; 466 return false;
467 found->second->set_shared(false); 467 found->second->set_shared(false);
468 tiles_.erase(found); 468 tiles_.erase(found);
469 if (recycled_twin) { 469 if (recycled_twin) {
470 // Recycled twin does not also have a recycled twin, so pass NULL. 470 // Recycled twin does not also have a recycled twin, so pass nullptr.
danakj 2014/10/10 17:28:45 just use null
471 recycled_twin->RemoveTileAt(i, j, NULL); 471 recycled_twin->RemoveTileAt(i, j, nullptr);
472 } 472 }
473 return true; 473 return true;
474 } 474 }
475 475
476 void PictureLayerTiling::Reset() { 476 void PictureLayerTiling::Reset() {
477 live_tiles_rect_ = gfx::Rect(); 477 live_tiles_rect_ = gfx::Rect();
478 PictureLayerTiling* recycled_twin = client_->GetRecycledTwinTiling(this); 478 PictureLayerTiling* recycled_twin = client_->GetRecycledTwinTiling(this);
479 for (TileMap::const_iterator it = tiles_.begin(); it != tiles_.end(); ++it) { 479 for (TileMap::const_iterator it = tiles_.begin(); it != tiles_.end(); ++it) {
480 it->second->set_shared(false); 480 it->second->set_shared(false);
481 if (recycled_twin) 481 if (recycled_twin)
482 recycled_twin->RemoveTileAt(it->first.first, it->first.second, NULL); 482 recycled_twin->RemoveTileAt(it->first.first, it->first.second, nullptr);
483 } 483 }
484 tiles_.clear(); 484 tiles_.clear();
485 } 485 }
486 486
487 gfx::Rect PictureLayerTiling::ComputeSkewport( 487 gfx::Rect PictureLayerTiling::ComputeSkewport(
488 double current_frame_time_in_seconds, 488 double current_frame_time_in_seconds,
489 const gfx::Rect& visible_rect_in_content_space) const { 489 const gfx::Rect& visible_rect_in_content_space) const {
490 gfx::Rect skewport = visible_rect_in_content_space; 490 gfx::Rect skewport = visible_rect_in_content_space;
491 if (last_impl_frame_time_in_seconds_ == 0.0) 491 if (last_impl_frame_time_in_seconds_ == 0.0)
492 return skewport; 492 return skewport;
(...skipping 551 matching lines...) Expand 10 before | Expand all | Expand 10 after
1044 case NOW: 1044 case NOW:
1045 return &eviction_tiles_now_; 1045 return &eviction_tiles_now_;
1046 case NOW_AND_REQUIRED_FOR_ACTIVATION: 1046 case NOW_AND_REQUIRED_FOR_ACTIVATION:
1047 return &eviction_tiles_now_and_required_for_activation_; 1047 return &eviction_tiles_now_and_required_for_activation_;
1048 } 1048 }
1049 NOTREACHED(); 1049 NOTREACHED();
1050 return &eviction_tiles_eventually_; 1050 return &eviction_tiles_eventually_;
1051 } 1051 }
1052 1052
1053 PictureLayerTiling::TilingRasterTileIterator::TilingRasterTileIterator() 1053 PictureLayerTiling::TilingRasterTileIterator::TilingRasterTileIterator()
1054 : tiling_(NULL), current_tile_(NULL) {} 1054 : tiling_(nullptr), current_tile_(nullptr) {
1055 }
1055 1056
1056 PictureLayerTiling::TilingRasterTileIterator::TilingRasterTileIterator( 1057 PictureLayerTiling::TilingRasterTileIterator::TilingRasterTileIterator(
1057 PictureLayerTiling* tiling) 1058 PictureLayerTiling* tiling)
1058 : tiling_(tiling), phase_(VISIBLE_RECT), current_tile_(NULL) { 1059 : tiling_(tiling), phase_(VISIBLE_RECT), current_tile_(nullptr) {
1059 if (!tiling_->has_visible_rect_tiles_) { 1060 if (!tiling_->has_visible_rect_tiles_) {
1060 AdvancePhase(); 1061 AdvancePhase();
1061 return; 1062 return;
1062 } 1063 }
1063 1064
1064 visible_iterator_ = TilingData::Iterator(&tiling_->tiling_data_, 1065 visible_iterator_ = TilingData::Iterator(&tiling_->tiling_data_,
1065 tiling_->current_visible_rect_, 1066 tiling_->current_visible_rect_,
1066 false /* include_borders */); 1067 false /* include_borders */);
1067 if (!visible_iterator_) { 1068 if (!visible_iterator_) {
1068 AdvancePhase(); 1069 AdvancePhase();
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1104 continue; 1105 continue;
1105 1106
1106 spiral_iterator_ = TilingData::SpiralDifferenceIterator( 1107 spiral_iterator_ = TilingData::SpiralDifferenceIterator(
1107 &tiling_->tiling_data_, 1108 &tiling_->tiling_data_,
1108 tiling_->current_soon_border_rect_, 1109 tiling_->current_soon_border_rect_,
1109 tiling_->current_skewport_rect_, 1110 tiling_->current_skewport_rect_,
1110 tiling_->current_visible_rect_); 1111 tiling_->current_visible_rect_);
1111 break; 1112 break;
1112 case EVENTUALLY_RECT: 1113 case EVENTUALLY_RECT:
1113 if (!tiling_->has_eventually_rect_tiles_) { 1114 if (!tiling_->has_eventually_rect_tiles_) {
1114 current_tile_ = NULL; 1115 current_tile_ = nullptr;
1115 return; 1116 return;
1116 } 1117 }
1117 1118
1118 spiral_iterator_ = TilingData::SpiralDifferenceIterator( 1119 spiral_iterator_ = TilingData::SpiralDifferenceIterator(
1119 &tiling_->tiling_data_, 1120 &tiling_->tiling_data_,
1120 tiling_->current_eventually_rect_, 1121 tiling_->current_eventually_rect_,
1121 tiling_->current_skewport_rect_, 1122 tiling_->current_skewport_rect_,
1122 tiling_->current_soon_border_rect_); 1123 tiling_->current_soon_border_rect_);
1123 break; 1124 break;
1124 } 1125 }
1125 1126
1126 while (spiral_iterator_) { 1127 while (spiral_iterator_) {
1127 current_tile_ = tiling_->TileAt(spiral_iterator_.index_x(), 1128 current_tile_ = tiling_->TileAt(spiral_iterator_.index_x(),
1128 spiral_iterator_.index_y()); 1129 spiral_iterator_.index_y());
1129 if (current_tile_ && TileNeedsRaster(current_tile_)) 1130 if (current_tile_ && TileNeedsRaster(current_tile_))
1130 break; 1131 break;
1131 ++spiral_iterator_; 1132 ++spiral_iterator_;
1132 } 1133 }
1133 1134
1134 if (!spiral_iterator_ && phase_ == EVENTUALLY_RECT) { 1135 if (!spiral_iterator_ && phase_ == EVENTUALLY_RECT) {
1135 current_tile_ = NULL; 1136 current_tile_ = nullptr;
1136 break; 1137 break;
1137 } 1138 }
1138 } while (!spiral_iterator_); 1139 } while (!spiral_iterator_);
1139 1140
1140 if (current_tile_) 1141 if (current_tile_)
1141 tiling_->UpdateTileAndTwinPriority(current_tile_); 1142 tiling_->UpdateTileAndTwinPriority(current_tile_);
1142 } 1143 }
1143 1144
1144 PictureLayerTiling::TilingRasterTileIterator& 1145 PictureLayerTiling::TilingRasterTileIterator&
1145 PictureLayerTiling::TilingRasterTileIterator:: 1146 PictureLayerTiling::TilingRasterTileIterator::
1146 operator++() { 1147 operator++() {
1147 current_tile_ = NULL; 1148 current_tile_ = nullptr;
1148 while (!current_tile_ || !TileNeedsRaster(current_tile_)) { 1149 while (!current_tile_ || !TileNeedsRaster(current_tile_)) {
1149 std::pair<int, int> next_index; 1150 std::pair<int, int> next_index;
1150 switch (phase_) { 1151 switch (phase_) {
1151 case VISIBLE_RECT: 1152 case VISIBLE_RECT:
1152 ++visible_iterator_; 1153 ++visible_iterator_;
1153 if (!visible_iterator_) { 1154 if (!visible_iterator_) {
1154 AdvancePhase(); 1155 AdvancePhase();
1155 return *this; 1156 return *this;
1156 } 1157 }
1157 next_index = visible_iterator_.index(); 1158 next_index = visible_iterator_.index();
1158 break; 1159 break;
1159 case SKEWPORT_RECT: 1160 case SKEWPORT_RECT:
1160 case SOON_BORDER_RECT: 1161 case SOON_BORDER_RECT:
1161 ++spiral_iterator_; 1162 ++spiral_iterator_;
1162 if (!spiral_iterator_) { 1163 if (!spiral_iterator_) {
1163 AdvancePhase(); 1164 AdvancePhase();
1164 return *this; 1165 return *this;
1165 } 1166 }
1166 next_index = spiral_iterator_.index(); 1167 next_index = spiral_iterator_.index();
1167 break; 1168 break;
1168 case EVENTUALLY_RECT: 1169 case EVENTUALLY_RECT:
1169 ++spiral_iterator_; 1170 ++spiral_iterator_;
1170 if (!spiral_iterator_) { 1171 if (!spiral_iterator_) {
1171 current_tile_ = NULL; 1172 current_tile_ = nullptr;
1172 return *this; 1173 return *this;
1173 } 1174 }
1174 next_index = spiral_iterator_.index(); 1175 next_index = spiral_iterator_.index();
1175 break; 1176 break;
1176 } 1177 }
1177 current_tile_ = tiling_->TileAt(next_index.first, next_index.second); 1178 current_tile_ = tiling_->TileAt(next_index.first, next_index.second);
1178 } 1179 }
1179 1180
1180 if (current_tile_) 1181 if (current_tile_)
1181 tiling_->UpdateTileAndTwinPriority(current_tile_); 1182 tiling_->UpdateTileAndTwinPriority(current_tile_);
1182 return *this; 1183 return *this;
1183 } 1184 }
1184 1185
1185 PictureLayerTiling::TilingEvictionTileIterator::TilingEvictionTileIterator() 1186 PictureLayerTiling::TilingEvictionTileIterator::TilingEvictionTileIterator()
1186 : eviction_tiles_(NULL), current_eviction_tiles_index_(0u) { 1187 : eviction_tiles_(nullptr), current_eviction_tiles_index_(0u) {
1187 } 1188 }
1188 1189
1189 PictureLayerTiling::TilingEvictionTileIterator::TilingEvictionTileIterator( 1190 PictureLayerTiling::TilingEvictionTileIterator::TilingEvictionTileIterator(
1190 PictureLayerTiling* tiling, 1191 PictureLayerTiling* tiling,
1191 TreePriority tree_priority, 1192 TreePriority tree_priority,
1192 EvictionCategory category) 1193 EvictionCategory category)
1193 : eviction_tiles_(tiling->GetEvictionTiles(tree_priority, category)), 1194 : eviction_tiles_(tiling->GetEvictionTiles(tree_priority, category)),
1194 // Note: initializing to "0 - 1" works as overflow is well defined for 1195 // Note: initializing to "0 - 1" works as overflow is well defined for
1195 // unsigned integers. 1196 // unsigned integers.
1196 current_eviction_tiles_index_(static_cast<size_t>(0) - 1) { 1197 current_eviction_tiles_index_(static_cast<size_t>(0) - 1) {
(...skipping 25 matching lines...) Expand all
1222 DCHECK(*this); 1223 DCHECK(*this);
1223 do { 1224 do {
1224 ++current_eviction_tiles_index_; 1225 ++current_eviction_tiles_index_;
1225 } while (current_eviction_tiles_index_ != eviction_tiles_->size() && 1226 } while (current_eviction_tiles_index_ != eviction_tiles_->size() &&
1226 !(*eviction_tiles_)[current_eviction_tiles_index_]->HasResources()); 1227 !(*eviction_tiles_)[current_eviction_tiles_index_]->HasResources());
1227 1228
1228 return *this; 1229 return *this;
1229 } 1230 }
1230 1231
1231 } // namespace cc 1232 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698