Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #ifndef DMSrcSink_DEFINED | 1 #ifndef DMSrcSink_DEFINED |
| 2 #define DMSrcSink_DEFINED | 2 #define DMSrcSink_DEFINED |
| 3 | 3 |
| 4 #include "DMGpuSupport.h" | 4 #include "DMGpuSupport.h" |
| 5 #include "SkBBHFactory.h" | 5 #include "SkBBHFactory.h" |
| 6 #include "SkBBoxHierarchy.h" | 6 #include "SkBBoxHierarchy.h" |
| 7 #include "SkBitmap.h" | 7 #include "SkBitmap.h" |
| 8 #include "SkCanvas.h" | 8 #include "SkCanvas.h" |
| 9 #include "SkData.h" | 9 #include "SkData.h" |
| 10 #include "SkGPipe.h" | 10 #include "SkGPipe.h" |
| 11 #include "SkNullCanvas.h" | 11 #include "SkNullCanvas.h" |
| 12 #include "SkPicture.h" | 12 #include "SkPicture.h" |
| 13 #include "SkString.h" | |
| 13 #include "gm.h" | 14 #include "gm.h" |
| 14 | 15 |
| 15 namespace DM { | 16 namespace DM { |
| 16 | 17 |
| 17 // This is just convenience. It lets you use either return "foo" or return SkSt ringPrintf(...). | 18 // This is just convenience. It lets you use either return "foo" or return SkSt ringPrintf(...). |
| 18 struct ImplicitString : public SkString { | 19 struct ImplicitString : public SkString { |
| 19 template <typename T> | 20 template <typename T> |
| 20 ImplicitString(const T& s) : SkString(s) {} | 21 ImplicitString(const T& s) : SkString(s) {} |
| 21 }; | 22 }; |
| 22 typedef ImplicitString Error; | 23 typedef ImplicitString Error; |
| 23 typedef ImplicitString Name; | 24 typedef ImplicitString Name; |
| 24 typedef ImplicitString Path; | 25 typedef ImplicitString Path; |
| 25 | 26 |
| 26 struct Src { | 27 struct Src { |
| 27 // All Srcs must be thread safe. | 28 // All Srcs must be thread safe. |
| 28 virtual ~Src() {} | 29 virtual ~Src() {} |
| 29 virtual Error SK_WARN_UNUSED_RESULT draw(SkCanvas*) const = 0; | 30 virtual Error SK_WARN_UNUSED_RESULT draw(SkCanvas*) const = 0; |
| 30 virtual SkISize size() const = 0; | 31 virtual SkISize size() const = 0; |
| 31 virtual Name name() const = 0; | 32 virtual Name name() const = 0; |
| 32 }; | 33 }; |
| 33 | 34 |
| 34 struct Sink { | 35 struct Sink { |
| 35 virtual ~Sink() {} | 36 virtual ~Sink() {} |
| 36 // You may write to either the bitmap or stream. | 37 |
| 37 virtual Error SK_WARN_UNUSED_RESULT draw(const Src&, SkBitmap*, SkWStream*) const | 38 Error SK_WARN_UNUSED_RESULT draw(const Src& src, SkBitmap* bmp, SkWStream* s tream) const { |
| 38 = 0; | 39 fVerboseLog.reset(); |
| 40 return this->onDraw(src, bmp, stream); | |
| 41 } | |
| 42 | |
| 39 // Sinks in the same enclave (except kAnyThread_Enclave) will run serially o n the same thread. | 43 // Sinks in the same enclave (except kAnyThread_Enclave) will run serially o n the same thread. |
| 40 virtual int enclave() const = 0; | 44 virtual int enclave() const = 0; |
| 41 | 45 |
| 42 // File extension for the content draw() outputs, e.g. "png", "pdf". | 46 // File extension for the content draw() outputs, e.g. "png", "pdf". |
| 43 virtual const char* fileExtension() const = 0; | 47 virtual const char* fileExtension() const = 0; |
| 48 | |
| 49 const SkString& verboseLog() const { return fVerboseLog; } | |
| 50 | |
| 51 protected: | |
| 52 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
| |
| 53 | |
| 54 private: | |
| 55 // You may write to either the bitmap or stream. | |
| 56 virtual Error SK_WARN_UNUSED_RESULT onDraw(const Src&, SkBitmap*, SkWStream* ) const = 0; | |
| 44 }; | 57 }; |
| 45 | 58 |
| 46 enum { kAnyThread_Enclave, kGPU_Enclave, kPDFSink_Enclave }; | 59 enum { kAnyThread_Enclave, kGPU_Enclave, kPDFSink_Enclave }; |
| 47 static const int kNumEnclaves = kPDFSink_Enclave + 1; | 60 static const int kNumEnclaves = kPDFSink_Enclave + 1; |
| 48 | 61 |
| 49 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ | 62 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ |
| 50 | 63 |
| 51 class GMSrc : public Src { | 64 class GMSrc : public Src { |
| 52 public: | 65 public: |
| 53 explicit GMSrc(skiagm::GMRegistry::Factory); | 66 explicit GMSrc(skiagm::GMRegistry::Factory); |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 83 private: | 96 private: |
| 84 Path fPath; | 97 Path fPath; |
| 85 }; | 98 }; |
| 86 | 99 |
| 87 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ | 100 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ |
| 88 | 101 |
| 89 class GPUSink : public Sink { | 102 class GPUSink : public Sink { |
| 90 public: | 103 public: |
| 91 GPUSink(GrContextFactory::GLContextType, GrGLStandard, int samples, bool dfT ext, bool threaded); | 104 GPUSink(GrContextFactory::GLContextType, GrGLStandard, int samples, bool dfT ext, bool threaded); |
| 92 | 105 |
| 93 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | |
| 94 int enclave() const SK_OVERRIDE; | 106 int enclave() const SK_OVERRIDE; |
| 95 const char* fileExtension() const SK_OVERRIDE { return "png"; } | 107 const char* fileExtension() const SK_OVERRIDE { return "png"; } |
| 96 private: | 108 private: |
| 109 Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | |
| 110 | |
| 97 GrContextFactory::GLContextType fContextType; | 111 GrContextFactory::GLContextType fContextType; |
| 98 GrGLStandard fGpuAPI; | 112 GrGLStandard fGpuAPI; |
| 99 int fSampleCount; | 113 int fSampleCount; |
| 100 bool fUseDFText; | 114 bool fUseDFText; |
| 101 bool fThreaded; | 115 bool fThreaded; |
| 102 }; | 116 }; |
| 103 | 117 |
| 104 class PDFSink : public Sink { | 118 class PDFSink : public Sink { |
| 105 public: | 119 public: |
| 106 PDFSink(); | 120 PDFSink(); |
| 107 | 121 |
| 108 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | |
| 109 int enclave() const SK_OVERRIDE { return kPDFSink_Enclave; } | 122 int enclave() const SK_OVERRIDE { return kPDFSink_Enclave; } |
| 110 const char* fileExtension() const SK_OVERRIDE { return "pdf"; } | 123 const char* fileExtension() const SK_OVERRIDE { return "pdf"; } |
| 124 private: | |
| 125 Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | |
| 111 }; | 126 }; |
| 112 | 127 |
| 113 class RasterSink : public Sink { | 128 class RasterSink : public Sink { |
| 114 public: | 129 public: |
| 115 explicit RasterSink(SkColorType); | 130 explicit RasterSink(SkColorType); |
| 116 | 131 |
| 117 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | |
| 118 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } | 132 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } |
| 119 const char* fileExtension() const SK_OVERRIDE { return "png"; } | 133 const char* fileExtension() const SK_OVERRIDE { return "png"; } |
| 120 private: | 134 private: |
| 135 Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | |
| 136 | |
| 121 SkColorType fColorType; | 137 SkColorType fColorType; |
| 122 }; | 138 }; |
| 123 | 139 |
| 124 class SKPSink : public Sink { | 140 class SKPSink : public Sink { |
| 125 public: | 141 public: |
| 126 SKPSink(); | 142 SKPSink(); |
| 127 | 143 |
| 128 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | |
| 129 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } | 144 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } |
| 130 const char* fileExtension() const SK_OVERRIDE { return "skp"; } | 145 const char* fileExtension() const SK_OVERRIDE { return "skp"; } |
| 146 private: | |
| 147 Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | |
| 131 }; | 148 }; |
| 132 | 149 |
| 133 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ | 150 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ |
| 134 | 151 |
| 135 class ViaMatrix : public Sink { | 152 class ViaMatrix : public Sink { |
| 136 public: | 153 public: |
| 137 ViaMatrix(SkMatrix, Sink*); | 154 ViaMatrix(SkMatrix, Sink*); |
| 138 | 155 |
| 139 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | |
| 140 int enclave() const SK_OVERRIDE { return fSink->enclave(); } | 156 int enclave() const SK_OVERRIDE { return fSink->enclave(); } |
| 141 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension( ); } | 157 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension( ); } |
| 142 private: | 158 private: |
| 159 Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | |
| 143 SkMatrix fMatrix; | 160 SkMatrix fMatrix; |
| 144 SkAutoTDelete<Sink> fSink; | 161 SkAutoTDelete<Sink> fSink; |
| 145 }; | 162 }; |
| 146 | 163 |
| 147 class ViaPipe : public Sink { | 164 class ViaPipe : public Sink { |
| 148 public: | 165 public: |
| 149 explicit ViaPipe(Sink*); | 166 explicit ViaPipe(Sink*); |
| 150 | 167 |
| 151 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | |
| 152 int enclave() const SK_OVERRIDE { return fSink->enclave(); } | 168 int enclave() const SK_OVERRIDE { return fSink->enclave(); } |
| 153 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension( ); } | 169 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension( ); } |
| 154 private: | 170 private: |
| 171 Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | |
| 155 SkAutoTDelete<Sink> fSink; | 172 SkAutoTDelete<Sink> fSink; |
| 156 }; | 173 }; |
| 157 | 174 |
| 158 class ViaSerialization : public Sink { | 175 class ViaSerialization : public Sink { |
| 159 public: | 176 public: |
| 160 explicit ViaSerialization(Sink*); | 177 explicit ViaSerialization(Sink*); |
| 161 | 178 |
| 162 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | |
| 163 int enclave() const SK_OVERRIDE { return fSink->enclave(); } | 179 int enclave() const SK_OVERRIDE { return fSink->enclave(); } |
| 164 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension( ); } | 180 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension( ); } |
| 165 private: | 181 private: |
| 182 Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | |
| 183 | |
| 166 SkAutoTDelete<Sink> fSink; | 184 SkAutoTDelete<Sink> fSink; |
| 167 }; | 185 }; |
| 168 | 186 |
| 169 class ViaTiles : public Sink { | 187 class ViaTiles : public Sink { |
| 170 public: | 188 public: |
| 171 ViaTiles(int w, int h, SkBBHFactory*, Sink*); | 189 ViaTiles(int w, int h, SkBBHFactory*, Sink*); |
| 172 | 190 |
| 173 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | |
| 174 int enclave() const SK_OVERRIDE { return fSink->enclave(); } | 191 int enclave() const SK_OVERRIDE { return fSink->enclave(); } |
| 175 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension( ); } | 192 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension( ); } |
| 176 private: | 193 private: |
| 194 Error onDraw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | |
| 195 | |
| 177 const int fW, fH; | 196 const int fW, fH; |
| 178 SkAutoTDelete<SkBBHFactory> fFactory; | 197 SkAutoTDelete<SkBBHFactory> fFactory; |
| 179 SkAutoTDelete<Sink> fSink; | 198 SkAutoTDelete<Sink> fSink; |
| 180 }; | 199 }; |
| 181 | 200 |
| 182 class NullSink : public Sink { | 201 class NullSink : public Sink { |
| 183 public: | 202 public: |
| 184 Error draw(const Src& src, SkBitmap*, SkWStream* out) const SK_OVERRIDE { | 203 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } |
| 204 const char* fileExtension() const SK_OVERRIDE { return ""; } | |
| 205 private: | |
| 206 Error onDraw(const Src& src, SkBitmap*, SkWStream* out) const SK_OVERRIDE { | |
| 185 return src.draw(SkCreateNullCanvas()); | 207 return src.draw(SkCreateNullCanvas()); |
| 186 } | 208 } |
| 187 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } | |
| 188 const char* fileExtension() const SK_OVERRIDE { return ""; } | |
| 189 }; | 209 }; |
| 190 | 210 |
| 191 } // namespace DM | 211 } // namespace DM |
| 192 | 212 |
| 193 #endif//DMSrcSink_DEFINED | 213 #endif//DMSrcSink_DEFINED |
| OLD | NEW |