| 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/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 | 9 |
| 10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 std::vector<TileMapKey> new_tiles; | 130 std::vector<TileMapKey> new_tiles; |
| 131 | 131 |
| 132 for (Region::Iterator region_iter(layer_invalidation); | 132 for (Region::Iterator region_iter(layer_invalidation); |
| 133 region_iter.has_rect(); | 133 region_iter.has_rect(); |
| 134 region_iter.next()) { | 134 region_iter.next()) { |
| 135 gfx::Rect layer_invalidation = region_iter.rect(); | 135 gfx::Rect layer_invalidation = region_iter.rect(); |
| 136 layer_invalidation.Intersect(gfx::Rect(layer_bounds_)); | 136 layer_invalidation.Intersect(gfx::Rect(layer_bounds_)); |
| 137 gfx::Rect rect = | 137 gfx::Rect rect = |
| 138 gfx::ToEnclosingRect(ScaleRect(layer_invalidation, contents_scale_)); | 138 gfx::ToEnclosingRect(ScaleRect(layer_invalidation, contents_scale_)); |
| 139 | 139 |
| 140 for (PictureLayerTiling::Iterator tile_iter(this, contents_scale_, rect); | 140 for (PictureLayerTiling::CoverageIterator tile_iter(this, |
| 141 contents_scale_, |
| 142 rect); |
| 141 tile_iter; | 143 tile_iter; |
| 142 ++tile_iter) { | 144 ++tile_iter) { |
| 143 TileMapKey key(tile_iter.tile_i_, tile_iter.tile_j_); | 145 TileMapKey key(tile_iter.tile_i_, tile_iter.tile_j_); |
| 144 TileMap::iterator found = tiles_.find(key); | 146 TileMap::iterator found = tiles_.find(key); |
| 145 if (found == tiles_.end()) | 147 if (found == tiles_.end()) |
| 146 continue; | 148 continue; |
| 147 | 149 |
| 148 tiles_.erase(found); | 150 tiles_.erase(found); |
| 149 new_tiles.push_back(key); | 151 new_tiles.push_back(key); |
| 150 } | 152 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 164 for (TilingData::Iterator iter(&tiling_data_, content_rect); iter; ++iter) { | 166 for (TilingData::Iterator iter(&tiling_data_, content_rect); iter; ++iter) { |
| 165 TileMap::iterator found = | 167 TileMap::iterator found = |
| 166 tiles_.find(TileMapKey(iter.index_x(), iter.index_y())); | 168 tiles_.find(TileMapKey(iter.index_x(), iter.index_y())); |
| 167 // Ignore any tiles that already exist. | 169 // Ignore any tiles that already exist. |
| 168 if (found != tiles_.end()) | 170 if (found != tiles_.end()) |
| 169 continue; | 171 continue; |
| 170 CreateTile(iter.index_x(), iter.index_y()); | 172 CreateTile(iter.index_x(), iter.index_y()); |
| 171 } | 173 } |
| 172 } | 174 } |
| 173 | 175 |
| 174 PictureLayerTiling::Iterator::Iterator() | 176 PictureLayerTiling::CoverageIterator::CoverageIterator() |
| 175 : tiling_(NULL), | 177 : tiling_(NULL), |
| 176 current_tile_(NULL), | 178 current_tile_(NULL), |
| 177 tile_i_(0), | 179 tile_i_(0), |
| 178 tile_j_(0), | 180 tile_j_(0), |
| 179 left_(0), | 181 left_(0), |
| 180 top_(0), | 182 top_(0), |
| 181 right_(-1), | 183 right_(-1), |
| 182 bottom_(-1) { | 184 bottom_(-1) { |
| 183 } | 185 } |
| 184 | 186 |
| 185 PictureLayerTiling::Iterator::Iterator(const PictureLayerTiling* tiling, | 187 PictureLayerTiling::CoverageIterator::CoverageIterator( |
| 186 float dest_scale, | 188 const PictureLayerTiling* tiling, |
| 187 gfx::Rect dest_rect) | 189 float dest_scale, |
| 190 gfx::Rect dest_rect) |
| 188 : tiling_(tiling), | 191 : tiling_(tiling), |
| 189 dest_rect_(dest_rect), | 192 dest_rect_(dest_rect), |
| 190 dest_to_content_scale_(0), | 193 dest_to_content_scale_(0), |
| 191 current_tile_(NULL), | 194 current_tile_(NULL), |
| 192 tile_i_(0), | 195 tile_i_(0), |
| 193 tile_j_(0), | 196 tile_j_(0), |
| 194 left_(0), | 197 left_(0), |
| 195 top_(0), | 198 top_(0), |
| 196 right_(-1), | 199 right_(-1), |
| 197 bottom_(-1) { | 200 bottom_(-1) { |
| (...skipping 23 matching lines...) Expand all Loading... |
| 221 right_ = tiling_->tiling_data_.TileXIndexFromSrcCoord( | 224 right_ = tiling_->tiling_data_.TileXIndexFromSrcCoord( |
| 222 content_rect.right() - 1); | 225 content_rect.right() - 1); |
| 223 bottom_ = tiling_->tiling_data_.TileYIndexFromSrcCoord( | 226 bottom_ = tiling_->tiling_data_.TileYIndexFromSrcCoord( |
| 224 content_rect.bottom() - 1); | 227 content_rect.bottom() - 1); |
| 225 | 228 |
| 226 tile_i_ = left_ - 1; | 229 tile_i_ = left_ - 1; |
| 227 tile_j_ = top_; | 230 tile_j_ = top_; |
| 228 ++(*this); | 231 ++(*this); |
| 229 } | 232 } |
| 230 | 233 |
| 231 PictureLayerTiling::Iterator::~Iterator() { | 234 PictureLayerTiling::CoverageIterator::~CoverageIterator() { |
| 232 } | 235 } |
| 233 | 236 |
| 234 PictureLayerTiling::Iterator& PictureLayerTiling::Iterator::operator++() { | 237 PictureLayerTiling::CoverageIterator& |
| 238 PictureLayerTiling::CoverageIterator::operator++() { |
| 235 if (tile_j_ > bottom_) | 239 if (tile_j_ > bottom_) |
| 236 return *this; | 240 return *this; |
| 237 | 241 |
| 238 bool first_time = tile_i_ < left_; | 242 bool first_time = tile_i_ < left_; |
| 239 bool new_row = false; | 243 bool new_row = false; |
| 240 tile_i_++; | 244 tile_i_++; |
| 241 if (tile_i_ > right_) { | 245 if (tile_i_ > right_) { |
| 242 tile_i_ = left_; | 246 tile_i_ = left_; |
| 243 tile_j_++; | 247 tile_j_++; |
| 244 new_row = true; | 248 new_row = true; |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 285 | 289 |
| 286 if (!new_row) { | 290 if (!new_row) { |
| 287 DCHECK_EQ(last_geometry_rect.right(), current_geometry_rect_.x()); | 291 DCHECK_EQ(last_geometry_rect.right(), current_geometry_rect_.x()); |
| 288 DCHECK_EQ(last_geometry_rect.bottom(), current_geometry_rect_.bottom()); | 292 DCHECK_EQ(last_geometry_rect.bottom(), current_geometry_rect_.bottom()); |
| 289 DCHECK_EQ(last_geometry_rect.y(), current_geometry_rect_.y()); | 293 DCHECK_EQ(last_geometry_rect.y(), current_geometry_rect_.y()); |
| 290 } | 294 } |
| 291 | 295 |
| 292 return *this; | 296 return *this; |
| 293 } | 297 } |
| 294 | 298 |
| 295 gfx::Rect PictureLayerTiling::Iterator::geometry_rect() const { | 299 gfx::Rect PictureLayerTiling::CoverageIterator::geometry_rect() const { |
| 296 return current_geometry_rect_; | 300 return current_geometry_rect_; |
| 297 } | 301 } |
| 298 | 302 |
| 299 gfx::Rect PictureLayerTiling::Iterator::full_tile_geometry_rect() const { | 303 gfx::Rect |
| 304 PictureLayerTiling::CoverageIterator::full_tile_geometry_rect() const { |
| 300 gfx::Rect rect = tiling_->tiling_data_.TileBoundsWithBorder(tile_i_, tile_j_); | 305 gfx::Rect rect = tiling_->tiling_data_.TileBoundsWithBorder(tile_i_, tile_j_); |
| 301 rect.set_size(tiling_->tiling_data_.max_texture_size()); | 306 rect.set_size(tiling_->tiling_data_.max_texture_size()); |
| 302 return rect; | 307 return rect; |
| 303 } | 308 } |
| 304 | 309 |
| 305 gfx::RectF PictureLayerTiling::Iterator::texture_rect() const { | 310 gfx::RectF PictureLayerTiling::CoverageIterator::texture_rect() const { |
| 306 gfx::PointF tex_origin = | 311 gfx::PointF tex_origin = |
| 307 tiling_->tiling_data_.TileBoundsWithBorder(tile_i_, tile_j_).origin(); | 312 tiling_->tiling_data_.TileBoundsWithBorder(tile_i_, tile_j_).origin(); |
| 308 | 313 |
| 309 // Convert from dest space => content space => texture space. | 314 // Convert from dest space => content space => texture space. |
| 310 gfx::RectF texture_rect(current_geometry_rect_); | 315 gfx::RectF texture_rect(current_geometry_rect_); |
| 311 texture_rect.Scale(dest_to_content_scale_, | 316 texture_rect.Scale(dest_to_content_scale_, |
| 312 dest_to_content_scale_); | 317 dest_to_content_scale_); |
| 313 texture_rect.Offset(-tex_origin.OffsetFromOrigin()); | 318 texture_rect.Offset(-tex_origin.OffsetFromOrigin()); |
| 314 texture_rect.Intersect(tiling_->ContentRect()); | 319 texture_rect.Intersect(tiling_->ContentRect()); |
| 315 | 320 |
| 316 return texture_rect; | 321 return texture_rect; |
| 317 } | 322 } |
| 318 | 323 |
| 319 gfx::Size PictureLayerTiling::Iterator::texture_size() const { | 324 gfx::Size PictureLayerTiling::CoverageIterator::texture_size() const { |
| 320 return tiling_->tiling_data_.max_texture_size(); | 325 return tiling_->tiling_data_.max_texture_size(); |
| 321 } | 326 } |
| 322 | 327 |
| 323 void PictureLayerTiling::UpdateTilePriorities( | 328 void PictureLayerTiling::UpdateTilePriorities( |
| 324 WhichTree tree, | 329 WhichTree tree, |
| 325 gfx::Size device_viewport, | 330 gfx::Size device_viewport, |
| 326 const gfx::RectF& viewport_in_layer_space, | 331 const gfx::RectF& viewport_in_layer_space, |
| 327 gfx::Size last_layer_bounds, | 332 gfx::Size last_layer_bounds, |
| 328 gfx::Size current_layer_bounds, | 333 gfx::Size current_layer_bounds, |
| 329 float last_layer_contents_scale, | 334 float last_layer_contents_scale, |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 603 | 608 |
| 604 // If our delta is less then our event distance, we're done. | 609 // If our delta is less then our event distance, we're done. |
| 605 if (delta < event.distance) | 610 if (delta < event.distance) |
| 606 break; | 611 break; |
| 607 } | 612 } |
| 608 | 613 |
| 609 return gfx::Rect(origin_x, origin_y, width, height); | 614 return gfx::Rect(origin_x, origin_y, width, height); |
| 610 } | 615 } |
| 611 | 616 |
| 612 } // namespace cc | 617 } // namespace cc |
| OLD | NEW |