aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/ImageFilterDAGBench.cpp
diff options
context:
space:
mode:
authorGravatar Xianzhu Wang <wangxianzhu@chromium.org>2017-09-11 09:12:56 -0700
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-09-11 16:43:50 +0000
commit0bff418eefc4193bf06f3f9f767b982a0c685c40 (patch)
tree20d5fd77c674828b8441c06cd8bcc29d559d7dee /bench/ImageFilterDAGBench.cpp
parent358515491a0d6891e6a709688a30ad087df1beb1 (diff)
Add a benchmark for SkXfermodeImageFilter mode kSrcIn
This should exercise the performance benefits of https://skia-review.googlesource.com/c/skia/+/38921. Change-Id: Ic9b4c280308aeadbc50152d17ee5d38387be6913 Reviewed-on: https://skia-review.googlesource.com/42181 Commit-Queue: Stephen White <senorblanco@chromium.org> Reviewed-by: Stephen White <senorblanco@chromium.org>
Diffstat (limited to 'bench/ImageFilterDAGBench.cpp')
-rw-r--r--bench/ImageFilterDAGBench.cpp32
1 files changed, 30 insertions, 2 deletions
diff --git a/bench/ImageFilterDAGBench.cpp b/bench/ImageFilterDAGBench.cpp
index aa65a1e0fd..076e13949b 100644
--- a/bench/ImageFilterDAGBench.cpp
+++ b/bench/ImageFilterDAGBench.cpp
@@ -8,11 +8,12 @@
#include "Benchmark.h"
#include "Resources.h"
#include "SkBlurImageFilter.h"
-#include "SkDisplacementMapEffect.h"
#include "SkCanvas.h"
+#include "SkDisplacementMapEffect.h"
#include "SkImage.h"
#include "SkMergeImageFilter.h"
-
+#include "SkOffsetImageFilter.h"
+#include "SkXfermodeImageFilter.h"
// Exercise a blur filter connected to 5 inputs of the same merge filter.
// This bench shows an improvement in performance once cacheing of re-used
@@ -117,6 +118,33 @@ private:
typedef Benchmark INHERITED;
};
+// Exercise an Xfermode kSrcIn filter compositing two inputs which have a small intersection.
+class ImageFilterXfermodeIn : public Benchmark {
+public:
+ ImageFilterXfermodeIn() {}
+
+protected:
+ const char* onGetName() override { return "image_filter_xfermode_in"; }
+
+ void onDraw(int loops, SkCanvas* canvas) override {
+ for (int j = 0; j < loops; j++) {
+ auto blur = SkBlurImageFilter::Make(20.0f, 20.0f, nullptr);
+ auto offset1 = SkOffsetImageFilter::Make(100.0f, 100.0f, blur);
+ auto offset2 = SkOffsetImageFilter::Make(-100.0f, -100.0f, blur);
+ auto xfermode =
+ SkXfermodeImageFilter::Make(SkBlendMode::kSrcIn, offset1, offset2, nullptr);
+
+ SkPaint paint;
+ paint.setImageFilter(xfermode);
+ canvas->drawRect(SkRect::MakeWH(200.0f, 200.0f), paint);
+ }
+ }
+
+private:
+ typedef Benchmark INHERITED;
+};
+
DEF_BENCH(return new ImageFilterDAGBench;)
DEF_BENCH(return new ImageMakeWithFilterDAGBench;)
DEF_BENCH(return new ImageFilterDisplacedBlur;)
+DEF_BENCH(return new ImageFilterXfermodeIn;)