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 |