Index: cc/layers/picture_layer_impl.cc |
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc |
index f1e11453fb4a7cc28fed2453b5db72c444144685..1e097e904af7404c1fdeab7dd011e53c558c5131 100644 |
--- a/cc/layers/picture_layer_impl.cc |
+++ b/cc/layers/picture_layer_impl.cc |
@@ -69,13 +69,11 @@ PictureLayerImpl::PictureLayerImpl(LayerTreeImpl* tree_impl, |
ideal_device_scale_(0.f), |
ideal_source_scale_(0.f), |
ideal_contents_scale_(0.f), |
- last_ideal_source_scale_(0.f), |
raster_page_scale_(0.f), |
raster_device_scale_(0.f), |
raster_source_scale_(0.f), |
raster_contents_scale_(0.f), |
low_res_raster_contents_scale_(0.f), |
- raster_source_scale_is_fixed_(false), |
was_screen_space_transform_animating_(false), |
only_used_low_res_last_append_quads_(false), |
is_mask_(is_mask), |
@@ -434,17 +432,6 @@ bool PictureLayerImpl::UpdateTiles() { |
AddTilingsForRasterScale(); |
} |
- // Inform layer tree impl if we will have blurry content because of fixed |
- // raster scale (note that this check should happen after we |
- // ReclaculateRasterScales, since that's the function that will determine |
- // whether our raster scale is fixed. |
- if (raster_source_scale_is_fixed_ && !has_will_change_transform_hint()) { |
- if (raster_source_scale_ != ideal_source_scale_) |
- layer_tree_impl()->SetFixedRasterScaleHasBlurryContent(); |
- if (ideal_source_scale_ != last_ideal_source_scale_) |
- layer_tree_impl()->SetFixedRasterScaleAttemptedToChangeScale(); |
- } |
- |
if (layer_tree_impl()->IsActiveTree()) |
AddLowResolutionTilingIfNeeded(); |
@@ -915,19 +902,23 @@ bool PictureLayerImpl::ShouldAdjustRasterScale() const { |
if (raster_device_scale_ != ideal_device_scale_) |
return true; |
- // When the source scale changes we want to match it, but not when animating |
- // or when we've fixed the scale in place. |
- if (!draw_properties().screen_space_transform_is_animating && |
- !raster_source_scale_is_fixed_ && |
- raster_source_scale_ != ideal_source_scale_) |
- return true; |
- |
if (raster_contents_scale_ > MaximumContentsScale()) |
return true; |
if (raster_contents_scale_ < MinimumContentsScale()) |
return true; |
- return false; |
+ // Don't change the raster scale if any of the following are true: |
+ // - We have an animating transform. |
+ // - We have a will-change transform hint. |
+ // - The raster scale is already ideal. |
+ if (draw_properties().screen_space_transform_is_animating || |
+ has_will_change_transform_hint() || |
+ raster_source_scale_ == ideal_source_scale_) { |
+ return false; |
+ } |
+ |
+ // Match the raster scale in all other cases. |
+ return true; |
} |
void PictureLayerImpl::AddLowResolutionTilingIfNeeded() { |
@@ -961,31 +952,12 @@ void PictureLayerImpl::AddLowResolutionTilingIfNeeded() { |
void PictureLayerImpl::RecalculateRasterScales() { |
float old_raster_contents_scale = raster_contents_scale_; |
float old_raster_page_scale = raster_page_scale_; |
- float old_raster_source_scale = raster_source_scale_; |
raster_device_scale_ = ideal_device_scale_; |
raster_page_scale_ = ideal_page_scale_; |
raster_source_scale_ = ideal_source_scale_; |
raster_contents_scale_ = ideal_contents_scale_; |
- // If we're not animating, or leaving an animation, and the |
- // ideal_source_scale_ changes, then things are unpredictable, and we fix |
- // the raster_source_scale_ in place. |
- if (old_raster_source_scale && |
- !draw_properties().screen_space_transform_is_animating && |
- !was_screen_space_transform_animating_ && |
- old_raster_source_scale != ideal_source_scale_) |
- raster_source_scale_is_fixed_ = true; |
- |
- // TODO(danakj): Adjust raster source scale closer to ideal source scale at |
- // a throttled rate. Possibly make use of invalidation_.IsEmpty() on pending |
- // tree. This will allow CSS scale changes to get re-rastered at an |
- // appropriate rate. (crbug.com/413636) |
- if (raster_source_scale_is_fixed_) { |
- raster_contents_scale_ /= raster_source_scale_; |
- raster_source_scale_ = 1.f; |
- } |
- |
// During pinch we completely ignore the current ideal scale, and just use |
// a multiple of the previous scale. |
bool is_pinching = layer_tree_impl()->PinchGestureActive(); |
@@ -1156,7 +1128,6 @@ void PictureLayerImpl::ResetRasterScale() { |
raster_source_scale_ = 0.f; |
raster_contents_scale_ = 0.f; |
low_res_raster_contents_scale_ = 0.f; |
- raster_source_scale_is_fixed_ = false; |
} |
bool PictureLayerImpl::CanHaveTilings() const { |
@@ -1218,7 +1189,6 @@ void PictureLayerImpl::UpdateIdealScales() { |
: 1.f; |
ideal_device_scale_ = layer_tree_impl()->device_scale_factor(); |
ideal_contents_scale_ = std::max(GetIdealContentsScale(), min_contents_scale); |
- last_ideal_source_scale_ = ideal_source_scale_; |
ideal_source_scale_ = |
ideal_contents_scale_ / ideal_page_scale_ / ideal_device_scale_; |
} |