You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
3.4 KiB
79 lines
3.4 KiB
/* |
|
* 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; |
|
SkDestinationSurfaceColorMode fColorMode; |
|
bool fHalfFoat; |
|
|
|
public: |
|
MipMapBench(int w, int h, SkDestinationSurfaceColorMode colorMode, bool halfFloat = false) |
|
: fW(w), fH(h), fColorMode(colorMode), fHalfFoat(halfFloat) |
|
{ |
|
fName.printf("mipmap_build_%dx%d_%d_gamma", w, h, static_cast<int>(colorMode)); |
|
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 { |
|
SkImageInfo info = fHalfFoat ? SkImageInfo::Make(fW, fH, kRGBA_F16_SkColorType, |
|
kPremul_SkAlphaType, |
|
SkColorSpace::MakeSRGBLinear()) |
|
: SkImageInfo::MakeS32(fW, fH, kPremul_SkAlphaType); |
|
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, fColorMode, 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, SkDestinationSurfaceColorMode::kLegacy); ) |
|
DEF_BENCH( return new MipMapBench(512, 511, SkDestinationSurfaceColorMode::kLegacy); ) |
|
DEF_BENCH( return new MipMapBench(511, 512, SkDestinationSurfaceColorMode::kLegacy); ) |
|
DEF_BENCH( return new MipMapBench(512, 512, SkDestinationSurfaceColorMode::kLegacy); ) |
|
DEF_BENCH( return new MipMapBench(512, 512, |
|
SkDestinationSurfaceColorMode::kGammaAndColorSpaceAware); ) |
|
DEF_BENCH( return new MipMapBench(511, 511, |
|
SkDestinationSurfaceColorMode::kGammaAndColorSpaceAware); ) |
|
DEF_BENCH( return new MipMapBench(512, 512, SkDestinationSurfaceColorMode::kLegacy, true); ) |
|
DEF_BENCH( return new MipMapBench(511, 511, SkDestinationSurfaceColorMode::kLegacy, true); ) |
|
DEF_BENCH( return new MipMapBench(2048, 2048, SkDestinationSurfaceColorMode::kLegacy); ) |
|
DEF_BENCH( return new MipMapBench(2048, 2048, |
|
SkDestinationSurfaceColorMode::kGammaAndColorSpaceAware); ) |
|
DEF_BENCH( return new MipMapBench(2047, 2047, SkDestinationSurfaceColorMode::kLegacy); ) |
|
DEF_BENCH( return new MipMapBench(2047, 2047, |
|
SkDestinationSurfaceColorMode::kGammaAndColorSpaceAware); ) |
|
DEF_BENCH( return new MipMapBench(2048, 2047, SkDestinationSurfaceColorMode::kLegacy); ) |
|
DEF_BENCH( return new MipMapBench(2048, 2047, |
|
SkDestinationSurfaceColorMode::kGammaAndColorSpaceAware); ) |
|
DEF_BENCH( return new MipMapBench(2047, 2048, SkDestinationSurfaceColorMode::kLegacy); ) |
|
DEF_BENCH( return new MipMapBench(2047, 2048, |
|
SkDestinationSurfaceColorMode::kGammaAndColorSpaceAware); )
|
|
|