SwizzleBench.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. /*
  2. * Copyright 2016 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 "src/core/SkOpts.h"
  9. class SwizzleBench : public Benchmark {
  10. public:
  11. SwizzleBench(const char* name, SkOpts::Swizzle_8888_u32 fn) : fName(name), fFn_u32(fn) {}
  12. SwizzleBench(const char* name, SkOpts::Swizzle_8888_u8 fn) : fName(name), fFn_u8 (fn) {}
  13. bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; }
  14. const char* onGetName() override { return fName; }
  15. void onDraw(int loops, SkCanvas*) override {
  16. static const int K = 1023; // Arbitrary, but nice to be a non-power-of-two to trip up SIMD.
  17. uint32_t dst[K], src[K];
  18. while (loops --> 0) {
  19. if (fFn_u32) { fFn_u32(dst, src, K); }
  20. if (fFn_u8) { fFn_u8 (dst, (const uint8_t*)src, K); }
  21. }
  22. }
  23. private:
  24. const char* fName;
  25. SkOpts::Swizzle_8888_u32 fFn_u32 = nullptr;
  26. SkOpts::Swizzle_8888_u8 fFn_u8 = nullptr;
  27. };
  28. DEF_BENCH(return new SwizzleBench("SkOpts::RGBA_to_rgbA", SkOpts::RGBA_to_rgbA));
  29. DEF_BENCH(return new SwizzleBench("SkOpts::RGBA_to_bgrA", SkOpts::RGBA_to_bgrA));
  30. DEF_BENCH(return new SwizzleBench("SkOpts::RGBA_to_BGRA", SkOpts::RGBA_to_BGRA));
  31. DEF_BENCH(return new SwizzleBench("SkOpts::RGB_to_RGB1", SkOpts::RGB_to_RGB1));
  32. DEF_BENCH(return new SwizzleBench("SkOpts::RGB_to_BGR1", SkOpts::RGB_to_BGR1));
  33. DEF_BENCH(return new SwizzleBench("SkOpts::gray_to_RGB1", SkOpts::gray_to_RGB1));
  34. DEF_BENCH(return new SwizzleBench("SkOpts::grayA_to_RGBA", SkOpts::grayA_to_RGBA));
  35. DEF_BENCH(return new SwizzleBench("SkOpts::grayA_to_rgbA", SkOpts::grayA_to_rgbA));
  36. DEF_BENCH(return new SwizzleBench("SkOpts::inverted_CMYK_to_RGB1", SkOpts::inverted_CMYK_to_RGB1));
  37. DEF_BENCH(return new SwizzleBench("SkOpts::inverted_CMYK_to_BGR1", SkOpts::inverted_CMYK_to_BGR1));