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(); |