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

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

Issue 1126813002: cc: Pass priority rect information from iterators to tilings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 7 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 799 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 return false; 810 return false;
811 return true; 811 return true;
812 } 812 }
813 813
814 void PictureLayerTiling::UpdateRequiredStatesOnTile(Tile* tile) const { 814 void PictureLayerTiling::UpdateRequiredStatesOnTile(Tile* tile) const {
815 DCHECK(tile); 815 DCHECK(tile);
816 tile->set_required_for_activation(IsTileRequiredForActivation(tile)); 816 tile->set_required_for_activation(IsTileRequiredForActivation(tile));
817 tile->set_required_for_draw(IsTileRequiredForDraw(tile)); 817 tile->set_required_for_draw(IsTileRequiredForDraw(tile));
818 } 818 }
819 819
820 PrioritizedTile PictureLayerTiling::MakePrioritizedTile(Tile* tile) const { 820 PrioritizedTile PictureLayerTiling::MakePrioritizedTile(
821 Tile* tile,
822 PriorityRectType priority_rect_type) const {
821 DCHECK(tile); 823 DCHECK(tile);
822 return PrioritizedTile(tile, ComputePriorityForTile(tile), 824 return PrioritizedTile(tile, ComputePriorityForTile(tile, priority_rect_type),
823 IsTileOccluded(tile)); 825 IsTileOccluded(tile));
824 } 826 }
825 827
826 std::map<const Tile*, PrioritizedTile> 828 std::map<const Tile*, PrioritizedTile>
827 PictureLayerTiling::UpdateAndGetAllPrioritizedTilesForTesting() { 829 PictureLayerTiling::UpdateAndGetAllPrioritizedTilesForTesting() {
828 std::map<const Tile*, PrioritizedTile> result; 830 std::map<const Tile*, PrioritizedTile> result;
829 for (const auto& key_tile_pair : tiles_) { 831 for (const auto& key_tile_pair : tiles_) {
830 UpdateRequiredStatesOnTile(key_tile_pair.second); 832 Tile* tile = key_tile_pair.second;
833 UpdateRequiredStatesOnTile(tile);
831 PrioritizedTile prioritized_tile = 834 PrioritizedTile prioritized_tile =
832 MakePrioritizedTile(key_tile_pair.second); 835 MakePrioritizedTile(tile, ComputePriorityRectTypeForTile(tile));
833 result.insert(std::make_pair(prioritized_tile.tile(), prioritized_tile)); 836 result.insert(std::make_pair(prioritized_tile.tile(), prioritized_tile));
834 } 837 }
835 return result; 838 return result;
836 } 839 }
837 840
838 void PictureLayerTiling::VerifyAllTilesHaveCurrentRasterSource() const { 841 void PictureLayerTiling::VerifyAllTilesHaveCurrentRasterSource() const {
839 #if DCHECK_IS_ON() 842 #if DCHECK_IS_ON()
840 for (const auto& tile_pair : tiles_) 843 for (const auto& tile_pair : tiles_)
841 DCHECK_EQ(raster_source_.get(), tile_pair.second->raster_source()); 844 DCHECK_EQ(raster_source_.get(), tile_pair.second->raster_source());
842 #endif 845 #endif
843 } 846 }
844 847
845 TilePriority PictureLayerTiling::ComputePriorityForTile( 848 TilePriority PictureLayerTiling::ComputePriorityForTile(
846 const Tile* tile) const { 849 const Tile* tile,
850 PriorityRectType priority_rect_type) const {
847 // TODO(vmpstr): See if this can be moved to iterators. 851 // TODO(vmpstr): See if this can be moved to iterators.
848 TilePriority::PriorityBin max_tile_priority_bin = 852 TilePriority::PriorityBin max_tile_priority_bin =
849 client_->GetMaxTilePriorityBin(); 853 client_->GetMaxTilePriorityBin();
850 854
855 DCHECK_EQ(ComputePriorityRectTypeForTile(tile), priority_rect_type);
851 DCHECK_EQ(TileAt(tile->tiling_i_index(), tile->tiling_j_index()), tile); 856 DCHECK_EQ(TileAt(tile->tiling_i_index(), tile->tiling_j_index()), tile);
857
858 TilePriority::PriorityBin priority_bin = max_tile_priority_bin;
859
860 switch (priority_rect_type) {
861 case VISIBLE_RECT:
862 return TilePriority(resolution_, priority_bin, 0);
hendrikw 2015/05/12 22:23:49 Why don't we need to compare max_tile_priority_bin
USE eero AT chromium.org 2015/05/13 07:48:13 Because max_tile_priority cannot be higher than TP
863 case PENDING_VISIBLE_RECT:
864 if (max_tile_priority_bin <= TilePriority::SOON)
865 return TilePriority(resolution_, TilePriority::SOON, 0);
866 priority_bin = TilePriority::EVENTUALLY;
867 break;
868 case SKEWPORT_RECT:
869 case SOON_BORDER_RECT:
870 if (max_tile_priority_bin <= TilePriority::SOON)
871 priority_bin = TilePriority::SOON;
872 break;
873 case EVENTUALLY_RECT:
874 priority_bin = TilePriority::EVENTUALLY;
875 break;
876 }
877
852 gfx::Rect tile_bounds = 878 gfx::Rect tile_bounds =
853 tiling_data_.TileBounds(tile->tiling_i_index(), tile->tiling_j_index()); 879 tiling_data_.TileBounds(tile->tiling_i_index(), tile->tiling_j_index());
854
855 if (max_tile_priority_bin <= TilePriority::NOW &&
856 current_visible_rect_.Intersects(tile_bounds)) {
857 return TilePriority(resolution_, TilePriority::NOW, 0);
858 }
859
860 if (max_tile_priority_bin <= TilePriority::SOON &&
861 pending_visible_rect().Intersects(tile_bounds)) {
862 return TilePriority(resolution_, TilePriority::SOON, 0);
863 }
864
865 DCHECK_GT(current_content_to_screen_scale_, 0.f); 880 DCHECK_GT(current_content_to_screen_scale_, 0.f);
866 float distance_to_visible = 881 float distance_to_visible =
867 current_visible_rect_.ManhattanInternalDistance(tile_bounds) * 882 current_visible_rect_.ManhattanInternalDistance(tile_bounds) *
868 current_content_to_screen_scale_; 883 current_content_to_screen_scale_;
869 884
870 if (max_tile_priority_bin <= TilePriority::SOON && 885 return TilePriority(resolution_, priority_bin, distance_to_visible);
871 (current_soon_border_rect_.Intersects(tile_bounds) || 886 }
872 current_skewport_rect_.Intersects(tile_bounds))) {
873 return TilePriority(resolution_, TilePriority::SOON, distance_to_visible);
874 }
875 887
876 return TilePriority(resolution_, TilePriority::EVENTUALLY, 888 PictureLayerTiling::PriorityRectType
877 distance_to_visible); 889 PictureLayerTiling::ComputePriorityRectTypeForTile(const Tile* tile) const {
890 DCHECK_EQ(TileAt(tile->tiling_i_index(), tile->tiling_j_index()), tile);
891 gfx::Rect tile_bounds =
892 tiling_data_.TileBounds(tile->tiling_i_index(), tile->tiling_j_index());
893
894 if (current_visible_rect_.Intersects(tile_bounds))
895 return VISIBLE_RECT;
896
897 if (pending_visible_rect().Intersects(tile_bounds))
898 return PENDING_VISIBLE_RECT;
899
900 if (current_skewport_rect_.Intersects(tile_bounds))
901 return SKEWPORT_RECT;
902
903 if (current_soon_border_rect_.Intersects(tile_bounds))
904 return SOON_BORDER_RECT;
905
906 DCHECK(current_eventually_rect_.Intersects(tile_bounds));
907 return EVENTUALLY_RECT;
878 } 908 }
879 909
880 void PictureLayerTiling::GetAllTilesAndPrioritiesForTracing( 910 void PictureLayerTiling::GetAllTilesAndPrioritiesForTracing(
881 std::map<const Tile*, TilePriority>* tile_map) const { 911 std::map<const Tile*, TilePriority>* tile_map) const {
882 for (const auto& tile_pair : tiles_) { 912 for (const auto& tile_pair : tiles_) {
883 const Tile* tile = tile_pair.second; 913 const Tile* tile = tile_pair.second;
884 const TilePriority& priority = ComputePriorityForTile(tile); 914 const TilePriority& priority =
915 ComputePriorityForTile(tile, ComputePriorityRectTypeForTile(tile));
885 // Store combined priority. 916 // Store combined priority.
886 (*tile_map)[tile] = priority; 917 (*tile_map)[tile] = priority;
887 } 918 }
888 } 919 }
889 920
890 void PictureLayerTiling::AsValueInto( 921 void PictureLayerTiling::AsValueInto(
891 base::trace_event::TracedValue* state) const { 922 base::trace_event::TracedValue* state) const {
892 state->SetInteger("num_tiles", tiles_.size()); 923 state->SetInteger("num_tiles", tiles_.size());
893 state->SetDouble("content_scale", contents_scale_); 924 state->SetDouble("content_scale", contents_scale_);
894 MathUtil::AddToTracedValue("visible_rect", current_visible_rect_, state); 925 MathUtil::AddToTracedValue("visible_rect", current_visible_rect_, state);
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
1053 break; 1084 break;
1054 } 1085 }
1055 1086
1056 gfx::Rect result(origin_x, origin_y, width, height); 1087 gfx::Rect result(origin_x, origin_y, width, height);
1057 if (cache) 1088 if (cache)
1058 cache->previous_result = result; 1089 cache->previous_result = result;
1059 return result; 1090 return result;
1060 } 1091 }
1061 1092
1062 } // namespace cc 1093 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698