| /* | |
| * Copyright 2015 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #include "Benchmark.h" | |
| #include "SkBitmap.h" | |
| #include "SkMipMap.h" | |
| class MipMapBench: public Benchmark { | |
| SkBitmap fBitmap; | |
| SkString fName; | |
| const int fW, fH; | |
| bool fHalfFoat; | |
| public: | |
| MipMapBench(int w, int h, bool halfFloat = false) | |
| : fW(w), fH(h), fHalfFoat(halfFloat) | |
| { | |
| fName.printf("mipmap_build_%dx%d", w, h); | |
| if (halfFloat) { | |
| fName.append("_f16"); | |
| } | |
| } | |
| protected: | |
| bool isSuitableFor(Backend backend) override { | |
| return kNonRendering_Backend == backend; | |
| } | |
| const char* onGetName() override { return fName.c_str(); } | |
| void onDelayedSetup() override { | |
| SkColorType ct = fHalfFoat ? kRGBA_F16_SkColorType : kN32_SkColorType; | |
| SkImageInfo info = SkImageInfo::Make(fW, fH, ct, kPremul_SkAlphaType, | |
| SkColorSpace::MakeSRGB()); | |
| fBitmap.allocPixels(info); | |
| fBitmap.eraseColor(SK_ColorWHITE); // so we don't read uninitialized memory | |
| } | |
| void onDraw(int loops, SkCanvas*) override { | |
| for (int i = 0; i < loops * 4; i++) { | |
| SkMipMap::Build(fBitmap, nullptr)->unref(); | |
| } | |
| } | |
| private: | |
| typedef Benchmark INHERITED; | |
| }; | |
| // Build variants that exercise the width and heights being even or odd at each level, as the | |
| // impl specializes on each of these. | |
| // | |
| DEF_BENCH( return new MipMapBench(511, 511); ) | |
| DEF_BENCH( return new MipMapBench(512, 511); ) | |
| DEF_BENCH( return new MipMapBench(511, 512); ) | |
| DEF_BENCH( return new MipMapBench(512, 512); ) | |
| DEF_BENCH( return new MipMapBench(512, 512, true); ) | |
| DEF_BENCH( return new MipMapBench(511, 511, true); ) | |
| DEF_BENCH( return new MipMapBench(2048, 2048); ) | |
| DEF_BENCH( return new MipMapBench(2047, 2047); ) | |
| DEF_BENCH( return new MipMapBench(2048, 2047); ) | |
| DEF_BENCH( return new MipMapBench(2047, 2048); ) |