| 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 #include <limits> | 9 #include <limits> |
| 10 | 10 |
| (...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 600 tile->SetPriority(tree, priority); | 600 tile->SetPriority(tree, priority); |
| 601 } | 601 } |
| 602 | 602 |
| 603 // Update iteration rects. | 603 // Update iteration rects. |
| 604 current_visible_rect_ = visible_rect_in_content_space; | 604 current_visible_rect_ = visible_rect_in_content_space; |
| 605 current_skewport_rect_ = skewport; | 605 current_skewport_rect_ = skewport; |
| 606 current_soon_border_rect_ = soon_border_rect; | 606 current_soon_border_rect_ = soon_border_rect; |
| 607 current_eventually_rect_ = eventually_rect; | 607 current_eventually_rect_ = eventually_rect; |
| 608 } | 608 } |
| 609 | 609 |
| 610 void PictureLayerTiling::RemoveTileAt(int i, int j) { |
| 611 TileMapKey key(i, j); |
| 612 TileMap::iterator found = tiles_.find(key); |
| 613 if (found == tiles_.end()) |
| 614 return; |
| 615 ReleaseTile(found->second.get(), client_->GetTree()); |
| 616 tiles_.erase(found); |
| 617 } |
| 618 |
| 610 void PictureLayerTiling::SetLiveTilesRect( | 619 void PictureLayerTiling::SetLiveTilesRect( |
| 611 const gfx::Rect& new_live_tiles_rect) { | 620 const gfx::Rect& new_live_tiles_rect) { |
| 612 DCHECK(new_live_tiles_rect.IsEmpty() || | 621 DCHECK(new_live_tiles_rect.IsEmpty() || |
| 613 gfx::Rect(tiling_size()).Contains(new_live_tiles_rect)) | 622 gfx::Rect(tiling_size()).Contains(new_live_tiles_rect)) |
| 614 << "tiling_size: " << tiling_size().ToString() | 623 << "tiling_size: " << tiling_size().ToString() |
| 615 << " new_live_tiles_rect: " << new_live_tiles_rect.ToString(); | 624 << " new_live_tiles_rect: " << new_live_tiles_rect.ToString(); |
| 616 if (live_tiles_rect_ == new_live_tiles_rect) | 625 if (live_tiles_rect_ == new_live_tiles_rect) |
| 617 return; | 626 return; |
| 618 | 627 |
| 619 // Iterate to delete all tiles outside of our new live_tiles rect. | 628 // Iterate to delete all tiles outside of our new live_tiles rect. |
| 629 PictureLayerTiling* recycled_twin = client_->GetRecycledTwinTiling(this); |
| 620 for (TilingData::DifferenceIterator iter(&tiling_data_, | 630 for (TilingData::DifferenceIterator iter(&tiling_data_, |
| 621 live_tiles_rect_, | 631 live_tiles_rect_, |
| 622 new_live_tiles_rect); | 632 new_live_tiles_rect); |
| 623 iter; | 633 iter; |
| 624 ++iter) { | 634 ++iter) { |
| 625 TileMapKey key(iter.index()); | 635 TileMapKey key(iter.index()); |
| 626 TileMap::iterator found = tiles_.find(key); | 636 TileMap::iterator found = tiles_.find(key); |
| 627 // If the tile was outside of the recorded region, it won't exist even | 637 // If the tile was outside of the recorded region, it won't exist even |
| 628 // though it was in the live rect. | 638 // though it was in the live rect. |
| 629 if (found != tiles_.end()) { | 639 if (found != tiles_.end()) { |
| 630 ReleaseTile(found->second.get(), client_->GetTree()); | 640 ReleaseTile(found->second.get(), client_->GetTree()); |
| 631 tiles_.erase(found); | 641 tiles_.erase(found); |
| 642 if (recycled_twin) |
| 643 recycled_twin->RemoveTileAt(iter.index_x(), iter.index_y()); |
| 632 } | 644 } |
| 633 } | 645 } |
| 634 | 646 |
| 635 const PictureLayerTiling* twin_tiling = client_->GetTwinTiling(this); | 647 const PictureLayerTiling* twin_tiling = client_->GetTwinTiling(this); |
| 636 | 648 |
| 637 // Iterate to allocate new tiles for all regions with newly exposed area. | 649 // Iterate to allocate new tiles for all regions with newly exposed area. |
| 638 for (TilingData::DifferenceIterator iter(&tiling_data_, | 650 for (TilingData::DifferenceIterator iter(&tiling_data_, |
| 639 new_live_tiles_rect, | 651 new_live_tiles_rect, |
| 640 live_tiles_rect_); | 652 live_tiles_rect_); |
| 641 iter; | 653 iter; |
| (...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1090 DCHECK(*this); | 1102 DCHECK(*this); |
| 1091 do { | 1103 do { |
| 1092 ++current_eviction_tiles_index_; | 1104 ++current_eviction_tiles_index_; |
| 1093 } while (current_eviction_tiles_index_ != eviction_tiles_->size() && | 1105 } while (current_eviction_tiles_index_ != eviction_tiles_->size() && |
| 1094 !(*eviction_tiles_)[current_eviction_tiles_index_]->HasResources()); | 1106 !(*eviction_tiles_)[current_eviction_tiles_index_]->HasResources()); |
| 1095 | 1107 |
| 1096 return *this; | 1108 return *this; |
| 1097 } | 1109 } |
| 1098 | 1110 |
| 1099 } // namespace cc | 1111 } // namespace cc |
| OLD | NEW |