| Index: cc/playback/raster_source.cc
|
| diff --git a/cc/playback/raster_source.cc b/cc/playback/raster_source.cc
|
| index 9e5e946fb777e24a834a56eaa1a34216ee8cc673..67b79d5be7bc570dabf62c16f86e8d06de4c6797 100644
|
| --- a/cc/playback/raster_source.cc
|
| +++ b/cc/playback/raster_source.cc
|
| @@ -14,9 +14,9 @@
|
| #include "cc/playback/image_hijack_canvas.h"
|
| #include "cc/playback/skip_image_canvas.h"
|
| #include "skia/ext/analysis_canvas.h"
|
| -#include "third_party/skia/include/core/SkCanvas.h"
|
| +#include "skia/ext/cdl_canvas.h"
|
| #include "third_party/skia/include/core/SkClipStack.h"
|
| -#include "third_party/skia/include/core/SkPictureRecorder.h"
|
| +#include "skia/ext/cdl_picture_recorder.h"
|
| #include "ui/gfx/geometry/rect_conversions.h"
|
|
|
| namespace cc {
|
| @@ -85,37 +85,31 @@ void RasterSource::PlaybackToCanvas(SkCanvas* raster_canvas,
|
|
|
| void RasterSource::PlaybackToCanvas(SkCanvas* raster_canvas,
|
| const PlaybackSettings& settings) const {
|
| - if (!settings.playback_to_shared_canvas)
|
| - PrepareForPlaybackToCanvas(raster_canvas);
|
| + std::unique_ptr<CdlCanvas> playback_canvas;
|
|
|
| if (settings.skip_images) {
|
| - SkipImageCanvas canvas(raster_canvas);
|
| - RasterCommon(&canvas, nullptr);
|
| + // TODO(cdl): SkipImageCanvas
|
| + // SkipImageCanvas canvas(raster_canvas);
|
| + // RasterCommon(&canvas, nullptr);
|
| + playback_canvas.reset(new CdlPassThroughCanvas(raster_canvas));
|
| } else if (settings.use_image_hijack_canvas) {
|
| - const SkImageInfo& info = raster_canvas->imageInfo();
|
| -
|
| - ImageHijackCanvas canvas(info.width(), info.height(), image_decode_cache_);
|
| - // Before adding the canvas, make sure that the ImageHijackCanvas is aware
|
| - // of the current transform and clip, which may affect the clip bounds.
|
| - // Since we query the clip bounds of the current canvas to get the list of
|
| - // draw commands to process, this is important to produce correct content.
|
| - SkIRect raster_bounds;
|
| - raster_canvas->getClipDeviceBounds(&raster_bounds);
|
| - canvas.clipRect(SkRect::MakeFromIRect(raster_bounds));
|
| - canvas.setMatrix(raster_canvas->getTotalMatrix());
|
| - canvas.addCanvas(raster_canvas);
|
| -
|
| - RasterCommon(&canvas, nullptr);
|
| + playback_canvas.reset(
|
| + new ImageHijackCanvas(raster_canvas, image_decode_cache_));
|
| } else {
|
| - RasterCommon(raster_canvas, nullptr);
|
| + playback_canvas.reset(new CdlPassThroughCanvas(raster_canvas));
|
| }
|
| +
|
| + if (!settings.playback_to_shared_canvas)
|
| + PrepareForPlaybackToCanvas(playback_canvas.get());
|
| +
|
| + RasterCommon(playback_canvas.get(), nullptr);
|
| }
|
|
|
| -void RasterSource::PrepareForPlaybackToCanvas(SkCanvas* canvas) const {
|
| +void RasterSource::PrepareForPlaybackToCanvas(CdlCanvas* canvas) const {
|
| // TODO(hendrikw): See if we can split this up into separate functions.
|
|
|
| if (canvas->getClipStack()->quickContains(
|
| - SkRect::MakeFromIRect(canvas->imageInfo().bounds()))) {
|
| + SkRect::MakeFromIRect(GetSkCanvas(canvas)->imageInfo().bounds()))) {
|
| canvas->discard();
|
| }
|
|
|
| @@ -189,7 +183,7 @@ void RasterSource::PrepareForPlaybackToCanvas(SkCanvas* canvas) const {
|
| canvas->restore();
|
| }
|
|
|
| -void RasterSource::RasterCommon(SkCanvas* canvas,
|
| +void RasterSource::RasterCommon(CdlCanvas* canvas,
|
| SkPicture::AbortCallback* callback) const {
|
| DCHECK(display_list_.get());
|
| int repeat_count = std::max(1, slow_down_raster_scale_factor_for_debug_);
|
| @@ -197,11 +191,11 @@ void RasterSource::RasterCommon(SkCanvas* canvas,
|
| display_list_->Raster(canvas, callback);
|
| }
|
|
|
| -sk_sp<SkPicture> RasterSource::GetFlattenedPicture() {
|
| +sk_sp<CdlPicture> RasterSource::GetFlattenedPicture() {
|
| TRACE_EVENT0("cc", "RasterSource::GetFlattenedPicture");
|
|
|
| - SkPictureRecorder recorder;
|
| - SkCanvas* canvas = recorder.beginRecording(size_.width(), size_.height());
|
| + CdlPictureRecorder recorder;
|
| + CdlCanvas* canvas = recorder.beginRecording(size_.width(), size_.height());
|
| if (!size_.IsEmpty()) {
|
| PrepareForPlaybackToCanvas(canvas);
|
| RasterCommon(canvas, nullptr);
|
| @@ -226,10 +220,11 @@ bool RasterSource::PerformSolidColorAnalysis(const gfx::Rect& content_rect,
|
| content_rect, 1.f / raster_scales.width(), 1.f / raster_scales.height());
|
|
|
| layer_rect.Intersect(gfx::Rect(size_));
|
| - skia::AnalysisCanvas canvas(layer_rect.width(), layer_rect.height());
|
| + skia::AnalysisCanvas sk_canvas(layer_rect.width(), layer_rect.height());
|
| + CdlPassThroughCanvas canvas(&sk_canvas);
|
| canvas.translate(-layer_rect.x(), -layer_rect.y());
|
| - RasterCommon(&canvas, &canvas);
|
| - return canvas.GetColorIfSolid(color);
|
| + RasterCommon(&canvas, &sk_canvas);
|
| + return sk_canvas.GetColorIfSolid(color);
|
| }
|
|
|
| void RasterSource::GetDiscardableImagesInRect(
|
|
|