aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/ImageFilterDAGBench.cpp
diff options
context:
space:
mode:
authorGravatar brianosman <brianosman@google.com>2016-09-21 09:46:57 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-09-21 09:46:57 -0700
commit04a44d0fd45f5596c716e99e7a3bbcc03db0e05a (patch)
tree2dbd1b8dc623cdf1a72d4ed0e2f90851265be145 /bench/ImageFilterDAGBench.cpp
parent3e8012e74f70bf49427a7422f9e5996c9882d4f3 (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.cpp41
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;)