ShaperBench.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // Copyright 2019 Google LLC.
  2. // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
  3. #include "bench/Benchmark.h"
  4. #if !defined(SK_BUILD_FOR_ANDROID_FRAMEWORK) && !defined(SK_BUILD_FOR_GOOGLE3)
  5. #include "modules/skshaper/include/SkShaper.h"
  6. #include "tools/Resources.h"
  7. #include <cfloat>
  8. namespace {
  9. struct ShaperBench : public Benchmark {
  10. ShaperBench(const char* r, const char* n) : fResource(r), fName(n) {}
  11. std::unique_ptr<SkShaper> fShaper;
  12. sk_sp<SkData> fData;
  13. const char* fResource;
  14. const char* fName;
  15. const char* onGetName() override { return fName; }
  16. bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; }
  17. void onDelayedSetup() override {
  18. fShaper = SkShaper::Make();
  19. fData = GetResourceAsData(fResource);
  20. }
  21. void onDraw(int loops, SkCanvas*) override {
  22. if (!fData || !fShaper) { return; }
  23. SkFont font;
  24. const char* text = (const char*)fData->data();
  25. size_t len = fData->size();
  26. while (loops-- > 0) {
  27. SkTextBlobBuilderRunHandler rh(text, {0, 0});
  28. fShaper->shape(text, len, font, true, FLT_MAX, &rh);
  29. (void)rh.makeBlob();
  30. }
  31. }
  32. };
  33. } // namespace
  34. #define SHAPER_BENCH(X) DEF_BENCH(return new ShaperBench("text/" #X ".txt", "shaper_" #X);)
  35. SHAPER_BENCH(arabic)
  36. SHAPER_BENCH(armenian)
  37. SHAPER_BENCH(balinese)
  38. SHAPER_BENCH(bengali)
  39. SHAPER_BENCH(buginese)
  40. SHAPER_BENCH(cherokee)
  41. SHAPER_BENCH(cyrillic)
  42. SHAPER_BENCH(devanagari)
  43. SHAPER_BENCH(emoji)
  44. SHAPER_BENCH(english)
  45. SHAPER_BENCH(ethiopic)
  46. SHAPER_BENCH(greek)
  47. SHAPER_BENCH(hangul)
  48. SHAPER_BENCH(han_simplified)
  49. SHAPER_BENCH(han_traditional)
  50. SHAPER_BENCH(hebrew)
  51. SHAPER_BENCH(javanese)
  52. SHAPER_BENCH(kana)
  53. SHAPER_BENCH(khmer)
  54. SHAPER_BENCH(lao)
  55. SHAPER_BENCH(mandaic)
  56. SHAPER_BENCH(myanmar)
  57. SHAPER_BENCH(newtailue)
  58. SHAPER_BENCH(nko)
  59. SHAPER_BENCH(sinhala)
  60. SHAPER_BENCH(sundanese)
  61. SHAPER_BENCH(syriac)
  62. SHAPER_BENCH(taitham)
  63. SHAPER_BENCH(tamil)
  64. SHAPER_BENCH(thaana)
  65. SHAPER_BENCH(thai)
  66. SHAPER_BENCH(tibetan)
  67. SHAPER_BENCH(tifnagh)
  68. SHAPER_BENCH(vai)
  69. #undef SHAPER_BENCH
  70. #endif // !defined(SK_BUILD_FOR_ANDROID_FRAMEWORK) && !defined(SK_BUILD_FOR_GOOGLE3)