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

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

Issue 413053004: cc: Fix tiling raster iterator to process all tiles correctly. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 5 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 10
(...skipping 852 matching lines...) Expand 10 before | Expand all | Expand 10 after
863 if (!current_tile_ || !TileNeedsRaster(current_tile_)) 863 if (!current_tile_ || !TileNeedsRaster(current_tile_))
864 ++(*this); 864 ++(*this);
865 } 865 }
866 866
867 PictureLayerTiling::TilingRasterTileIterator::~TilingRasterTileIterator() {} 867 PictureLayerTiling::TilingRasterTileIterator::~TilingRasterTileIterator() {}
868 868
869 void PictureLayerTiling::TilingRasterTileIterator::AdvancePhase() { 869 void PictureLayerTiling::TilingRasterTileIterator::AdvancePhase() {
870 DCHECK_LT(type_, TilePriority::EVENTUALLY); 870 DCHECK_LT(type_, TilePriority::EVENTUALLY);
871 871
872 do { 872 do {
873 type_ = static_cast<TilePriority::PriorityBin>(type_ + 1); 873 if (type_ == TilePriority::SOON && !skewport_processed_)
874 if (type_ == TilePriority::EVENTUALLY) { 874 skewport_processed_ = true;
875 else
876 type_ = static_cast<TilePriority::PriorityBin>(type_ + 1);
877
878 if (type_ == TilePriority::SOON && skewport_processed_) {
879 spiral_iterator_ = TilingData::SpiralDifferenceIterator(
880 &tiling_->tiling_data_,
881 soon_border_rect_in_content_space_,
882 skewport_in_content_space_,
883 visible_rect_in_content_space_);
884 } else if (type_ == TilePriority::EVENTUALLY) {
875 spiral_iterator_ = TilingData::SpiralDifferenceIterator( 885 spiral_iterator_ = TilingData::SpiralDifferenceIterator(
876 &tiling_->tiling_data_, 886 &tiling_->tiling_data_,
877 eventually_rect_in_content_space_, 887 eventually_rect_in_content_space_,
878 skewport_in_content_space_, 888 skewport_in_content_space_,
879 visible_rect_in_content_space_); 889 soon_border_rect_in_content_space_);
880 } 890 }
reveman 2014/07/24 12:50:16 I find this code a bit hard to understand. It migh
reveman 2014/07/24 13:12:23 See my comment on the other patch. Maybe an enum f
vmpstr 2014/07/24 16:33:14 Done.
881 891
882 while (spiral_iterator_) { 892 while (spiral_iterator_) {
883 current_tile_ = tiling_->TileAt(spiral_iterator_.index_x(), 893 current_tile_ = tiling_->TileAt(spiral_iterator_.index_x(),
884 spiral_iterator_.index_y()); 894 spiral_iterator_.index_y());
885 if (current_tile_ && TileNeedsRaster(current_tile_)) 895 if (current_tile_ && TileNeedsRaster(current_tile_))
886 break; 896 break;
887 ++spiral_iterator_; 897 ++spiral_iterator_;
888 } 898 }
889 899
890 if (!spiral_iterator_ && type_ == TilePriority::EVENTUALLY) { 900 if (!spiral_iterator_ && type_ == TilePriority::EVENTUALLY) {
(...skipping 14 matching lines...) Expand all
905 ++visible_iterator_; 915 ++visible_iterator_;
906 if (!visible_iterator_) { 916 if (!visible_iterator_) {
907 AdvancePhase(); 917 AdvancePhase();
908 return *this; 918 return *this;
909 } 919 }
910 next_index = visible_iterator_.index(); 920 next_index = visible_iterator_.index();
911 break; 921 break;
912 case TilePriority::SOON: 922 case TilePriority::SOON:
913 ++spiral_iterator_; 923 ++spiral_iterator_;
914 if (!spiral_iterator_) { 924 if (!spiral_iterator_) {
915 if (skewport_processed_) { 925 AdvancePhase();
916 AdvancePhase(); 926 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 } 927 }
930 next_index = spiral_iterator_.index(); 928 next_index = spiral_iterator_.index();
931 break; 929 break;
932 case TilePriority::EVENTUALLY: 930 case TilePriority::EVENTUALLY:
933 ++spiral_iterator_; 931 ++spiral_iterator_;
934 if (!spiral_iterator_) { 932 if (!spiral_iterator_) {
935 current_tile_ = NULL; 933 current_tile_ = NULL;
936 return *this; 934 return *this;
937 } 935 }
938 next_index = spiral_iterator_.index(); 936 next_index = spiral_iterator_.index();
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
981 DCHECK(*this); 979 DCHECK(*this);
982 do { 980 do {
983 ++tile_iterator_; 981 ++tile_iterator_;
984 } while (tile_iterator_ != tiling_->eviction_tiles_cache_.end() && 982 } while (tile_iterator_ != tiling_->eviction_tiles_cache_.end() &&
985 (!(*tile_iterator_)->HasResources())); 983 (!(*tile_iterator_)->HasResources()));
986 984
987 return *this; 985 return *this;
988 } 986 }
989 987
990 } // namespace cc 988 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698