diff options
Diffstat (limited to 'chromium/third_party/skia/dm/DMSrcSink.h')
-rw-r--r-- | chromium/third_party/skia/dm/DMSrcSink.h | 52 |
1 files changed, 34 insertions, 18 deletions
diff --git a/chromium/third_party/skia/dm/DMSrcSink.h b/chromium/third_party/skia/dm/DMSrcSink.h index 3dd109b4f66..184841a91e6 100644 --- a/chromium/third_party/skia/dm/DMSrcSink.h +++ b/chromium/third_party/skia/dm/DMSrcSink.h @@ -9,7 +9,6 @@ #define DMSrcSink_DEFINED #include "gm/gm.h" -#include "include/android/SkBitmapRegionDecoder.h" #include "include/core/SkBBHFactory.h" #include "include/core/SkBitmap.h" #include "include/core/SkCanvas.h" @@ -87,15 +86,15 @@ struct SinkFlags { struct Src { virtual ~Src() {} - virtual Result SK_WARN_UNUSED_RESULT draw(SkCanvas*) const = 0; + virtual Result SK_WARN_UNUSED_RESULT draw(GrContext*, 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; } virtual int pageCount() const { return 1; } - virtual Result SK_WARN_UNUSED_RESULT draw(int, SkCanvas* canvas) const { - return this->draw(canvas); + virtual Result SK_WARN_UNUSED_RESULT draw(int, GrContext* context, SkCanvas* canvas) const { + return this->draw(context, canvas); } virtual SkISize size(int) const { return this->size(); } // Force Tasks using this Src to run on the main thread? @@ -131,7 +130,7 @@ class GMSrc : public Src { public: explicit GMSrc(skiagm::GMFactory); - Result draw(SkCanvas*) const override; + Result draw(GrContext*, SkCanvas*) const override; SkISize size() const override; Name name() const override; void modifyGrContextOptions(GrContextOptions* options) const override; @@ -163,7 +162,7 @@ public: }; CodecSrc(Path, Mode, DstColorType, SkAlphaType, float); - Result draw(SkCanvas*) const override; + Result draw(GrContext*, SkCanvas*) const override; SkISize size() const override; Name name() const override; bool veto(SinkFlags) const override; @@ -181,7 +180,7 @@ class AndroidCodecSrc : public Src { public: AndroidCodecSrc(Path, CodecSrc::DstColorType, SkAlphaType, int sampleSize); - Result draw(SkCanvas*) const override; + Result draw(GrContext*, SkCanvas*) const override; SkISize size() const override; Name name() const override; bool veto(SinkFlags) const override; @@ -194,6 +193,7 @@ private: bool fRunSerially; }; +#ifdef SK_ENABLE_ANDROID_UTILS // Allows for testing of various implementations of Android's BitmapRegionDecoder class BRDSrc : public Src { public: @@ -209,7 +209,7 @@ public: BRDSrc(Path, Mode, CodecSrc::DstColorType, uint32_t); - Result draw(SkCanvas*) const override; + Result draw(GrContext*, SkCanvas*) const override; SkISize size() const override; Name name() const override; bool veto(SinkFlags) const override; @@ -219,6 +219,7 @@ private: CodecSrc::DstColorType fDstColorType; uint32_t fSampleSize; }; +#endif class ImageGenSrc : public Src { public: @@ -228,7 +229,7 @@ public: }; ImageGenSrc(Path, Mode, SkAlphaType, bool); - Result draw(SkCanvas*) const override; + Result draw(GrContext*, SkCanvas*) const override; SkISize size() const override; Name name() const override; bool veto(SinkFlags) const override; @@ -245,7 +246,7 @@ class ColorCodecSrc : public Src { public: ColorCodecSrc(Path, bool decode_to_dst); - Result draw(SkCanvas*) const override; + Result draw(GrContext*, SkCanvas*) const override; SkISize size() const override; Name name() const override; bool veto(SinkFlags) const override; @@ -258,7 +259,7 @@ class SKPSrc : public Src { public: explicit SKPSrc(Path path); - Result draw(SkCanvas*) const override; + Result draw(GrContext*, SkCanvas*) const override; SkISize size() const override; Name name() const override; private: @@ -272,7 +273,7 @@ class BisectSrc : public SKPSrc { public: explicit BisectSrc(Path path, const char* trail); - Result draw(SkCanvas*) const override; + Result draw(GrContext*, SkCanvas*) const override; private: SkString fTrail; @@ -286,7 +287,7 @@ class SkottieSrc final : public Src { public: explicit SkottieSrc(Path path); - Result draw(SkCanvas*) const override; + Result draw(GrContext*, SkCanvas*) const override; SkISize size() const override; Name name() const override; bool veto(SinkFlags) const override; @@ -314,7 +315,7 @@ class SVGSrc : public Src { public: explicit SVGSrc(Path path); - Result draw(SkCanvas*) const override; + Result draw(GrContext*, SkCanvas*) const override; SkISize size() const override; Name name() const override; bool veto(SinkFlags) const override; @@ -334,8 +335,8 @@ public: explicit MSKPSrc(Path path); int pageCount() const override; - Result draw(SkCanvas* c) const override; - Result draw(int, SkCanvas*) const override; + Result draw(GrContext*, SkCanvas* c) const override; + Result draw(int, GrContext*, SkCanvas*) const override; SkISize size() const override; SkISize size(int) const override; Name name() const override; @@ -450,6 +451,21 @@ private: typedef GPUSink INHERITED; }; +// This sink attempts to emulate Chrome's OOP-R behavior. It: +// doesn't use promise images +// uses only a single thread for both DDL creation & drawing +class GPUOOPRSink : public GPUSink { +public: + GPUOOPRSink(const SkCommandLineConfigGpu*, const GrContextOptions&); + + Result draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; + +private: + Result ooprDraw(const Src&, sk_sp<SkSurface> dstSurface, GrContext*) const; + + typedef GPUSink INHERITED; +}; + // This sink attempts to better simulate the Chrome DDL use-case. It: // creates the DDLs on separate recording threads // performs all the GPU work on a separate GPU thread @@ -472,8 +488,8 @@ private: sk_gpu_test::TestContext* gpuTestCtx, GrContext* gpuThreadCtx) const; - std::unique_ptr<SkExecutor> fRecordingThreadPool; - std::unique_ptr<SkExecutor> fGPUThread; + std::unique_ptr<SkExecutor> fRecordingExecutor; + std::unique_ptr<SkExecutor> fGPUExecutor; typedef GPUSink INHERITED; }; |