WritePixelsBench.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /*
  2. * Copyright 2013 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 "include/core/SkCanvas.h"
  10. #include "include/core/SkString.h"
  11. // Time variants of write-pixels
  12. // [ colortype ][ alphatype ][ colorspace ]
  13. // Different combinations can trigger fast or slow paths in the impls
  14. //
  15. class WritePixelsBench : public Benchmark {
  16. public:
  17. WritePixelsBench(SkColorType ct, SkAlphaType at, sk_sp<SkColorSpace> cs)
  18. : fColorType(ct)
  19. , fAlphaType(at)
  20. , fCS(cs)
  21. {
  22. fName.printf("writepix_%s_%s_%s",
  23. at == kPremul_SkAlphaType ? "pm" : "um",
  24. ct == kRGBA_8888_SkColorType ? "rgba" : "bgra",
  25. cs ? "srgb" : "null");
  26. }
  27. protected:
  28. const char* onGetName() override {
  29. return fName.c_str();
  30. }
  31. void onDraw(int loops, SkCanvas* canvas) override {
  32. SkISize size = canvas->getBaseLayerSize();
  33. SkImageInfo info = SkImageInfo::Make(size.width(), size.height(), fColorType, fAlphaType,
  34. fCS);
  35. SkBitmap bmp;
  36. bmp.allocPixels(info);
  37. bmp.eraseColor(SK_ColorBLACK);
  38. for (int loop = 0; loop < loops; ++loop) {
  39. canvas->writePixels(info, bmp.getPixels(), bmp.rowBytes(), 0, 0);
  40. }
  41. }
  42. private:
  43. SkColorType fColorType;
  44. SkAlphaType fAlphaType;
  45. sk_sp<SkColorSpace> fCS;
  46. SkString fName;
  47. typedef Benchmark INHERITED;
  48. };
  49. //////////////////////////////////////////////////////////////////////////////
  50. DEF_BENCH(return new WritePixelsBench(kRGBA_8888_SkColorType, kPremul_SkAlphaType, nullptr);)
  51. DEF_BENCH(return new WritePixelsBench(kRGBA_8888_SkColorType, kUnpremul_SkAlphaType, nullptr);)
  52. DEF_BENCH(return new WritePixelsBench(kRGBA_8888_SkColorType, kPremul_SkAlphaType, SkColorSpace::MakeSRGB());)
  53. DEF_BENCH(return new WritePixelsBench(kRGBA_8888_SkColorType, kUnpremul_SkAlphaType, SkColorSpace::MakeSRGB());)
  54. DEF_BENCH(return new WritePixelsBench(kBGRA_8888_SkColorType, kPremul_SkAlphaType, nullptr);)
  55. DEF_BENCH(return new WritePixelsBench(kBGRA_8888_SkColorType, kUnpremul_SkAlphaType, nullptr);)
  56. DEF_BENCH(return new WritePixelsBench(kBGRA_8888_SkColorType, kPremul_SkAlphaType, SkColorSpace::MakeSRGB());)
  57. DEF_BENCH(return new WritePixelsBench(kBGRA_8888_SkColorType, kUnpremul_SkAlphaType, SkColorSpace::MakeSRGB());)