| Index: cc/playback/display_list_raster_source.cc | 
| diff --git a/cc/playback/display_list_raster_source.cc b/cc/playback/display_list_raster_source.cc | 
| index 970648fbade4d25790a02b26f342a4002f9c5c62..0a8469b8783fe026bb2914996e091a90b247c828 100644 | 
| --- a/cc/playback/display_list_raster_source.cc | 
| +++ b/cc/playback/display_list_raster_source.cc | 
| @@ -47,7 +47,8 @@ DisplayListRasterSource::DisplayListRasterSource( | 
| slow_down_raster_scale_factor_for_debug_( | 
| other->slow_down_raster_scale_factor_for_debug_), | 
| should_attempt_to_use_distance_field_text_(false), | 
| -      image_decode_controller_(nullptr) { | 
| +      image_decode_controller_(nullptr), | 
| +      image_scaling_optimization_(ImageScalingOptimization::Static) { | 
| // In certain cases, ThreadTaskRunnerHandle isn't set (Android Webview). | 
| // Don't register a dump provider in these cases. | 
| // TODO(ericrk): Get this working in Android Webview. crbug.com/517156 | 
| @@ -107,8 +108,12 @@ void DisplayListRasterSource::PlaybackToSharedCanvas( | 
| RasterCommon(&canvas, nullptr, canvas_rect, canvas_rect, contents_scale); | 
| } else if (display_list_->MayHaveDiscardableImages()) { | 
| const SkImageInfo& info = raster_canvas->imageInfo(); | 
| +    const SkFilterQuality max_quality = | 
| +        image_scaling_optimization_ == ImageScalingOptimization::Static | 
| +            ? kHigh_SkFilterQuality | 
| +            : kMedium_SkFilterQuality; | 
| ImageHijackCanvas canvas(info.width(), info.height(), | 
| -                             image_decode_controller_); | 
| +                             image_decode_controller_, max_quality); | 
| canvas.addCanvas(raster_canvas); | 
|  | 
| RasterCommon(&canvas, nullptr, canvas_rect, canvas_rect, contents_scale); | 
| @@ -139,8 +144,12 @@ void DisplayListRasterSource::PlaybackToCanvas( | 
| contents_scale); | 
| } else if (display_list_->MayHaveDiscardableImages()) { | 
| const SkImageInfo& info = raster_canvas->imageInfo(); | 
| +    const SkFilterQuality max_quality = | 
| +        image_scaling_optimization_ == ImageScalingOptimization::Static | 
| +            ? kHigh_SkFilterQuality | 
| +            : kMedium_SkFilterQuality; | 
| ImageHijackCanvas canvas(info.width(), info.height(), | 
| -                             image_decode_controller_); | 
| +                             image_decode_controller_, max_quality); | 
| canvas.addCanvas(raster_canvas); | 
| RasterCommon(&canvas, nullptr, canvas_bitmap_rect, canvas_playback_rect, | 
| contents_scale); | 
| @@ -371,6 +380,11 @@ void DisplayListRasterSource::SetImageDecodeController( | 
| image_decode_controller_ = image_decode_controller; | 
| } | 
|  | 
| +void DisplayListRasterSource::SetImageScalingOptimization( | 
| +    ImageScalingOptimization opt) { | 
| +  image_scaling_optimization_ = opt; | 
| +} | 
| + | 
| bool DisplayListRasterSource::OnMemoryDump( | 
| const base::trace_event::MemoryDumpArgs& args, | 
| base::trace_event::ProcessMemoryDump* pmd) { | 
|  |