MipMapBench.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /*
  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. #include "bench/Benchmark.h"
  8. #include "include/core/SkBitmap.h"
  9. #include "src/core/SkMipMap.h"
  10. class MipMapBench: public Benchmark {
  11. SkBitmap fBitmap;
  12. SkString fName;
  13. const int fW, fH;
  14. bool fHalfFoat;
  15. public:
  16. MipMapBench(int w, int h, bool halfFloat = false)
  17. : fW(w), fH(h), fHalfFoat(halfFloat)
  18. {
  19. fName.printf("mipmap_build_%dx%d", w, h);
  20. if (halfFloat) {
  21. fName.append("_f16");
  22. }
  23. }
  24. protected:
  25. bool isSuitableFor(Backend backend) override {
  26. return kNonRendering_Backend == backend;
  27. }
  28. const char* onGetName() override { return fName.c_str(); }
  29. void onDelayedSetup() override {
  30. SkColorType ct = fHalfFoat ? kRGBA_F16_SkColorType : kN32_SkColorType;
  31. SkImageInfo info = SkImageInfo::Make(fW, fH, ct, kPremul_SkAlphaType,
  32. SkColorSpace::MakeSRGB());
  33. fBitmap.allocPixels(info);
  34. fBitmap.eraseColor(SK_ColorWHITE); // so we don't read uninitialized memory
  35. }
  36. void onDraw(int loops, SkCanvas*) override {
  37. for (int i = 0; i < loops * 4; i++) {
  38. SkMipMap::Build(fBitmap, nullptr)->unref();
  39. }
  40. }
  41. private:
  42. typedef Benchmark INHERITED;
  43. };
  44. // 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. //
  47. DEF_BENCH( return new MipMapBench(511, 511); )
  48. DEF_BENCH( return new MipMapBench(512, 511); )
  49. DEF_BENCH( return new MipMapBench(511, 512); )
  50. DEF_BENCH( return new MipMapBench(512, 512); )
  51. DEF_BENCH( return new MipMapBench(512, 512, true); )
  52. DEF_BENCH( return new MipMapBench(511, 511, true); )
  53. DEF_BENCH( return new MipMapBench(2048, 2048); )
  54. DEF_BENCH( return new MipMapBench(2047, 2047); )
  55. DEF_BENCH( return new MipMapBench(2048, 2047); )
  56. DEF_BENCH( return new MipMapBench(2047, 2048); )