diff options
author | mtklein <mtklein@chromium.org> | 2016-02-08 12:39:59 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-08 12:39:59 -0800 |
commit | 21eaf3b00aa23ec352b595d5c54dd2c0faa0b0c6 (patch) | |
tree | ae55f8b64ecc2e98c05af21584ecc2817f7ea206 /dm/DMSrcSink.h | |
parent | 5909c3ad1380d39e41855080c0b292a1d6b9a0b9 (diff) |
dm: simplify parallel/serial decisions
- instead of complicated enclaves, just allow parallel or main thread serial
- either the Src or the Sink can force the task to go serial
ALSO,
- simpler file extension parsing
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1675423002
Review URL: https://codereview.chromium.org/1675423002
Diffstat (limited to 'dm/DMSrcSink.h')
-rw-r--r-- | dm/DMSrcSink.h | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/dm/DMSrcSink.h b/dm/DMSrcSink.h index 3a7d4ee516..64897d20bc 100644 --- a/dm/DMSrcSink.h +++ b/dm/DMSrcSink.h @@ -59,13 +59,15 @@ struct SinkFlags { }; struct Src { - // All Srcs must be thread safe. virtual ~Src() {} virtual Error SK_WARN_UNUSED_RESULT draw(SkCanvas*) const = 0; virtual SkISize size() const = 0; virtual Name name() const = 0; virtual void modifyGrContextOptions(GrContextOptions* options) const {} virtual bool veto(SinkFlags) const { return false; } + + // Force Tasks using this Src to run on the main thread? + virtual bool serial() const { return false; } }; struct Sink { @@ -73,8 +75,9 @@ struct Sink { // You may write to either the bitmap or stream. If you write to log, we'll print that out. virtual Error SK_WARN_UNUSED_RESULT draw(const Src&, SkBitmap*, SkWStream*, SkString* log) const = 0; - // Sinks in the same enclave (except kAnyThread_Enclave) will run serially on the same thread. - virtual int enclave() const = 0; + + // Force Tasks using this Sink to run on the main thread? + virtual bool serial() const { return false; } // File extension for the content draw() outputs, e.g. "png", "pdf". virtual const char* fileExtension() const = 0; @@ -82,9 +85,6 @@ struct Sink { virtual SinkFlags flags() const = 0; }; -enum { kAnyThread_Enclave, kGPU_Enclave }; -static const int kNumEnclaves = kGPU_Enclave + 1; - /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ class GMSrc : public Src { @@ -200,7 +200,6 @@ public: NullSink() {} Error draw(const Src& src, SkBitmap*, SkWStream*, SkString*) const override; - int enclave() const override { return kAnyThread_Enclave; } const char* fileExtension() const override { return ""; } SinkFlags flags() const override { return SinkFlags{ SinkFlags::kNull, SinkFlags::kDirect }; } }; @@ -212,7 +211,7 @@ public: int samples, bool diText, bool threaded); Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; - int enclave() const override; + bool serial() const override { return !fThreaded; } const char* fileExtension() const override { return "png"; } SinkFlags flags() const override { return SinkFlags{ SinkFlags::kGPU, SinkFlags::kDirect }; } private: @@ -228,7 +227,6 @@ public: PDFSink(const char* rasterizer); Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; - int enclave() const override { return kAnyThread_Enclave; } const char* fileExtension() const override { return "pdf"; } SinkFlags flags() const override { return SinkFlags{ SinkFlags::kVector, SinkFlags::kDirect }; } private: @@ -240,7 +238,6 @@ public: XPSSink(); Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; - int enclave() const override { return kAnyThread_Enclave; } const char* fileExtension() const override { return "xps"; } SinkFlags flags() const override { return SinkFlags{ SinkFlags::kVector, SinkFlags::kDirect }; } }; @@ -250,7 +247,6 @@ public: explicit RasterSink(SkColorType); Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; - int enclave() const override { return kAnyThread_Enclave; } const char* fileExtension() const override { return "png"; } SinkFlags flags() const override { return SinkFlags{ SinkFlags::kRaster, SinkFlags::kDirect }; } private: @@ -262,7 +258,6 @@ public: SKPSink(); Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; - int enclave() const override { return kAnyThread_Enclave; } const char* fileExtension() const override { return "skp"; } SinkFlags flags() const override { return SinkFlags{ SinkFlags::kVector, SinkFlags::kDirect }; } }; @@ -272,7 +267,6 @@ public: SVGSink(); Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; - int enclave() const override { return kAnyThread_Enclave; } const char* fileExtension() const override { return "svg"; } SinkFlags flags() const override { return SinkFlags{ SinkFlags::kVector, SinkFlags::kDirect }; } }; @@ -284,7 +278,7 @@ class Via : public Sink { public: explicit Via(Sink* sink) : fSink(sink) {} const char* fileExtension() const override { return fSink->fileExtension(); } - int enclave() const override { return fSink->enclave(); } + bool serial() const override { return fSink->serial(); } SinkFlags flags() const override { SinkFlags flags = fSink->flags(); flags.approach = SinkFlags::kIndirect; |