| Index: bench/ImageFilterDAGBench.cpp
|
| diff --git a/bench/ImageFilterDAGBench.cpp b/bench/ImageFilterDAGBench.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e6a3169507ea31b72951948983414bc523a98edb
|
| --- /dev/null
|
| +++ b/bench/ImageFilterDAGBench.cpp
|
| @@ -0,0 +1,46 @@
|
| +/*
|
| + * 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 "SkBenchmark.h"
|
| +#include "SkBlurImageFilter.h"
|
| +#include "SkMergeImageFilter.h"
|
| +#include "SkCanvas.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 SkBenchmark {
|
| +public:
|
| + ImageFilterDAGBench() {
|
| + }
|
| +
|
| +protected:
|
| + virtual const char* onGetName() SK_OVERRIDE {
|
| + return "image_filter_dag";
|
| + }
|
| +
|
| + virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE {
|
| + 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 SkBenchmark INHERITED;
|
| +};
|
| +
|
| +DEF_BENCH(return new ImageFilterDAGBench;)
|
|
|