From 04a44d0fd45f5596c716e99e7a3bbcc03db0e05a Mon Sep 17 00:00:00 2001 From: brianosman Date: Wed, 21 Sep 2016 09:46:57 -0700 Subject: Add a transient image filter cache to SkImage::makeWithFilter & PDF Added a bench for makeWithFilter (~23 ms -> ~6 ms median locally). Also fixed indentation. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2360663002 Review-Url: https://codereview.chromium.org/2360663002 --- bench/ImageFilterDAGBench.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'bench/ImageFilterDAGBench.cpp') diff --git a/bench/ImageFilterDAGBench.cpp b/bench/ImageFilterDAGBench.cpp index 776ee787fd..60bcb62dd8 100644 --- a/bench/ImageFilterDAGBench.cpp +++ b/bench/ImageFilterDAGBench.cpp @@ -6,6 +6,7 @@ */ #include "Benchmark.h" +#include "Resources.h" #include "SkBlurImageFilter.h" #include "SkDisplacementMapEffect.h" #include "SkCanvas.h" @@ -45,6 +46,45 @@ private: typedef Benchmark INHERITED; }; +class ImageMakeWithFilterDAGBench : public Benchmark { +public: + ImageMakeWithFilterDAGBench() {} + +protected: + const char* onGetName() override { + return "image_make_with_filter_dag"; + } + + void onDelayedSetup() override { + fImage = GetResourceAsImage("mandrill_512.png"); + } + + void onDraw(int loops, SkCanvas* canvas) override { + SkIRect subset = SkIRect::MakeSize(fImage->dimensions()); + SkIPoint offset = SkIPoint::Make(0, 0); + SkIRect discardSubset; + sk_sp image = fImage; + + for (int j = 0; j < loops; j++) { + sk_sp blur(SkBlurImageFilter::Make(20.0f, 20.0f, nullptr)); + sk_sp inputs[kNumInputs]; + for (int i = 0; i < kNumInputs; ++i) { + inputs[i] = blur; + } + sk_sp mergeFilter = SkMergeImageFilter::Make(inputs, kNumInputs); + image = image->makeWithFilter(mergeFilter.get(), subset, subset, &discardSubset, + &offset); + SkASSERT(image && image->dimensions() == fImage->dimensions()); + } + } + +private: + static const int kNumInputs = 5; + sk_sp fImage; + + typedef Benchmark INHERITED; +}; + // Exercise a blur filter connected to both inputs of an SkDisplacementMapEffect. class ImageFilterDisplacedBlur : public Benchmark { @@ -77,4 +117,5 @@ private: }; DEF_BENCH(return new ImageFilterDAGBench;) +DEF_BENCH(return new ImageMakeWithFilterDAGBench;) DEF_BENCH(return new ImageFilterDisplacedBlur;) -- cgit v1.2.3