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

Unified Diff: cc/layers/picture_layer_impl.cc

Issue 1839143004: Limit image filtering during scale animations Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/layers/picture_layer_impl.h ('k') | cc/playback/display_list_raster_source.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/layers/picture_layer_impl.cc
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc
index cf2e36a209bdcb576c5ca138e6673b97955ed079..f8c726ebb8774863294953e611c24579d7a64f02 100644
--- a/cc/layers/picture_layer_impl.cc
+++ b/cc/layers/picture_layer_impl.cc
@@ -74,6 +74,7 @@ PictureLayerImpl::PictureLayerImpl(LayerTreeImpl* tree_impl,
raster_source_scale_(0.f),
raster_contents_scale_(0.f),
low_res_raster_contents_scale_(0.f),
+ source_scale_has_changed_(false),
was_screen_space_transform_animating_(false),
only_used_low_res_last_append_quads_(false),
is_mask_(is_mask),
@@ -545,6 +546,10 @@ void PictureLayerImpl::UpdateRasterSource(
if (!pending_set) {
raster_source_->SetImageDecodeController(
layer_tree_impl()->image_decode_controller());
+ raster_source_->SetImageScalingOptimization(
+ source_scale_has_changed_
+ ? DisplayListRasterSource::ImageScalingOptimization::Animation
+ : DisplayListRasterSource::ImageScalingOptimization::Static);
}
// The |new_invalidation| must be cleared before updating tilings since they
@@ -946,12 +951,23 @@ void PictureLayerImpl::AddLowResolutionTilingIfNeeded() {
void PictureLayerImpl::RecalculateRasterScales() {
const float old_raster_contents_scale = raster_contents_scale_;
const float old_raster_page_scale = raster_page_scale_;
+ const 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
+ // may need to tweak some source rasterization params.
+ // TODO(fmalita): this should be generalized for screen transform changes.
+ if (old_raster_source_scale &&
+ !draw_properties().screen_space_transform_is_animating &&
+ !was_screen_space_transform_animating_ &&
+ old_raster_source_scale != ideal_source_scale_)
+ source_scale_has_changed_ = true;
+
// 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();
@@ -1122,6 +1138,7 @@ void PictureLayerImpl::ResetRasterScale() {
raster_source_scale_ = 0.f;
raster_contents_scale_ = 0.f;
low_res_raster_contents_scale_ = 0.f;
+ source_scale_has_changed_ = false;
}
bool PictureLayerImpl::CanHaveTilings() const {
@@ -1207,6 +1224,7 @@ void PictureLayerImpl::AsValueInto(
state->SetDouble("ideal_contents_scale", ideal_contents_scale_);
state->SetDouble("raster_contents_scale", raster_contents_scale_);
state->SetDouble("geometry_contents_scale", MaximumTilingContentsScale());
+ state->SetBoolean("source_scale_changed", source_scale_has_changed_);
state->BeginArray("tilings");
tilings_->AsValueInto(state);
state->EndArray();
« no previous file with comments | « cc/layers/picture_layer_impl.h ('k') | cc/playback/display_list_raster_source.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698