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

Side by Side Diff: cc/layers/picture_layer_impl.cc

Issue 422233008: Re-raster during scale animations for GPU-rasterized layers without text (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « cc/layers/picture_layer_impl.h ('k') | cc/layers/picture_layer_impl_unittest.cc » ('j') | 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/layers/picture_layer_impl.h" 5 #include "cc/layers/picture_layer_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/debug/trace_event_argument.h" 10 #include "base/debug/trace_event_argument.h"
(...skipping 1005 matching lines...) Expand 10 before | Expand all | Expand 10 after
1016 high_res->set_resolution(HIGH_RESOLUTION); 1016 high_res->set_resolution(HIGH_RESOLUTION);
1017 1017
1018 SanityCheckTilingState(); 1018 SanityCheckTilingState();
1019 } 1019 }
1020 1020
1021 bool PictureLayerImpl::ShouldAdjustRasterScale() const { 1021 bool PictureLayerImpl::ShouldAdjustRasterScale() const {
1022 if (was_screen_space_transform_animating_ != 1022 if (was_screen_space_transform_animating_ !=
1023 draw_properties().screen_space_transform_is_animating) 1023 draw_properties().screen_space_transform_is_animating)
1024 return true; 1024 return true;
1025 1025
1026 if (draw_properties().screen_space_transform_is_animating &&
1027 raster_contents_scale_ != ideal_contents_scale_ &&
1028 ShouldAdjustRasterScaleDuringScaleAnimations())
1029 return true;
1030
1026 bool is_pinching = layer_tree_impl()->PinchGestureActive(); 1031 bool is_pinching = layer_tree_impl()->PinchGestureActive();
1027 if (is_pinching && raster_page_scale_) { 1032 if (is_pinching && raster_page_scale_) {
1028 // We change our raster scale when it is: 1033 // We change our raster scale when it is:
1029 // - Higher than ideal (need a lower-res tiling available) 1034 // - Higher than ideal (need a lower-res tiling available)
1030 // - Too far from ideal (need a higher-res tiling available) 1035 // - Too far from ideal (need a higher-res tiling available)
1031 float ratio = ideal_page_scale_ / raster_page_scale_; 1036 float ratio = ideal_page_scale_ / raster_page_scale_;
1032 if (raster_page_scale_ > ideal_page_scale_ || 1037 if (raster_page_scale_ > ideal_page_scale_ ||
1033 ratio > kMaxScaleRatioDuringPinch) 1038 ratio > kMaxScaleRatioDuringPinch)
1034 return true; 1039 return true;
1035 } 1040 }
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1110 zooming_out ? old_raster_contents_scale / kMaxScaleRatioDuringPinch 1115 zooming_out ? old_raster_contents_scale / kMaxScaleRatioDuringPinch
1111 : old_raster_contents_scale * kMaxScaleRatioDuringPinch; 1116 : old_raster_contents_scale * kMaxScaleRatioDuringPinch;
1112 raster_contents_scale_ = SnappedContentsScale(desired_contents_scale); 1117 raster_contents_scale_ = SnappedContentsScale(desired_contents_scale);
1113 raster_page_scale_ = 1118 raster_page_scale_ =
1114 raster_contents_scale_ / raster_device_scale_ / raster_source_scale_; 1119 raster_contents_scale_ / raster_device_scale_ / raster_source_scale_;
1115 } 1120 }
1116 1121
1117 raster_contents_scale_ = 1122 raster_contents_scale_ =
1118 std::max(raster_contents_scale_, MinimumContentsScale()); 1123 std::max(raster_contents_scale_, MinimumContentsScale());
1119 1124
1120 // Since we're not re-rasterizing during animation, rasterize at the maximum 1125 // If we're not re-rasterizing during animation, rasterize at the maximum
1121 // scale that will occur during the animation, if the maximum scale is 1126 // scale that will occur during the animation, if the maximum scale is
1122 // known. However, to avoid excessive memory use, don't rasterize at a scale 1127 // known. However, to avoid excessive memory use, don't rasterize at a scale
1123 // at which this layer would become larger than the viewport. 1128 // at which this layer would become larger than the viewport.
1124 if (draw_properties().screen_space_transform_is_animating) { 1129 if (draw_properties().screen_space_transform_is_animating &&
1130 !ShouldAdjustRasterScaleDuringScaleAnimations()) {
1125 bool can_raster_at_maximum_scale = false; 1131 bool can_raster_at_maximum_scale = false;
1126 if (draw_properties().maximum_animation_contents_scale > 0.f) { 1132 if (draw_properties().maximum_animation_contents_scale > 0.f) {
1127 gfx::Size bounds_at_maximum_scale = gfx::ToCeiledSize(gfx::ScaleSize( 1133 gfx::Size bounds_at_maximum_scale = gfx::ToCeiledSize(gfx::ScaleSize(
1128 bounds(), draw_properties().maximum_animation_contents_scale)); 1134 bounds(), draw_properties().maximum_animation_contents_scale));
1129 if (bounds_at_maximum_scale.GetArea() <= 1135 if (bounds_at_maximum_scale.GetArea() <=
1130 layer_tree_impl()->device_viewport_size().GetArea()) 1136 layer_tree_impl()->device_viewport_size().GetArea())
1131 can_raster_at_maximum_scale = true; 1137 can_raster_at_maximum_scale = true;
1132 } 1138 }
1133 if (can_raster_at_maximum_scale) { 1139 if (can_raster_at_maximum_scale) {
1134 raster_contents_scale_ = 1140 raster_contents_scale_ =
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
1292 } 1298 }
1293 if (tilings_->num_tilings() == 0) 1299 if (tilings_->num_tilings() == 0)
1294 return; 1300 return;
1295 1301
1296 // MarkVisibleResourcesAsRequired depends on having exactly 1 high res 1302 // MarkVisibleResourcesAsRequired depends on having exactly 1 high res
1297 // tiling to mark its tiles as being required for activation. 1303 // tiling to mark its tiles as being required for activation.
1298 DCHECK_EQ(1, tilings_->NumHighResTilings()); 1304 DCHECK_EQ(1, tilings_->NumHighResTilings());
1299 #endif 1305 #endif
1300 } 1306 }
1301 1307
1308 bool PictureLayerImpl::ShouldAdjustRasterScaleDuringScaleAnimations() const {
1309 if (!layer_tree_impl()->use_gpu_rasterization())
1310 return false;
1311 if (pile_->has_text())
enne (OOO) 2014/08/20 18:15:49 Can you add some comments about why this is needed
ajuma 2014/08/20 18:51:29 Done.
1312 return false;
1313
1314 return true;
1315 }
1316
1302 float PictureLayerImpl::MaximumTilingContentsScale() const { 1317 float PictureLayerImpl::MaximumTilingContentsScale() const {
1303 float max_contents_scale = MinimumContentsScale(); 1318 float max_contents_scale = MinimumContentsScale();
1304 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { 1319 for (size_t i = 0; i < tilings_->num_tilings(); ++i) {
1305 const PictureLayerTiling* tiling = tilings_->tiling_at(i); 1320 const PictureLayerTiling* tiling = tilings_->tiling_at(i);
1306 max_contents_scale = std::max(max_contents_scale, tiling->contents_scale()); 1321 max_contents_scale = std::max(max_contents_scale, tiling->contents_scale());
1307 } 1322 }
1308 return max_contents_scale; 1323 return max_contents_scale;
1309 } 1324 }
1310 1325
1311 void PictureLayerImpl::UpdateIdealScales() { 1326 void PictureLayerImpl::UpdateIdealScales() {
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
1697 PictureLayerTilingSet::TilingRange tiling_range = CurrentTilingRange(); 1712 PictureLayerTilingSet::TilingRange tiling_range = CurrentTilingRange();
1698 size_t current_tiling_range_offset = current_tiling_ - tiling_range.start; 1713 size_t current_tiling_range_offset = current_tiling_ - tiling_range.start;
1699 return tiling_range.end - 1 - current_tiling_range_offset; 1714 return tiling_range.end - 1 - current_tiling_range_offset;
1700 } 1715 }
1701 } 1716 }
1702 NOTREACHED(); 1717 NOTREACHED();
1703 return 0; 1718 return 0;
1704 } 1719 }
1705 1720
1706 } // namespace cc 1721 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/picture_layer_impl.h ('k') | cc/layers/picture_layer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698