Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Side by Side Diff: dm/DMSrcSink.h

Issue 1675423002: dm: simplify parallel/serial decisions (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « dm/DM.cpp ('k') | dm/DMSrcSink.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « dm/DM.cpp ('k') | dm/DMSrcSink.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698