Index: cc/playback/raster_source.cc |
diff --git a/cc/playback/raster_source.cc b/cc/playback/raster_source.cc |
index 93e987b983f6223b0881639e501484fabc2f3a8e..ab0fd5a333269e4e56a1d4e113166c48b28174cf 100644 |
--- a/cc/playback/raster_source.cc |
+++ b/cc/playback/raster_source.cc |
@@ -86,52 +86,27 @@ RasterSource::~RasterSource() { |
this); |
} |
-void RasterSource::PlaybackToSharedCanvas(SkCanvas* raster_canvas, |
- const gfx::Rect& canvas_rect, |
- float contents_scale, |
- bool include_images) const { |
- // TODO(vmpstr): This can be improved by plumbing whether the tile itself has |
- // discardable images. This way we would only pay for the hijack canvas if the |
- // tile actually needed it. |
- if (!include_images) { |
- SkipImageCanvas canvas(raster_canvas); |
- RasterCommon(&canvas, nullptr, canvas_rect, canvas_rect, contents_scale); |
- } else if (display_list_->MayHaveDiscardableImages()) { |
- const SkImageInfo& info = raster_canvas->imageInfo(); |
- ImageHijackCanvas canvas(info.width(), info.height(), |
- image_decode_controller_); |
- canvas.addCanvas(raster_canvas); |
- |
- RasterCommon(&canvas, nullptr, canvas_rect, canvas_rect, contents_scale); |
- } else { |
- RasterCommon(raster_canvas, nullptr, canvas_rect, canvas_rect, |
- contents_scale); |
- } |
-} |
- |
-void RasterSource::RasterForAnalysis(skia::AnalysisCanvas* canvas, |
- const gfx::Rect& canvas_rect, |
- float contents_scale) const { |
- RasterCommon(canvas, canvas, canvas_rect, canvas_rect, contents_scale); |
-} |
- |
void RasterSource::PlaybackToCanvas(SkCanvas* raster_canvas, |
const gfx::Rect& canvas_bitmap_rect, |
const gfx::Rect& canvas_playback_rect, |
float contents_scale, |
- bool include_images) const { |
- PrepareForPlaybackToCanvas(raster_canvas, canvas_bitmap_rect, |
- canvas_playback_rect, contents_scale); |
+ const PlaybackSettings& settings) const { |
+ if (!settings.playback_to_shared_canvas) { |
+ PrepareForPlaybackToCanvas(raster_canvas, canvas_bitmap_rect, |
+ canvas_playback_rect, contents_scale); |
+ } |
- if (!include_images) { |
+ if (settings.skip_images) { |
SkipImageCanvas canvas(raster_canvas); |
RasterCommon(&canvas, nullptr, canvas_bitmap_rect, canvas_playback_rect, |
contents_scale); |
- } else if (display_list_->MayHaveDiscardableImages()) { |
+ } else if (settings.use_image_hijack_canvas && |
+ display_list_->MayHaveDiscardableImages()) { |
const SkImageInfo& info = raster_canvas->imageInfo(); |
ImageHijackCanvas canvas(info.width(), info.height(), |
image_decode_controller_); |
canvas.addCanvas(raster_canvas); |
+ |
RasterCommon(&canvas, nullptr, canvas_bitmap_rect, canvas_playback_rect, |
contents_scale); |
} else { |
@@ -282,7 +257,7 @@ bool RasterSource::PerformSolidColorAnalysis(const gfx::Rect& content_rect, |
layer_rect.Intersect(gfx::Rect(size_)); |
skia::AnalysisCanvas canvas(layer_rect.width(), layer_rect.height()); |
- RasterForAnalysis(&canvas, layer_rect, 1.0f); |
+ RasterCommon(&canvas, &canvas, layer_rect, layer_rect, 1.0f); |
return canvas.GetColorIfSolid(color); |
} |
@@ -373,4 +348,9 @@ bool RasterSource::OnMemoryDump(const base::trace_event::MemoryDumpArgs& args, |
return true; |
} |
+RasterSource::PlaybackSettings::PlaybackSettings() |
+ : playback_to_shared_canvas(false), |
+ skip_images(false), |
+ use_image_hijack_canvas(true) {} |
+ |
} // namespace cc |