| /* |
| * Copyright 2014 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "Benchmark.h" |
| #include "SkBlurImageFilter.h" |
| #include "SkCanvas.h" |
| #include "SkMergeImageFilter.h" |
| |
| enum { kNumInputs = 5 }; |
| |
| // 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 |
| // nodes is implemented, since the DAG is no longer flattened to a tree. |
| |
| class ImageFilterDAGBench : public Benchmark { |
| public: |
| ImageFilterDAGBench() {} |
| |
| protected: |
| virtual const char* onGetName() SK_OVERRIDE { |
| return "image_filter_dag"; |
| } |
| |
| virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { |
| for (int j = 0; j < loops; j++) { |
| SkAutoTUnref<SkImageFilter> blur(SkBlurImageFilter::Create(20.0f, 20.0f)); |
| SkImageFilter* inputs[kNumInputs]; |
| for (int i = 0; i < kNumInputs; ++i) { |
| inputs[i] = blur.get(); |
| } |
| SkAutoTUnref<SkImageFilter> merge(SkMergeImageFilter::Create(inputs, kNumInputs)); |
| SkPaint paint; |
| paint.setImageFilter(merge); |
| SkRect rect = SkRect::Make(SkIRect::MakeWH(400, 400)); |
| canvas->drawRect(rect, paint); |
| } |
| } |
| |
| private: |
| typedef Benchmark INHERITED; |
| }; |
| |
| DEF_BENCH(return new ImageFilterDAGBench;) |