/* * Copyright 2012 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "bench/Benchmark.h" #include "include/core/SkCanvas.h" #include "include/core/SkPaint.h" #include "include/core/SkShader.h" #include "include/core/SkString.h" #include "tools/Resources.h" class FilteringBench : public Benchmark { public: FilteringBench(SkFilterMode fm, SkMipmapMode mm) : fSampling(fm, mm) { fName.printf("samplingoptions_filter_%d_mipmap_%d", (int)fm, (int)mm); } protected: const char* onGetName() override { return fName.c_str(); } void onDelayedSetup() override { auto img = GetResourceAsImage("images/ship.png"); // need to force raster since lazy doesn't support filteroptions yet img = img->makeRasterImage(); fRect = SkRect::MakeIWH(img->width(), img->height()); fShader = img->makeShader(SkTileMode::kClamp, SkTileMode::kClamp, fSampling); } void onDraw(int loops, SkCanvas* canvas) override { // scale so we will trigger lerping between levels if we mipmapping canvas->scale(0.75f, 0.75f); SkPaint paint; paint.setShader(fShader); for (int i = 0; i < loops; ++i) { for (int j = 0; j < 10; ++j) { canvas->drawRect(fRect, paint); } } } private: SkString fName; SkRect fRect; sk_sp fShader; SkSamplingOptions fSampling; using INHERITED = Benchmark; }; DEF_BENCH( return new FilteringBench(SkFilterMode::kLinear, SkMipmapMode::kLinear); ) DEF_BENCH( return new FilteringBench(SkFilterMode::kLinear, SkMipmapMode::kNearest); ) DEF_BENCH( return new FilteringBench(SkFilterMode::kLinear, SkMipmapMode::kNone); ) DEF_BENCH( return new FilteringBench(SkFilterMode::kNearest, SkMipmapMode::kLinear); ) DEF_BENCH( return new FilteringBench(SkFilterMode::kNearest, SkMipmapMode::kNearest); ) DEF_BENCH( return new FilteringBench(SkFilterMode::kNearest, SkMipmapMode::kNone); )