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