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) { |