| Index: dm/DMSrcSink.cpp
|
| diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
|
| index f0b10103f7494d17a97ccb4bbbdde447a8afaa61..1b5d0cfbe06c070fb742ac00ff61e0d32a8f856f 100644
|
| --- a/dm/DMSrcSink.cpp
|
| +++ b/dm/DMSrcSink.cpp
|
| @@ -15,6 +15,7 @@
|
| #include "SkColorSpaceXform.h"
|
| #include "SkCommonFlags.h"
|
| #include "SkData.h"
|
| +#include "SkDeferredCanvas.h"
|
| #include "SkDocument.h"
|
| #include "SkError.h"
|
| #include "SkImageGenerator.h"
|
| @@ -49,6 +50,8 @@ DEFINE_bool(multiPage, false, "For document-type backends, render the source"
|
| " into multiple pages");
|
| DEFINE_bool(RAW_threading, true, "Allow RAW decodes to run on multiple threads?");
|
|
|
| +extern bool gUseDeferredCanvas;
|
| +
|
| using sk_gpu_test::GrContextFactory;
|
|
|
| namespace DM {
|
| @@ -1229,7 +1232,8 @@ Error RasterSink::draw(const Src& src, SkBitmap* dst, SkWStream*, SkString*) con
|
| &factory,
|
| nullptr/*colortable*/);
|
| SkCanvas canvas(*dst);
|
| - return src.draw(&canvas);
|
| + SkDeferredCanvas deferred(&canvas);
|
| + return src.draw(gUseDeferredCanvas ? &deferred : &canvas);
|
| }
|
|
|
| /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
|
| @@ -1400,6 +1404,13 @@ Error ViaTiles::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStri
|
| auto s = canvas->makeSurface(info);
|
| if (!s) {
|
| s = SkSurface::MakeRaster(info); // Some canvases can't create surfaces.
|
| + if (!s) {
|
| + // non-pixel canvases return unknown colortype, which would make
|
| + // makesurface fail, so assume that is why we failed, and use N32.
|
| + SkASSERT(kUnknown_SkColorType == info.colorType());
|
| + info = SkImageInfo::MakeN32Premul(info.width(), info.height());
|
| + s = SkSurface::MakeRaster(info);
|
| + }
|
| }
|
| surfaces.push_back(s);
|
| SkCanvas* c = s->getCanvas();
|
|
|