Chromium Code Reviews| Index: dm/DMSrcSink.h |
| diff --git a/dm/DMSrcSink.h b/dm/DMSrcSink.h |
| index bf8e7d6810d7465957b72b0b23402a62b7b62e88..8daca00f25c05cbff909fde5ce58464a5f433f35 100644 |
| --- a/dm/DMSrcSink.h |
| +++ b/dm/DMSrcSink.h |
| @@ -10,6 +10,7 @@ |
| #include "SkGPipe.h" |
| #include "SkNullCanvas.h" |
| #include "SkPicture.h" |
| +#include "SkString.h" |
| #include "gm.h" |
| namespace DM { |
| @@ -33,14 +34,26 @@ struct Src { |
| struct Sink { |
| virtual ~Sink() {} |
| - // You may write to either the bitmap or stream. |
| - virtual Error SK_WARN_UNUSED_RESULT draw(const Src&, SkBitmap*, SkWStream*) const |
| - = 0; |
| + |
| + Error SK_WARN_UNUSED_RESULT draw(const Src& src, SkBitmap* bmp, SkWStream* stream) const { |
| + fVerboseLog.reset(); |
| + return this->onDraw(src, bmp, stream); |
| + } |
| + |
| // Sinks in the same enclave (except kAnyThread_Enclave) will run serially on the same thread. |
| virtual int enclave() const = 0; |
| // File extension for the content draw() outputs, e.g. "png", "pdf". |
| virtual const char* fileExtension() const = 0; |
| + |
| + const SkString& verboseLog() const { return fVerboseLog; } |
| + |
| +protected: |
| + mutable SkString fVerboseLog; |
|
mtklein
2015/02/02 16:23:17
I don't think this is going to work. Storing muta
bsalomon
2015/02/02 19:44:59
Ah... forgot that the sinks weren't instanced per
|
| + |
| +private: |
| + // You may write to either the bitmap or stream. |
| + virtual Error SK_WARN_UNUSED_RESULT onDraw(const Src&, SkBitmap*, SkWStream*) const = 0; |
| }; |
| enum { kAnyThread_Enclave, kGPU_Enclave, kPDFSink_Enclave }; |
| @@ -90,10 +103,11 @@ class GPUSink : public Sink { |
| public: |
| GPUSink(GrContextFactory::GLContextType, GrGLStandard, int samples, bool dfText, bool threaded); |
| - Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; |
| int enclave() const SK_OVERRIDE; |
| const char* fileExtension() const SK_OVERRIDE { return "png"; } |
| private: |
| + Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; |
| + |
| GrContextFactory::GLContextType fContextType; |
| GrGLStandard fGpuAPI; |
| int fSampleCount; |
| @@ -105,19 +119,21 @@ class PDFSink : public Sink { |
| public: |
| PDFSink(); |
| - Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; |
| int enclave() const SK_OVERRIDE { return kPDFSink_Enclave; } |
| const char* fileExtension() const SK_OVERRIDE { return "pdf"; } |
| +private: |
| + Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; |
| }; |
| class RasterSink : public Sink { |
| public: |
| explicit RasterSink(SkColorType); |
| - Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; |
| int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } |
| const char* fileExtension() const SK_OVERRIDE { return "png"; } |
| private: |
| + Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; |
| + |
| SkColorType fColorType; |
| }; |
| @@ -125,9 +141,10 @@ class SKPSink : public Sink { |
| public: |
| SKPSink(); |
| - Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; |
| int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } |
| const char* fileExtension() const SK_OVERRIDE { return "skp"; } |
| +private: |
| + Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; |
| }; |
| /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ |
| @@ -136,10 +153,10 @@ class ViaMatrix : public Sink { |
| public: |
| ViaMatrix(SkMatrix, Sink*); |
| - Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; |
| int enclave() const SK_OVERRIDE { return fSink->enclave(); } |
| const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension(); } |
| private: |
| + Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; |
| SkMatrix fMatrix; |
| SkAutoTDelete<Sink> fSink; |
| }; |
| @@ -148,10 +165,10 @@ class ViaPipe : public Sink { |
| public: |
| explicit ViaPipe(Sink*); |
| - Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; |
| int enclave() const SK_OVERRIDE { return fSink->enclave(); } |
| const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension(); } |
| private: |
| + Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; |
| SkAutoTDelete<Sink> fSink; |
| }; |
| @@ -159,10 +176,11 @@ class ViaSerialization : public Sink { |
| public: |
| explicit ViaSerialization(Sink*); |
| - Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; |
| int enclave() const SK_OVERRIDE { return fSink->enclave(); } |
| const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension(); } |
| private: |
| + Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; |
| + |
| SkAutoTDelete<Sink> fSink; |
| }; |
| @@ -170,10 +188,11 @@ class ViaTiles : public Sink { |
| public: |
| ViaTiles(int w, int h, SkBBHFactory*, Sink*); |
| - Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; |
| int enclave() const SK_OVERRIDE { return fSink->enclave(); } |
| const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension(); } |
| private: |
| + Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; |
| + |
| const int fW, fH; |
| SkAutoTDelete<SkBBHFactory> fFactory; |
| SkAutoTDelete<Sink> fSink; |
| @@ -181,11 +200,12 @@ private: |
| class NullSink : public Sink { |
| public: |
| - Error draw(const Src& src, SkBitmap*, SkWStream* out) const SK_OVERRIDE { |
| - return src.draw(SkCreateNullCanvas()); |
| - } |
| int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } |
| const char* fileExtension() const SK_OVERRIDE { return ""; } |
| +private: |
| + Error onDraw(const Src& src, SkBitmap*, SkWStream* out) const SK_OVERRIDE { |
| + return src.draw(SkCreateNullCanvas()); |
| + } |
| }; |
| } // namespace DM |