blob: 652524364b2de8acf63c35153784409fc252e90a [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
8#include "Benchmark.h"
9#include "SkBitmap.h"
10#include "SkMipMap.h"
11
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;
reed96638d12015-01-26 12:28:54 -080016
17public:
reed0b64b982016-01-15 18:47:38 -080018 MipMapBench(int w, int h) : fW(w), fH(h) {
19 fName.printf("mipmap_build_%dx%d", w, h);
reed3396fb52016-01-15 07:41:07 -080020 }
reed96638d12015-01-26 12:28:54 -080021
22protected:
mtklein36352bf2015-03-25 18:17:31 -070023 bool isSuitableFor(Backend backend) override {
reed96638d12015-01-26 12:28:54 -080024 return kNonRendering_Backend == backend;
25 }
26
reed3396fb52016-01-15 07:41:07 -080027 const char* onGetName() override { return fName.c_str(); }
reed96638d12015-01-26 12:28:54 -080028
joshualitt8a6697a2015-09-30 12:11:07 -070029 void onDelayedSetup() override {
reed0b64b982016-01-15 18:47:38 -080030 fBitmap.allocN32Pixels(fW, fH, true);
reed96638d12015-01-26 12:28:54 -080031 fBitmap.eraseColor(SK_ColorWHITE); // so we don't read uninitialized memory
32 }
33
mtkleina1ebeb22015-10-01 09:43:39 -070034 void onDraw(int loops, SkCanvas*) override {
reed3396fb52016-01-15 07:41:07 -080035 for (int i = 0; i < loops * 4; i++) {
halcanary96fcdcc2015-08-27 07:41:13 -070036 SkMipMap::Build(fBitmap, nullptr)->unref();
reed96638d12015-01-26 12:28:54 -080037 }
38 }
39
40private:
41 typedef Benchmark INHERITED;
42};
43
reed0b64b982016-01-15 18:47:38 -080044// Build variants that exercise the width and heights being even or odd at each level, as the
45// impl specializes on each of these.
46//
47DEF_BENCH( return new MipMapBench(511, 511); )
48DEF_BENCH( return new MipMapBench(512, 511); )
49DEF_BENCH( return new MipMapBench(511, 512); )
50DEF_BENCH( return new MipMapBench(512, 512); )