/* * 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 blur(SkBlurImageFilter::Create(20.0f, 20.0f)); SkImageFilter* inputs[kNumInputs]; for (int i = 0; i < kNumInputs; ++i) { inputs[i] = blur.get(); } SkAutoTUnref 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;)