Chromium Code Reviews| 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 819 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 830 eviction_cache_tree_priority_ = tree_priority; | 830 eviction_cache_tree_priority_ = tree_priority; |
| 831 } | 831 } |
| 832 | 832 |
| 833 PictureLayerTiling::TilingRasterTileIterator::TilingRasterTileIterator() | 833 PictureLayerTiling::TilingRasterTileIterator::TilingRasterTileIterator() |
| 834 : tiling_(NULL), current_tile_(NULL) {} | 834 : tiling_(NULL), current_tile_(NULL) {} |
| 835 | 835 |
| 836 PictureLayerTiling::TilingRasterTileIterator::TilingRasterTileIterator( | 836 PictureLayerTiling::TilingRasterTileIterator::TilingRasterTileIterator( |
| 837 PictureLayerTiling* tiling, | 837 PictureLayerTiling* tiling, |
| 838 WhichTree tree) | 838 WhichTree tree) |
| 839 : tiling_(tiling), | 839 : tiling_(tiling), |
| 840 type_(TilePriority::NOW), | 840 phase_(VISIBLE_RECT), |
| 841 visible_rect_in_content_space_( | 841 visible_rect_in_content_space_( |
| 842 tiling_->current_visible_rect_in_content_space_), | 842 tiling_->current_visible_rect_in_content_space_), |
| 843 skewport_in_content_space_(tiling_->current_skewport_), | 843 skewport_in_content_space_(tiling_->current_skewport_), |
| 844 eventually_rect_in_content_space_(tiling_->current_eventually_rect_), | 844 eventually_rect_in_content_space_(tiling_->current_eventually_rect_), |
| 845 soon_border_rect_in_content_space_(tiling_->current_soon_border_rect_), | 845 soon_border_rect_in_content_space_(tiling_->current_soon_border_rect_), |
| 846 tree_(tree), | 846 tree_(tree), |
| 847 current_tile_(NULL), | 847 current_tile_(NULL), |
| 848 visible_iterator_(&tiling->tiling_data_, | 848 visible_iterator_(&tiling->tiling_data_, |
| 849 visible_rect_in_content_space_, | 849 visible_rect_in_content_space_, |
| 850 true /* include_borders */), | 850 true /* include_borders */), |
| 851 spiral_iterator_(&tiling->tiling_data_, | 851 spiral_iterator_(&tiling->tiling_data_, |
| 852 skewport_in_content_space_, | 852 skewport_in_content_space_, |
| 853 visible_rect_in_content_space_, | 853 visible_rect_in_content_space_, |
| 854 visible_rect_in_content_space_), | 854 visible_rect_in_content_space_) { |
| 855 skewport_processed_(false) { | |
| 856 if (!visible_iterator_) { | 855 if (!visible_iterator_) { |
| 857 AdvancePhase(); | 856 AdvancePhase(); |
| 858 return; | 857 return; |
| 859 } | 858 } |
| 860 | 859 |
| 861 current_tile_ = | 860 current_tile_ = |
| 862 tiling_->TileAt(visible_iterator_.index_x(), visible_iterator_.index_y()); | 861 tiling_->TileAt(visible_iterator_.index_x(), visible_iterator_.index_y()); |
| 863 if (!current_tile_ || !TileNeedsRaster(current_tile_)) | 862 if (!current_tile_ || !TileNeedsRaster(current_tile_)) |
| 864 ++(*this); | 863 ++(*this); |
| 865 } | 864 } |
| 866 | 865 |
| 867 PictureLayerTiling::TilingRasterTileIterator::~TilingRasterTileIterator() {} | 866 PictureLayerTiling::TilingRasterTileIterator::~TilingRasterTileIterator() {} |
| 868 | 867 |
| 869 void PictureLayerTiling::TilingRasterTileIterator::AdvancePhase() { | 868 void PictureLayerTiling::TilingRasterTileIterator::AdvancePhase() { |
| 870 DCHECK_LT(type_, TilePriority::EVENTUALLY); | 869 DCHECK_LT(phase_, EVENTUALLY_RECT); |
| 871 | 870 |
| 872 do { | 871 do { |
| 873 type_ = static_cast<TilePriority::PriorityBin>(type_ + 1); | 872 phase_ = static_cast<Phase>(phase_ + 1); |
| 874 if (type_ == TilePriority::EVENTUALLY) { | 873 |
| 874 if (phase_ == SOON_BORDER_RECT) { | |
|
reveman
2014/07/24 16:38:49
nit: I would prefer a switch statement with all ph
vmpstr
2014/07/24 16:44:25
Can I push this nit off into the optimization patc
reveman
2014/07/24 16:54:18
sure, part of that patch is fine.
| |
| 875 spiral_iterator_ = TilingData::SpiralDifferenceIterator( | |
| 876 &tiling_->tiling_data_, | |
| 877 soon_border_rect_in_content_space_, | |
| 878 skewport_in_content_space_, | |
| 879 visible_rect_in_content_space_); | |
| 880 } else if (phase_ == EVENTUALLY_RECT) { | |
| 875 spiral_iterator_ = TilingData::SpiralDifferenceIterator( | 881 spiral_iterator_ = TilingData::SpiralDifferenceIterator( |
| 876 &tiling_->tiling_data_, | 882 &tiling_->tiling_data_, |
| 877 eventually_rect_in_content_space_, | 883 eventually_rect_in_content_space_, |
| 878 skewport_in_content_space_, | 884 skewport_in_content_space_, |
| 879 visible_rect_in_content_space_); | 885 soon_border_rect_in_content_space_); |
| 880 } | 886 } |
| 881 | 887 |
| 882 while (spiral_iterator_) { | 888 while (spiral_iterator_) { |
| 883 current_tile_ = tiling_->TileAt(spiral_iterator_.index_x(), | 889 current_tile_ = tiling_->TileAt(spiral_iterator_.index_x(), |
| 884 spiral_iterator_.index_y()); | 890 spiral_iterator_.index_y()); |
| 885 if (current_tile_ && TileNeedsRaster(current_tile_)) | 891 if (current_tile_ && TileNeedsRaster(current_tile_)) |
| 886 break; | 892 break; |
| 887 ++spiral_iterator_; | 893 ++spiral_iterator_; |
| 888 } | 894 } |
| 889 | 895 |
| 890 if (!spiral_iterator_ && type_ == TilePriority::EVENTUALLY) { | 896 if (!spiral_iterator_ && phase_ == EVENTUALLY_RECT) { |
| 891 current_tile_ = NULL; | 897 current_tile_ = NULL; |
| 892 break; | 898 break; |
| 893 } | 899 } |
| 894 } while (!spiral_iterator_); | 900 } while (!spiral_iterator_); |
| 895 } | 901 } |
| 896 | 902 |
| 897 PictureLayerTiling::TilingRasterTileIterator& | 903 PictureLayerTiling::TilingRasterTileIterator& |
| 898 PictureLayerTiling::TilingRasterTileIterator:: | 904 PictureLayerTiling::TilingRasterTileIterator:: |
| 899 operator++() { | 905 operator++() { |
| 900 current_tile_ = NULL; | 906 current_tile_ = NULL; |
| 901 while (!current_tile_ || !TileNeedsRaster(current_tile_)) { | 907 while (!current_tile_ || !TileNeedsRaster(current_tile_)) { |
| 902 std::pair<int, int> next_index; | 908 std::pair<int, int> next_index; |
| 903 switch (type_) { | 909 switch (phase_) { |
| 904 case TilePriority::NOW: | 910 case VISIBLE_RECT: |
| 905 ++visible_iterator_; | 911 ++visible_iterator_; |
| 906 if (!visible_iterator_) { | 912 if (!visible_iterator_) { |
| 907 AdvancePhase(); | 913 AdvancePhase(); |
| 908 return *this; | 914 return *this; |
| 909 } | 915 } |
| 910 next_index = visible_iterator_.index(); | 916 next_index = visible_iterator_.index(); |
| 911 break; | 917 break; |
| 912 case TilePriority::SOON: | 918 case SKEWPORT_RECT: |
| 919 case SOON_BORDER_RECT: | |
| 913 ++spiral_iterator_; | 920 ++spiral_iterator_; |
| 914 if (!spiral_iterator_) { | 921 if (!spiral_iterator_) { |
| 915 if (skewport_processed_) { | 922 AdvancePhase(); |
| 916 AdvancePhase(); | 923 return *this; |
| 917 return *this; | |
| 918 } | |
| 919 skewport_processed_ = true; | |
| 920 spiral_iterator_ = TilingData::SpiralDifferenceIterator( | |
| 921 &tiling_->tiling_data_, | |
| 922 soon_border_rect_in_content_space_, | |
| 923 skewport_in_content_space_, | |
| 924 visible_rect_in_content_space_); | |
| 925 if (!spiral_iterator_) { | |
| 926 AdvancePhase(); | |
| 927 return *this; | |
| 928 } | |
| 929 } | 924 } |
| 930 next_index = spiral_iterator_.index(); | 925 next_index = spiral_iterator_.index(); |
| 931 break; | 926 break; |
| 932 case TilePriority::EVENTUALLY: | 927 case EVENTUALLY_RECT: |
| 933 ++spiral_iterator_; | 928 ++spiral_iterator_; |
| 934 if (!spiral_iterator_) { | 929 if (!spiral_iterator_) { |
| 935 current_tile_ = NULL; | 930 current_tile_ = NULL; |
| 936 return *this; | 931 return *this; |
| 937 } | 932 } |
| 938 next_index = spiral_iterator_.index(); | 933 next_index = spiral_iterator_.index(); |
| 939 break; | 934 break; |
| 940 } | 935 } |
| 941 current_tile_ = tiling_->TileAt(next_index.first, next_index.second); | 936 current_tile_ = tiling_->TileAt(next_index.first, next_index.second); |
| 942 } | 937 } |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 981 DCHECK(*this); | 976 DCHECK(*this); |
| 982 do { | 977 do { |
| 983 ++tile_iterator_; | 978 ++tile_iterator_; |
| 984 } while (tile_iterator_ != tiling_->eviction_tiles_cache_.end() && | 979 } while (tile_iterator_ != tiling_->eviction_tiles_cache_.end() && |
| 985 (!(*tile_iterator_)->HasResources())); | 980 (!(*tile_iterator_)->HasResources())); |
| 986 | 981 |
| 987 return *this; | 982 return *this; |
| 988 } | 983 } |
| 989 | 984 |
| 990 } // namespace cc | 985 } // namespace cc |
| OLD | NEW |