diff options
author | brianosman <brianosman@google.com> | 2016-09-21 09:46:57 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-09-21 09:46:57 -0700 |
commit | 04a44d0fd45f5596c716e99e7a3bbcc03db0e05a (patch) | |
tree | 2dbd1b8dc623cdf1a72d4ed0e2f90851265be145 /bench/ImageFilterDAGBench.cpp | |
parent | 3e8012e74f70bf49427a7422f9e5996c9882d4f3 (diff) |
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
Diffstat (limited to 'bench/ImageFilterDAGBench.cpp')
-rw-r--r-- | bench/ImageFilterDAGBench.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
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<SkImage> image = fImage; + + for (int j = 0; j < loops; j++) { + sk_sp<SkImageFilter> blur(SkBlurImageFilter::Make(20.0f, 20.0f, nullptr)); + sk_sp<SkImageFilter> inputs[kNumInputs]; + for (int i = 0; i < kNumInputs; ++i) { + inputs[i] = blur; + } + sk_sp<SkImageFilter> 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<SkImage> 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;) |