12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /*
- * 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 "bench/Benchmark.h"
- #include "include/core/SkBitmap.h"
- #include "src/core/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); )
|