blob: baa8cd3c9b8be975e7b9f63181860ba611e984d1 [file] [log] [blame]
reed96638d12015-01-26 12:28:54 -08001/*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
Mike Kleinc0bd9f92019-04-23 12:05:21 -05008#include "bench/Benchmark.h"
9#include "include/core/SkBitmap.h"
10#include "src/core/SkMipMap.h"
reed96638d12015-01-26 12:28:54 -080011
12class MipMapBench: public Benchmark {
13 SkBitmap fBitmap;
reed3396fb52016-01-15 07:41:07 -080014 SkString fName;
reed0b64b982016-01-15 18:47:38 -080015 const int fW, fH;
Brian Osmane9c99b82017-03-06 16:16:15 -050016 bool fHalfFoat;
reed96638d12015-01-26 12:28:54 -080017
18public:
Brian Osman2b23c4b2018-06-01 12:25:08 -040019 MipMapBench(int w, int h, bool halfFloat = false)
20 : fW(w), fH(h), fHalfFoat(halfFloat)
reed6644d932016-06-10 11:41:47 -070021 {
Brian Osman2b23c4b2018-06-01 12:25:08 -040022 fName.printf("mipmap_build_%dx%d", w, h);
Brian Osmane9c99b82017-03-06 16:16:15 -050023 if (halfFloat) {
24 fName.append("_f16");
25 }
reed3396fb52016-01-15 07:41:07 -080026 }
reed96638d12015-01-26 12:28:54 -080027
28protected:
mtklein36352bf2015-03-25 18:17:31 -070029 bool isSuitableFor(Backend backend) override {
reed96638d12015-01-26 12:28:54 -080030 return kNonRendering_Backend == backend;
31 }
32
reed3396fb52016-01-15 07:41:07 -080033 const char* onGetName() override { return fName.c_str(); }
reed96638d12015-01-26 12:28:54 -080034
joshualitt8a6697a2015-09-30 12:11:07 -070035 void onDelayedSetup() override {
Brian Osman6b622962018-08-27 19:16:02 +000036 SkColorType ct = fHalfFoat ? kRGBA_F16_SkColorType : kN32_SkColorType;
37 SkImageInfo info = SkImageInfo::Make(fW, fH, ct, kPremul_SkAlphaType,
38 SkColorSpace::MakeSRGB());
reed6644d932016-06-10 11:41:47 -070039 fBitmap.allocPixels(info);
reed96638d12015-01-26 12:28:54 -080040 fBitmap.eraseColor(SK_ColorWHITE); // so we don't read uninitialized memory
41 }
42
mtkleina1ebeb22015-10-01 09:43:39 -070043 void onDraw(int loops, SkCanvas*) override {
reed3396fb52016-01-15 07:41:07 -080044 for (int i = 0; i < loops * 4; i++) {
Brian Osman2b23c4b2018-06-01 12:25:08 -040045 SkMipMap::Build(fBitmap, nullptr)->unref();
reed96638d12015-01-26 12:28:54 -080046 }
47 }
48
49private:
50 typedef Benchmark INHERITED;
51};
52
reed0b64b982016-01-15 18:47:38 -080053// Build variants that exercise the width and heights being even or odd at each level, as the
54// impl specializes on each of these.
55//
Brian Osman2b23c4b2018-06-01 12:25:08 -040056DEF_BENCH( return new MipMapBench(511, 511); )
57DEF_BENCH( return new MipMapBench(512, 511); )
58DEF_BENCH( return new MipMapBench(511, 512); )
59DEF_BENCH( return new MipMapBench(512, 512); )
60
61DEF_BENCH( return new MipMapBench(512, 512, true); )
62DEF_BENCH( return new MipMapBench(511, 511, true); )
63
64DEF_BENCH( return new MipMapBench(2048, 2048); )
65DEF_BENCH( return new MipMapBench(2047, 2047); )
66DEF_BENCH( return new MipMapBench(2048, 2047); )
67DEF_BENCH( return new MipMapBench(2047, 2048); )