ImageFilterDAGBench.cpp revision f168b86d7fafc5c20c87bebc6fd393cb17e120ca
10d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org/*
20d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org * Copyright 2014 Google Inc.
30d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org *
40d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org * Use of this source code is governed by a BSD-style license that can be
50d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org * found in the LICENSE file.
60d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org */
70d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org
8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h"
90d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org#include "SkBlurImageFilter.h"
100d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org#include "SkCanvas.h"
11f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "SkMergeImageFilter.h"
120d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org
130d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.orgenum { kNumInputs = 5 };
140d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org
150d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org// Exercise a blur filter connected to 5 inputs of the same merge filter.
160d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org// This bench shows an improvement in performance once cacheing of re-used
170d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org// nodes is implemented, since the DAG is no longer flattened to a tree.
180d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org
19f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass ImageFilterDAGBench : public Benchmark {
200d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.orgpublic:
210d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org    ImageFilterDAGBench() {
220d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org    }
230d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org
240d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.orgprotected:
250d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org    virtual const char* onGetName() SK_OVERRIDE {
260d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org        return "image_filter_dag";
270d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org    }
280d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org
290d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org    virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE {
300d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org        SkAutoTUnref<SkImageFilter> blur(SkBlurImageFilter::Create(20.0f, 20.0f));
310d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org        SkImageFilter* inputs[kNumInputs];
320d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org        for (int i = 0; i < kNumInputs; ++i) {
330d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org            inputs[i] = blur.get();
340d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org        }
350d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org        SkAutoTUnref<SkImageFilter> merge(SkMergeImageFilter::Create(inputs, kNumInputs));
360d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org        SkPaint paint;
370d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org        paint.setImageFilter(merge);
380d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org        SkRect rect = SkRect::Make(SkIRect::MakeWH(400, 400));
390d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org        canvas->drawRect(rect, paint);
400d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org    }
410d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org
420d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.orgprivate:
43f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina    typedef Benchmark INHERITED;
440d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org};
450d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.org
460d64356efd8a3ca40d39729f62e0fa9a5bc3a365senorblanco@chromium.orgDEF_BENCH(return new ImageFilterDAGBench;)
47