From 70cdb396eb5ffbbed128b902532e9292b5ec0e9d Mon Sep 17 00:00:00 2001 From: Mike Reed Date: Mon, 3 Oct 2016 15:44:23 -0400 Subject: Revert "Revert "replace SkXfermode obj with SkBlendMode enum in paints"" This reverts commit ce02e7175872abde3721df9e5d3ec0ab8384cd8e. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2878 Change-Id: I86875511a13497112827cbaed1dbd7639e9e3d10 Reviewed-on: https://skia-review.googlesource.com/2878 Reviewed-by: Matt Sarett Commit-Queue: Mike Reed --- bench/RectBench.cpp | 8 ++-- bench/RotatedRectBench.cpp | 82 +++++++++++++++++++------------------- bench/XfermodeBench.cpp | 99 +++++++++++++++++----------------------------- 3 files changed, 82 insertions(+), 107 deletions(-) (limited to 'bench') diff --git a/bench/RectBench.cpp b/bench/RectBench.cpp index 46a515de29..48764cabdf 100644 --- a/bench/RectBench.cpp +++ b/bench/RectBench.cpp @@ -85,7 +85,7 @@ private: class SrcModeRectBench : public RectBench { public: SrcModeRectBench() : INHERITED(1, 0) { - fMode = SkXfermode::Make(SkXfermode::kSrc_Mode); + fMode = SkBlendMode::kSrc; } protected: @@ -93,7 +93,7 @@ protected: this->INHERITED::setupPaint(paint); // srcmode is most interesting when we're not opaque paint->setAlpha(0x80); - paint->setXfermode(fMode); + paint->setBlendMode(fMode); } const char* onGetName() override { @@ -103,8 +103,8 @@ protected: } private: - SkString fName; - sk_sp fMode; + SkString fName; + SkBlendMode fMode; typedef RectBench INHERITED; }; diff --git a/bench/RotatedRectBench.cpp b/bench/RotatedRectBench.cpp index 23e044330c..f81bfb1d10 100644 --- a/bench/RotatedRectBench.cpp +++ b/bench/RotatedRectBench.cpp @@ -67,7 +67,7 @@ static SkString to_lower(const char* str) { class RotRectBench: public Benchmark { public: - RotRectBench(bool aa, ColorType ct, SkXfermode::Mode mode) + RotRectBench(bool aa, ColorType ct, SkBlendMode mode) : fAA(aa) , fColorType(ct) , fMode(mode) { @@ -80,7 +80,7 @@ protected: void onDraw(int loops, SkCanvas* canvas) override { SkPaint paint; paint.setAntiAlias(fAA); - paint.setXfermodeMode(fMode); + paint.setBlendMode(fMode); SkColor color = start_color(fColorType); int w = this->getSize().x(); @@ -147,48 +147,48 @@ private: fName.appendf("_%s", to_lower(SkXfermode::ModeName(fMode)).c_str()); } - bool fAA; - ColorType fColorType; - SkXfermode::Mode fMode; - SkString fName; + bool fAA; + ColorType fColorType; + SkBlendMode fMode; + SkString fName; typedef Benchmark INHERITED; }; // Choose kSrcOver because it always allows coverage and alpha to be conflated. kSrc only allows // conflation when opaque, and kDarken because it isn't possilbe with standard GL blending. -DEF_BENCH(return new RotRectBench(true, kConstantOpaque_ColorType, SkXfermode::kSrcOver_Mode);) -DEF_BENCH(return new RotRectBench(true, kConstantTransparent_ColorType, SkXfermode::kSrcOver_Mode);) -DEF_BENCH(return new RotRectBench(true, kChangingOpaque_ColorType, SkXfermode::kSrcOver_Mode);) -DEF_BENCH(return new RotRectBench(true, kChangingTransparent_ColorType, SkXfermode::kSrcOver_Mode);) -DEF_BENCH(return new RotRectBench(true, kAlternatingOpaqueAndTransparent_ColorType, SkXfermode::kSrcOver_Mode);) - -DEF_BENCH(return new RotRectBench(false, kConstantOpaque_ColorType, SkXfermode::kSrcOver_Mode);) -DEF_BENCH(return new RotRectBench(false, kConstantTransparent_ColorType, SkXfermode::kSrcOver_Mode);) -DEF_BENCH(return new RotRectBench(false, kChangingOpaque_ColorType, SkXfermode::kSrcOver_Mode);) -DEF_BENCH(return new RotRectBench(false, kChangingTransparent_ColorType, SkXfermode::kSrcOver_Mode);) -DEF_BENCH(return new RotRectBench(false, kAlternatingOpaqueAndTransparent_ColorType, SkXfermode::kSrcOver_Mode);) - -DEF_BENCH(return new RotRectBench(true, kConstantOpaque_ColorType, SkXfermode::kSrc_Mode);) -DEF_BENCH(return new RotRectBench(true, kConstantTransparent_ColorType, SkXfermode::kSrc_Mode);) -DEF_BENCH(return new RotRectBench(true, kChangingOpaque_ColorType, SkXfermode::kSrc_Mode);) -DEF_BENCH(return new RotRectBench(true, kChangingTransparent_ColorType, SkXfermode::kSrc_Mode);) -DEF_BENCH(return new RotRectBench(true, kAlternatingOpaqueAndTransparent_ColorType, SkXfermode::kSrc_Mode);) - -DEF_BENCH(return new RotRectBench(false, kConstantOpaque_ColorType, SkXfermode::kSrc_Mode);) -DEF_BENCH(return new RotRectBench(false, kConstantTransparent_ColorType, SkXfermode::kSrc_Mode);) -DEF_BENCH(return new RotRectBench(false, kChangingOpaque_ColorType, SkXfermode::kSrc_Mode);) -DEF_BENCH(return new RotRectBench(false, kChangingTransparent_ColorType, SkXfermode::kSrc_Mode);) -DEF_BENCH(return new RotRectBench(false, kAlternatingOpaqueAndTransparent_ColorType, SkXfermode::kSrc_Mode);) - -DEF_BENCH(return new RotRectBench(true, kConstantOpaque_ColorType, SkXfermode::kDarken_Mode);) -DEF_BENCH(return new RotRectBench(true, kConstantTransparent_ColorType, SkXfermode::kDarken_Mode);) -DEF_BENCH(return new RotRectBench(true, kChangingOpaque_ColorType, SkXfermode::kDarken_Mode);) -DEF_BENCH(return new RotRectBench(true, kChangingTransparent_ColorType, SkXfermode::kDarken_Mode);) -DEF_BENCH(return new RotRectBench(true, kAlternatingOpaqueAndTransparent_ColorType, SkXfermode::kDarken_Mode);) - -DEF_BENCH(return new RotRectBench(false, kConstantOpaque_ColorType, SkXfermode::kDarken_Mode);) -DEF_BENCH(return new RotRectBench(false, kConstantTransparent_ColorType, SkXfermode::kDarken_Mode);) -DEF_BENCH(return new RotRectBench(false, kChangingOpaque_ColorType, SkXfermode::kDarken_Mode);) -DEF_BENCH(return new RotRectBench(false, kChangingTransparent_ColorType, SkXfermode::kDarken_Mode);) -DEF_BENCH(return new RotRectBench(false, kAlternatingOpaqueAndTransparent_ColorType, SkXfermode::kDarken_Mode);) +DEF_BENCH(return new RotRectBench(true, kConstantOpaque_ColorType, SkBlendMode::kSrcOver);) +DEF_BENCH(return new RotRectBench(true, kConstantTransparent_ColorType, SkBlendMode::kSrcOver);) +DEF_BENCH(return new RotRectBench(true, kChangingOpaque_ColorType, SkBlendMode::kSrcOver);) +DEF_BENCH(return new RotRectBench(true, kChangingTransparent_ColorType, SkBlendMode::kSrcOver);) +DEF_BENCH(return new RotRectBench(true, kAlternatingOpaqueAndTransparent_ColorType, SkBlendMode::kSrcOver);) + +DEF_BENCH(return new RotRectBench(false, kConstantOpaque_ColorType, SkBlendMode::kSrcOver);) +DEF_BENCH(return new RotRectBench(false, kConstantTransparent_ColorType, SkBlendMode::kSrcOver);) +DEF_BENCH(return new RotRectBench(false, kChangingOpaque_ColorType, SkBlendMode::kSrcOver);) +DEF_BENCH(return new RotRectBench(false, kChangingTransparent_ColorType, SkBlendMode::kSrcOver);) +DEF_BENCH(return new RotRectBench(false, kAlternatingOpaqueAndTransparent_ColorType, SkBlendMode::kSrcOver);) + +DEF_BENCH(return new RotRectBench(true, kConstantOpaque_ColorType, SkBlendMode::kSrc);) +DEF_BENCH(return new RotRectBench(true, kConstantTransparent_ColorType, SkBlendMode::kSrc);) +DEF_BENCH(return new RotRectBench(true, kChangingOpaque_ColorType, SkBlendMode::kSrc);) +DEF_BENCH(return new RotRectBench(true, kChangingTransparent_ColorType, SkBlendMode::kSrc);) +DEF_BENCH(return new RotRectBench(true, kAlternatingOpaqueAndTransparent_ColorType, SkBlendMode::kSrc);) + +DEF_BENCH(return new RotRectBench(false, kConstantOpaque_ColorType, SkBlendMode::kSrc);) +DEF_BENCH(return new RotRectBench(false, kConstantTransparent_ColorType, SkBlendMode::kSrc);) +DEF_BENCH(return new RotRectBench(false, kChangingOpaque_ColorType, SkBlendMode::kSrc);) +DEF_BENCH(return new RotRectBench(false, kChangingTransparent_ColorType, SkBlendMode::kSrc);) +DEF_BENCH(return new RotRectBench(false, kAlternatingOpaqueAndTransparent_ColorType, SkBlendMode::kSrc);) + +DEF_BENCH(return new RotRectBench(true, kConstantOpaque_ColorType, SkBlendMode::kDarken);) +DEF_BENCH(return new RotRectBench(true, kConstantTransparent_ColorType, SkBlendMode::kDarken);) +DEF_BENCH(return new RotRectBench(true, kChangingOpaque_ColorType, SkBlendMode::kDarken);) +DEF_BENCH(return new RotRectBench(true, kChangingTransparent_ColorType, SkBlendMode::kDarken);) +DEF_BENCH(return new RotRectBench(true, kAlternatingOpaqueAndTransparent_ColorType, SkBlendMode::kDarken);) + +DEF_BENCH(return new RotRectBench(false, kConstantOpaque_ColorType, SkBlendMode::kDarken);) +DEF_BENCH(return new RotRectBench(false, kConstantTransparent_ColorType, SkBlendMode::kDarken);) +DEF_BENCH(return new RotRectBench(false, kChangingOpaque_ColorType, SkBlendMode::kDarken);) +DEF_BENCH(return new RotRectBench(false, kChangingTransparent_ColorType, SkBlendMode::kDarken);) +DEF_BENCH(return new RotRectBench(false, kAlternatingOpaqueAndTransparent_ColorType, SkBlendMode::kDarken);) diff --git a/bench/XfermodeBench.cpp b/bench/XfermodeBench.cpp index 60879d603e..9e148d4317 100644 --- a/bench/XfermodeBench.cpp +++ b/bench/XfermodeBench.cpp @@ -15,10 +15,8 @@ // Benchmark that draws non-AA rects or AA text with an SkXfermode::Mode. class XfermodeBench : public Benchmark { public: - XfermodeBench(SkXfermode::Mode mode, bool aa) { - fXfermode = SkXfermode::Make(mode); + XfermodeBench(SkBlendMode mode, bool aa) : fBlendMode(mode) { fAA = aa; - SkASSERT(fXfermode.get() || SkXfermode::kSrcOver_Mode == mode); fName.printf("Xfermode_%s%s", SkXfermode::ModeName(mode), aa ? "_aa" : ""); } @@ -32,7 +30,7 @@ protected: SkRandom random; for (int i = 0; i < loops; ++i) { SkPaint paint; - paint.setXfermode(fXfermode); + paint.setBlendMode(fBlendMode); paint.setColor(random.nextU()); if (fAA) { // Draw text to exercise AA code paths. @@ -61,71 +59,48 @@ protected: } private: - sk_sp fXfermode; - SkString fName; - bool fAA; + SkBlendMode fBlendMode; + SkString fName; + bool fAA; typedef Benchmark INHERITED; }; -class XferCreateBench : public Benchmark { -public: - bool isSuitableFor(Backend backend) override { - return backend == kNonRendering_Backend; - } - -protected: - const char* onGetName() override { return "xfermode_create"; } - - void onDraw(int loops, SkCanvas* canvas) override { - for (int outer = 0; outer < loops * 10; ++outer) { - for (int i = 0; i <= SkXfermode::kLastMode; ++i) { - (void)SkXfermode::Make(SkXfermode::Mode(i)); - } - } - } - -private: - typedef Benchmark INHERITED; -}; - ////////////////////////////////////////////////////////////////////////////// #define BENCH(...) \ DEF_BENCH( return new XfermodeBench(__VA_ARGS__, true); ) \ DEF_BENCH( return new XfermodeBench(__VA_ARGS__, false); ) -BENCH(SkXfermode::kClear_Mode) -BENCH(SkXfermode::kSrc_Mode) -BENCH(SkXfermode::kDst_Mode) -BENCH(SkXfermode::kSrcOver_Mode) -BENCH(SkXfermode::kDstOver_Mode) -BENCH(SkXfermode::kSrcIn_Mode) -BENCH(SkXfermode::kDstIn_Mode) -BENCH(SkXfermode::kSrcOut_Mode) -BENCH(SkXfermode::kDstOut_Mode) -BENCH(SkXfermode::kSrcATop_Mode) -BENCH(SkXfermode::kDstATop_Mode) -BENCH(SkXfermode::kXor_Mode) - -BENCH(SkXfermode::kPlus_Mode) -BENCH(SkXfermode::kModulate_Mode) -BENCH(SkXfermode::kScreen_Mode) - -BENCH(SkXfermode::kOverlay_Mode) -BENCH(SkXfermode::kDarken_Mode) -BENCH(SkXfermode::kLighten_Mode) -BENCH(SkXfermode::kColorDodge_Mode) -BENCH(SkXfermode::kColorBurn_Mode) -BENCH(SkXfermode::kHardLight_Mode) -BENCH(SkXfermode::kSoftLight_Mode) -BENCH(SkXfermode::kDifference_Mode) -BENCH(SkXfermode::kExclusion_Mode) -BENCH(SkXfermode::kMultiply_Mode) - -BENCH(SkXfermode::kHue_Mode) -BENCH(SkXfermode::kSaturation_Mode) -BENCH(SkXfermode::kColor_Mode) -BENCH(SkXfermode::kLuminosity_Mode) - -DEF_BENCH(return new XferCreateBench;) +BENCH(SkBlendMode::kClear) +BENCH(SkBlendMode::kSrc) +BENCH(SkBlendMode::kDst) +BENCH(SkBlendMode::kSrcOver) +BENCH(SkBlendMode::kDstOver) +BENCH(SkBlendMode::kSrcIn) +BENCH(SkBlendMode::kDstIn) +BENCH(SkBlendMode::kSrcOut) +BENCH(SkBlendMode::kDstOut) +BENCH(SkBlendMode::kSrcATop) +BENCH(SkBlendMode::kDstATop) +BENCH(SkBlendMode::kXor) + +BENCH(SkBlendMode::kPlus) +BENCH(SkBlendMode::kModulate) +BENCH(SkBlendMode::kScreen) + +BENCH(SkBlendMode::kOverlay) +BENCH(SkBlendMode::kDarken) +BENCH(SkBlendMode::kLighten) +BENCH(SkBlendMode::kColorDodge) +BENCH(SkBlendMode::kColorBurn) +BENCH(SkBlendMode::kHardLight) +BENCH(SkBlendMode::kSoftLight) +BENCH(SkBlendMode::kDifference) +BENCH(SkBlendMode::kExclusion) +BENCH(SkBlendMode::kMultiply) + +BENCH(SkBlendMode::kHue) +BENCH(SkBlendMode::kSaturation) +BENCH(SkBlendMode::kColor) +BENCH(SkBlendMode::kLuminosity) -- cgit v1.2.3