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/layers/picture_layer_impl.h" | 5 #include "cc/layers/picture_layer_impl.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 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 geometry_rect.Intersect(scaled_recorded_viewport); | 190 geometry_rect.Intersect(scaled_recorded_viewport); |
191 opaque_rect.Intersect(scaled_recorded_viewport); | 191 opaque_rect.Intersect(scaled_recorded_viewport); |
192 visible_geometry_rect.Intersect(scaled_recorded_viewport); | 192 visible_geometry_rect.Intersect(scaled_recorded_viewport); |
193 | 193 |
194 if (visible_geometry_rect.IsEmpty()) | 194 if (visible_geometry_rect.IsEmpty()) |
195 return; | 195 return; |
196 | 196 |
197 DCHECK(raster_source_->HasRecordings()); | 197 DCHECK(raster_source_->HasRecordings()); |
198 gfx::Rect quad_content_rect = shared_quad_state->visible_quad_layer_rect; | 198 gfx::Rect quad_content_rect = shared_quad_state->visible_quad_layer_rect; |
199 gfx::Size texture_size = quad_content_rect.size(); | 199 gfx::Size texture_size = quad_content_rect.size(); |
200 gfx::RectF texture_rect = gfx::RectF(texture_size); | 200 gfx::RectF texture_rect = gfx::RectF(gfx::SizeF(texture_size)); |
201 | 201 |
202 PictureDrawQuad* quad = | 202 PictureDrawQuad* quad = |
203 render_pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); | 203 render_pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); |
204 quad->SetNew(shared_quad_state, geometry_rect, opaque_rect, | 204 quad->SetNew(shared_quad_state, geometry_rect, opaque_rect, |
205 visible_geometry_rect, texture_rect, texture_size, | 205 visible_geometry_rect, texture_rect, texture_size, |
206 nearest_neighbor_, RGBA_8888, quad_content_rect, | 206 nearest_neighbor_, RGBA_8888, quad_content_rect, |
207 max_contents_scale, raster_source_); | 207 max_contents_scale, raster_source_); |
208 ValidateQuadResources(quad); | 208 ValidateQuadResources(quad); |
209 return; | 209 return; |
210 } | 210 } |
(...skipping 762 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
973 // smaller than what we would choose otherwise, then it's always better off | 973 // smaller than what we would choose otherwise, then it's always better off |
974 // for us memory-wise. But otherwise, we don't choose a scale at which this | 974 // for us memory-wise. But otherwise, we don't choose a scale at which this |
975 // layer's rastered content would become larger than the viewport. | 975 // layer's rastered content would become larger than the viewport. |
976 if (draw_properties().screen_space_transform_is_animating && | 976 if (draw_properties().screen_space_transform_is_animating && |
977 !ShouldAdjustRasterScaleDuringScaleAnimations()) { | 977 !ShouldAdjustRasterScaleDuringScaleAnimations()) { |
978 bool can_raster_at_maximum_scale = false; | 978 bool can_raster_at_maximum_scale = false; |
979 bool should_raster_at_starting_scale = false; | 979 bool should_raster_at_starting_scale = false; |
980 float maximum_scale = draw_properties().maximum_animation_contents_scale; | 980 float maximum_scale = draw_properties().maximum_animation_contents_scale; |
981 float starting_scale = draw_properties().starting_animation_contents_scale; | 981 float starting_scale = draw_properties().starting_animation_contents_scale; |
982 if (maximum_scale) { | 982 if (maximum_scale) { |
983 gfx::Size bounds_at_maximum_scale = gfx::ToCeiledSize( | 983 gfx::Size bounds_at_maximum_scale = |
984 gfx::ScaleSize(raster_source_->GetSize(), maximum_scale)); | 984 gfx::ScaleToCeiledSize(raster_source_->GetSize(), maximum_scale); |
985 int64 maximum_area = static_cast<int64>(bounds_at_maximum_scale.width()) * | 985 int64 maximum_area = static_cast<int64>(bounds_at_maximum_scale.width()) * |
986 static_cast<int64>(bounds_at_maximum_scale.height()); | 986 static_cast<int64>(bounds_at_maximum_scale.height()); |
987 gfx::Size viewport = layer_tree_impl()->device_viewport_size(); | 987 gfx::Size viewport = layer_tree_impl()->device_viewport_size(); |
988 int64 viewport_area = static_cast<int64>(viewport.width()) * | 988 int64 viewport_area = static_cast<int64>(viewport.width()) * |
989 static_cast<int64>(viewport.height()); | 989 static_cast<int64>(viewport.height()); |
990 if (maximum_area <= viewport_area) | 990 if (maximum_area <= viewport_area) |
991 can_raster_at_maximum_scale = true; | 991 can_raster_at_maximum_scale = true; |
992 } | 992 } |
993 if (starting_scale && starting_scale > maximum_scale) { | 993 if (starting_scale && starting_scale > maximum_scale) { |
994 gfx::Size bounds_at_starting_scale = gfx::ToCeiledSize( | 994 gfx::Size bounds_at_starting_scale = |
995 gfx::ScaleSize(raster_source_->GetSize(), starting_scale)); | 995 gfx::ScaleToCeiledSize(raster_source_->GetSize(), starting_scale); |
996 int64 start_area = static_cast<int64>(bounds_at_starting_scale.width()) * | 996 int64 start_area = static_cast<int64>(bounds_at_starting_scale.width()) * |
997 static_cast<int64>(bounds_at_starting_scale.height()); | 997 static_cast<int64>(bounds_at_starting_scale.height()); |
998 gfx::Size viewport = layer_tree_impl()->device_viewport_size(); | 998 gfx::Size viewport = layer_tree_impl()->device_viewport_size(); |
999 int64 viewport_area = static_cast<int64>(viewport.width()) * | 999 int64 viewport_area = static_cast<int64>(viewport.width()) * |
1000 static_cast<int64>(viewport.height()); | 1000 static_cast<int64>(viewport.height()); |
1001 if (start_area <= viewport_area) | 1001 if (start_area <= viewport_area) |
1002 should_raster_at_starting_scale = true; | 1002 should_raster_at_starting_scale = true; |
1003 } | 1003 } |
1004 // Use the computed scales for the raster scale directly, do not try to use | 1004 // Use the computed scales for the raster scale directly, do not try to use |
1005 // the ideal scale here. The current ideal scale may be way too large in the | 1005 // the ideal scale here. The current ideal scale may be way too large in the |
1006 // case of an animation with scale, and will be constantly changing. | 1006 // case of an animation with scale, and will be constantly changing. |
1007 if (should_raster_at_starting_scale) | 1007 if (should_raster_at_starting_scale) |
1008 raster_contents_scale_ = starting_scale; | 1008 raster_contents_scale_ = starting_scale; |
1009 else if (can_raster_at_maximum_scale) | 1009 else if (can_raster_at_maximum_scale) |
1010 raster_contents_scale_ = maximum_scale; | 1010 raster_contents_scale_ = maximum_scale; |
1011 else | 1011 else |
1012 raster_contents_scale_ = 1.f * ideal_page_scale_ * ideal_device_scale_; | 1012 raster_contents_scale_ = 1.f * ideal_page_scale_ * ideal_device_scale_; |
1013 } | 1013 } |
1014 | 1014 |
1015 raster_contents_scale_ = | 1015 raster_contents_scale_ = |
1016 std::max(raster_contents_scale_, MinimumContentsScale()); | 1016 std::max(raster_contents_scale_, MinimumContentsScale()); |
1017 raster_contents_scale_ = | 1017 raster_contents_scale_ = |
1018 std::min(raster_contents_scale_, MaximumContentsScale()); | 1018 std::min(raster_contents_scale_, MaximumContentsScale()); |
1019 DCHECK_GE(raster_contents_scale_, MinimumContentsScale()); | 1019 DCHECK_GE(raster_contents_scale_, MinimumContentsScale()); |
1020 DCHECK_LE(raster_contents_scale_, MaximumContentsScale()); | 1020 DCHECK_LE(raster_contents_scale_, MaximumContentsScale()); |
1021 | 1021 |
1022 // If this layer would create zero or one tiles at this content scale, | 1022 // If this layer would create zero or one tiles at this content scale, |
1023 // don't create a low res tiling. | 1023 // don't create a low res tiling. |
1024 gfx::Size raster_bounds = gfx::ToCeiledSize( | 1024 gfx::Size raster_bounds = |
1025 gfx::ScaleSize(raster_source_->GetSize(), raster_contents_scale_)); | 1025 gfx::ScaleToCeiledSize(raster_source_->GetSize(), raster_contents_scale_); |
1026 gfx::Size tile_size = CalculateTileSize(raster_bounds); | 1026 gfx::Size tile_size = CalculateTileSize(raster_bounds); |
1027 bool tile_covers_bounds = tile_size.width() >= raster_bounds.width() && | 1027 bool tile_covers_bounds = tile_size.width() >= raster_bounds.width() && |
1028 tile_size.height() >= raster_bounds.height(); | 1028 tile_size.height() >= raster_bounds.height(); |
1029 if (tile_size.IsEmpty() || tile_covers_bounds) { | 1029 if (tile_size.IsEmpty() || tile_covers_bounds) { |
1030 low_res_raster_contents_scale_ = raster_contents_scale_; | 1030 low_res_raster_contents_scale_ = raster_contents_scale_; |
1031 return; | 1031 return; |
1032 } | 1032 } |
1033 | 1033 |
1034 float low_res_factor = | 1034 float low_res_factor = |
1035 layer_tree_impl()->settings().low_res_contents_scale_factor; | 1035 layer_tree_impl()->settings().low_res_contents_scale_factor; |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1246 | 1246 |
1247 bool PictureLayerImpl::IsOnActiveOrPendingTree() const { | 1247 bool PictureLayerImpl::IsOnActiveOrPendingTree() const { |
1248 return !layer_tree_impl()->IsRecycleTree(); | 1248 return !layer_tree_impl()->IsRecycleTree(); |
1249 } | 1249 } |
1250 | 1250 |
1251 bool PictureLayerImpl::HasValidTilePriorities() const { | 1251 bool PictureLayerImpl::HasValidTilePriorities() const { |
1252 return IsOnActiveOrPendingTree() && IsDrawnRenderSurfaceLayerListMember(); | 1252 return IsOnActiveOrPendingTree() && IsDrawnRenderSurfaceLayerListMember(); |
1253 } | 1253 } |
1254 | 1254 |
1255 } // namespace cc | 1255 } // namespace cc |
OLD | NEW |