| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #ifndef DMSrcSink_DEFINED | 8 #ifndef DMSrcSink_DEFINED |
| 9 #define DMSrcSink_DEFINED | 9 #define DMSrcSink_DEFINED |
| 10 | 10 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 SkString fMsg; | 52 SkString fMsg; |
| 53 bool fFatal; | 53 bool fFatal; |
| 54 }; | 54 }; |
| 55 | 55 |
| 56 struct SinkFlags { | 56 struct SinkFlags { |
| 57 enum { kNull, kGPU, kVector, kRaster } type; | 57 enum { kNull, kGPU, kVector, kRaster } type; |
| 58 enum { kDirect, kIndirect } approach; | 58 enum { kDirect, kIndirect } approach; |
| 59 }; | 59 }; |
| 60 | 60 |
| 61 struct Src { | 61 struct Src { |
| 62 // All Srcs must be thread safe. | |
| 63 virtual ~Src() {} | 62 virtual ~Src() {} |
| 64 virtual Error SK_WARN_UNUSED_RESULT draw(SkCanvas*) const = 0; | 63 virtual Error SK_WARN_UNUSED_RESULT draw(SkCanvas*) const = 0; |
| 65 virtual SkISize size() const = 0; | 64 virtual SkISize size() const = 0; |
| 66 virtual Name name() const = 0; | 65 virtual Name name() const = 0; |
| 67 virtual void modifyGrContextOptions(GrContextOptions* options) const {} | 66 virtual void modifyGrContextOptions(GrContextOptions* options) const {} |
| 68 virtual bool veto(SinkFlags) const { return false; } | 67 virtual bool veto(SinkFlags) const { return false; } |
| 68 |
| 69 // Force Tasks using this Src to run on the main thread? |
| 70 virtual bool serial() const { return false; } |
| 69 }; | 71 }; |
| 70 | 72 |
| 71 struct Sink { | 73 struct Sink { |
| 72 virtual ~Sink() {} | 74 virtual ~Sink() {} |
| 73 // You may write to either the bitmap or stream. If you write to log, we'll
print that out. | 75 // You may write to either the bitmap or stream. If you write to log, we'll
print that out. |
| 74 virtual Error SK_WARN_UNUSED_RESULT draw(const Src&, SkBitmap*, SkWStream*,
SkString* log) | 76 virtual Error SK_WARN_UNUSED_RESULT draw(const Src&, SkBitmap*, SkWStream*,
SkString* log) |
| 75 const = 0; | 77 const = 0; |
| 76 // Sinks in the same enclave (except kAnyThread_Enclave) will run serially o
n the same thread. | 78 |
| 77 virtual int enclave() const = 0; | 79 // Force Tasks using this Sink to run on the main thread? |
| 80 virtual bool serial() const { return false; } |
| 78 | 81 |
| 79 // File extension for the content draw() outputs, e.g. "png", "pdf". | 82 // File extension for the content draw() outputs, e.g. "png", "pdf". |
| 80 virtual const char* fileExtension() const = 0; | 83 virtual const char* fileExtension() const = 0; |
| 81 | 84 |
| 82 virtual SinkFlags flags() const = 0; | 85 virtual SinkFlags flags() const = 0; |
| 83 }; | 86 }; |
| 84 | 87 |
| 85 enum { kAnyThread_Enclave, kGPU_Enclave }; | |
| 86 static const int kNumEnclaves = kGPU_Enclave + 1; | |
| 87 | |
| 88 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 88 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
| 89 | 89 |
| 90 class GMSrc : public Src { | 90 class GMSrc : public Src { |
| 91 public: | 91 public: |
| 92 explicit GMSrc(skiagm::GMRegistry::Factory); | 92 explicit GMSrc(skiagm::GMRegistry::Factory); |
| 93 | 93 |
| 94 Error draw(SkCanvas*) const override; | 94 Error draw(SkCanvas*) const override; |
| 95 SkISize size() const override; | 95 SkISize size() const override; |
| 96 Name name() const override; | 96 Name name() const override; |
| 97 void modifyGrContextOptions(GrContextOptions* options) const override; | 97 void modifyGrContextOptions(GrContextOptions* options) const override; |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 Path fPath; | 193 Path fPath; |
| 194 }; | 194 }; |
| 195 | 195 |
| 196 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 196 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
| 197 | 197 |
| 198 class NullSink : public Sink { | 198 class NullSink : public Sink { |
| 199 public: | 199 public: |
| 200 NullSink() {} | 200 NullSink() {} |
| 201 | 201 |
| 202 Error draw(const Src& src, SkBitmap*, SkWStream*, SkString*) const override; | 202 Error draw(const Src& src, SkBitmap*, SkWStream*, SkString*) const override; |
| 203 int enclave() const override { return kAnyThread_Enclave; } | |
| 204 const char* fileExtension() const override { return ""; } | 203 const char* fileExtension() const override { return ""; } |
| 205 SinkFlags flags() const override { return SinkFlags{ SinkFlags::kNull, SinkF
lags::kDirect }; } | 204 SinkFlags flags() const override { return SinkFlags{ SinkFlags::kNull, SinkF
lags::kDirect }; } |
| 206 }; | 205 }; |
| 207 | 206 |
| 208 | 207 |
| 209 class GPUSink : public Sink { | 208 class GPUSink : public Sink { |
| 210 public: | 209 public: |
| 211 GPUSink(GrContextFactory::GLContextType, GrContextFactory::GLContextOptions, | 210 GPUSink(GrContextFactory::GLContextType, GrContextFactory::GLContextOptions, |
| 212 int samples, bool diText, bool threaded); | 211 int samples, bool diText, bool threaded); |
| 213 | 212 |
| 214 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; | 213 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; |
| 215 int enclave() const override; | 214 bool serial() const override { return !fThreaded; } |
| 216 const char* fileExtension() const override { return "png"; } | 215 const char* fileExtension() const override { return "png"; } |
| 217 SinkFlags flags() const override { return SinkFlags{ SinkFlags::kGPU, SinkFl
ags::kDirect }; } | 216 SinkFlags flags() const override { return SinkFlags{ SinkFlags::kGPU, SinkFl
ags::kDirect }; } |
| 218 private: | 217 private: |
| 219 GrContextFactory::GLContextType fContextType; | 218 GrContextFactory::GLContextType fContextType; |
| 220 GrContextFactory::GLContextOptions fContextOptions; | 219 GrContextFactory::GLContextOptions fContextOptions; |
| 221 int fSampleCount; | 220 int fSampleCount; |
| 222 bool fUseDIText; | 221 bool fUseDIText; |
| 223 bool fThreaded; | 222 bool fThreaded; |
| 224 }; | 223 }; |
| 225 | 224 |
| 226 class PDFSink : public Sink { | 225 class PDFSink : public Sink { |
| 227 public: | 226 public: |
| 228 PDFSink(const char* rasterizer); | 227 PDFSink(const char* rasterizer); |
| 229 | 228 |
| 230 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; | 229 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; |
| 231 int enclave() const override { return kAnyThread_Enclave; } | |
| 232 const char* fileExtension() const override { return "pdf"; } | 230 const char* fileExtension() const override { return "pdf"; } |
| 233 SinkFlags flags() const override { return SinkFlags{ SinkFlags::kVector, Sin
kFlags::kDirect }; } | 231 SinkFlags flags() const override { return SinkFlags{ SinkFlags::kVector, Sin
kFlags::kDirect }; } |
| 234 private: | 232 private: |
| 235 const char* fRasterizer; | 233 const char* fRasterizer; |
| 236 }; | 234 }; |
| 237 | 235 |
| 238 class XPSSink : public Sink { | 236 class XPSSink : public Sink { |
| 239 public: | 237 public: |
| 240 XPSSink(); | 238 XPSSink(); |
| 241 | 239 |
| 242 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; | 240 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; |
| 243 int enclave() const override { return kAnyThread_Enclave; } | |
| 244 const char* fileExtension() const override { return "xps"; } | 241 const char* fileExtension() const override { return "xps"; } |
| 245 SinkFlags flags() const override { return SinkFlags{ SinkFlags::kVector, Sin
kFlags::kDirect }; } | 242 SinkFlags flags() const override { return SinkFlags{ SinkFlags::kVector, Sin
kFlags::kDirect }; } |
| 246 }; | 243 }; |
| 247 | 244 |
| 248 class RasterSink : public Sink { | 245 class RasterSink : public Sink { |
| 249 public: | 246 public: |
| 250 explicit RasterSink(SkColorType); | 247 explicit RasterSink(SkColorType); |
| 251 | 248 |
| 252 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; | 249 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; |
| 253 int enclave() const override { return kAnyThread_Enclave; } | |
| 254 const char* fileExtension() const override { return "png"; } | 250 const char* fileExtension() const override { return "png"; } |
| 255 SinkFlags flags() const override { return SinkFlags{ SinkFlags::kRaster, Sin
kFlags::kDirect }; } | 251 SinkFlags flags() const override { return SinkFlags{ SinkFlags::kRaster, Sin
kFlags::kDirect }; } |
| 256 private: | 252 private: |
| 257 SkColorType fColorType; | 253 SkColorType fColorType; |
| 258 }; | 254 }; |
| 259 | 255 |
| 260 class SKPSink : public Sink { | 256 class SKPSink : public Sink { |
| 261 public: | 257 public: |
| 262 SKPSink(); | 258 SKPSink(); |
| 263 | 259 |
| 264 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; | 260 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; |
| 265 int enclave() const override { return kAnyThread_Enclave; } | |
| 266 const char* fileExtension() const override { return "skp"; } | 261 const char* fileExtension() const override { return "skp"; } |
| 267 SinkFlags flags() const override { return SinkFlags{ SinkFlags::kVector, Sin
kFlags::kDirect }; } | 262 SinkFlags flags() const override { return SinkFlags{ SinkFlags::kVector, Sin
kFlags::kDirect }; } |
| 268 }; | 263 }; |
| 269 | 264 |
| 270 class SVGSink : public Sink { | 265 class SVGSink : public Sink { |
| 271 public: | 266 public: |
| 272 SVGSink(); | 267 SVGSink(); |
| 273 | 268 |
| 274 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; | 269 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; |
| 275 int enclave() const override { return kAnyThread_Enclave; } | |
| 276 const char* fileExtension() const override { return "svg"; } | 270 const char* fileExtension() const override { return "svg"; } |
| 277 SinkFlags flags() const override { return SinkFlags{ SinkFlags::kVector, Sin
kFlags::kDirect }; } | 271 SinkFlags flags() const override { return SinkFlags{ SinkFlags::kVector, Sin
kFlags::kDirect }; } |
| 278 }; | 272 }; |
| 279 | 273 |
| 280 | 274 |
| 281 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 275 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
| 282 | 276 |
| 283 class Via : public Sink { | 277 class Via : public Sink { |
| 284 public: | 278 public: |
| 285 explicit Via(Sink* sink) : fSink(sink) {} | 279 explicit Via(Sink* sink) : fSink(sink) {} |
| 286 const char* fileExtension() const override { return fSink->fileExtension();
} | 280 const char* fileExtension() const override { return fSink->fileExtension();
} |
| 287 int enclave() const override { return fSink->enclave(); } | 281 bool serial() const override { return fSink->serial(); } |
| 288 SinkFlags flags() const override { | 282 SinkFlags flags() const override { |
| 289 SinkFlags flags = fSink->flags(); | 283 SinkFlags flags = fSink->flags(); |
| 290 flags.approach = SinkFlags::kIndirect; | 284 flags.approach = SinkFlags::kIndirect; |
| 291 return flags; | 285 return flags; |
| 292 } | 286 } |
| 293 protected: | 287 protected: |
| 294 SkAutoTDelete<Sink> fSink; | 288 SkAutoTDelete<Sink> fSink; |
| 295 }; | 289 }; |
| 296 | 290 |
| 297 class ViaMatrix : public Via { | 291 class ViaMatrix : public Via { |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 359 | 353 |
| 360 class ViaMojo : public Via { | 354 class ViaMojo : public Via { |
| 361 public: | 355 public: |
| 362 explicit ViaMojo(Sink* sink) : Via(sink) {} | 356 explicit ViaMojo(Sink* sink) : Via(sink) {} |
| 363 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; | 357 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; |
| 364 }; | 358 }; |
| 365 | 359 |
| 366 } // namespace DM | 360 } // namespace DM |
| 367 | 361 |
| 368 #endif//DMSrcSink_DEFINED | 362 #endif//DMSrcSink_DEFINED |
| OLD | NEW |