| /* |
| * Copyright 2016 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "bench/Benchmark.h" |
| #include "include/core/SkBitmap.h" |
| #include "include/core/SkFontMgr.h" |
| #include "include/core/SkPicture.h" |
| #include "include/core/SkPictureRecorder.h" |
| #include "modules/skottie/include/Skottie.h" |
| #include "tools/DecodeUtils.h" |
| #include "tools/Resources.h" |
| #include "tools/fonts/FontToolUtils.h" |
| |
| class DecodeBench : public Benchmark { |
| protected: |
| DecodeBench(const char* name, const char* source) |
| : fName(SkStringPrintf("decode_%s", name)) |
| , fSource(source) |
| {} |
| |
| bool isSuitableFor(Backend backend) final { |
| return backend == Backend::kNonRendering; |
| } |
| |
| const char* onGetName() final { return fName.c_str(); } |
| |
| void onDelayedSetup() override { |
| fData = GetResourceAsData(fSource); |
| SkASSERT(fData); |
| } |
| |
| protected: |
| sk_sp<SkData> fData; |
| |
| private: |
| const SkString fName; |
| const char* fSource; |
| }; |
| |
| class BitmapDecodeBench final : public DecodeBench { |
| public: |
| BitmapDecodeBench(const char* name, const char* source) |
| : INHERITED(name, source) |
| {} |
| |
| void onDraw(int loops, SkCanvas*) override { |
| while (loops-- > 0) { |
| SkBitmap bm; |
| SkAssertResult(ToolUtils::DecodeDataToBitmap(fData, &bm)); |
| } |
| } |
| |
| private: |
| using INHERITED = DecodeBench; |
| }; |
| |
| |
| class SkottieDecodeBench final : public DecodeBench { |
| public: |
| SkottieDecodeBench(const char* name, const char* source) |
| : INHERITED(name, source) |
| {} |
| |
| void onDraw(int loops, SkCanvas*) override { |
| while (loops-- > 0) { |
| const auto anim = skottie::Animation::Builder() |
| .setFontManager(ToolUtils::TestFontMgr()) |
| .make(reinterpret_cast<const char*>(fData->data()), |
| fData->size()); |
| } |
| } |
| |
| private: |
| using INHERITED = DecodeBench; |
| }; |
| |
| class SkottiePictureDecodeBench final : public DecodeBench { |
| public: |
| SkottiePictureDecodeBench(const char* name, const char* source) |
| : INHERITED(name, source) |
| {} |
| |
| void onDraw(int loops, SkCanvas*) override { |
| while (loops-- > 0) { |
| const auto anim = skottie::Animation::Builder() |
| .setFontManager(ToolUtils::TestFontMgr()) |
| .make(reinterpret_cast<const char*>(fData->data()), |
| fData->size()); |
| SkPictureRecorder recorder; |
| anim->seek(0); |
| anim->render(recorder.beginRecording(anim->size().width(), anim->size().height())); |
| |
| const auto pic = recorder.finishRecordingAsPicture(); |
| } |
| } |
| |
| private: |
| using INHERITED = DecodeBench; |
| }; |
| |
| DEF_BENCH(return new SkottieDecodeBench("skottie_large", // 426593 |
| "skottie/skottie-text-scale-to-fit-minmax.json")); |
| DEF_BENCH(return new SkottieDecodeBench("skottie_medium", // 10947 |
| "skottie/skottie-sphere-effect.json")); |
| DEF_BENCH(return new SkottieDecodeBench("skottie_small", // 1112 |
| "skottie/skottie_sample_multiframe.json")); |
| // Created from PhoneHub assets SVG source, with https://lottiefiles.com/svg-to-lottie |
| DEF_BENCH(return new SkottieDecodeBench("skottie_phonehub_connecting.json", // 216x216 |
| "skottie/skottie-phonehub-connecting.json")); |
| DEF_BENCH(return new SkottieDecodeBench("skottie_phonehub_generic_error.json", // 216x217 |
| "skottie/skottie-phonehub-generic-error.json")); |
| DEF_BENCH(return new SkottieDecodeBench("skottie_phonehub_onboard.json", // 217x217 |
| "skottie/skottie-phonehub-onboard.json")); |
| // Created from PhoneHub assets SVG source, with https://jakearchibald.github.io/svgomg/ and then |
| // https://lottiefiles.com/svg-to-lottie |
| DEF_BENCH(return new SkottieDecodeBench("skottie_phonehub_svgo_connecting.json", |
| "skottie/skottie-phonehub-svgo-connecting.json")); |
| DEF_BENCH(return new SkottieDecodeBench("skottie_phonehub_svgo_generic_error.json", |
| "skottie/skottie-phonehub-svgo-generic-error.json")); |
| DEF_BENCH(return new SkottieDecodeBench("skottie_phonehub_svgo_onboard.json", |
| "skottie/skottie-phonehub-svgo-onboard.json")); |
| // Created from PhoneHub assets SVG source: |
| // 1. Manually edited to have no masks (but look the same as the original) |
| // 2. https://jakearchibald.github.io/svgomg/ |
| // 3. https://lottiefiles.com/svg-to-lottie |
| // Note: The Generic Error asset is excluded here because it has no masks in the first place. |
| DEF_BENCH(return new SkottieDecodeBench("skottie_phonehub_svgo_no_masks_connecting.json", |
| "skottie/skottie-phonehub-svgo-no-masks-connecting.json")); |
| DEF_BENCH(return new SkottieDecodeBench("skottie_phonehub_svgo_no_masks_onboard.json", |
| "skottie/skottie-phonehub-svgo-no-masks-onboard.json")); |
| // Created from PhoneHub assets SVG source: |
| // 1. Manually edited to use only the most basic functionality of SVG (but look the same as the |
| // original) |
| // 2. https://jakearchibald.github.io/svgomg/ |
| // 3. https://lottiefiles.com/svg-to-lottie |
| DEF_BENCH(return new SkottieDecodeBench("skottie_phonehub_svgo_no_frills_connecting.json", |
| "skottie/skottie-phonehub-svgo-no-frills-connecting.json")); |
| DEF_BENCH(return new SkottieDecodeBench( |
| "skottie_phonehub_svgo_no_frills_generic_error.json", |
| "skottie/skottie-phonehub-svgo-no-frills-generic-error.json")); |
| DEF_BENCH(return new SkottieDecodeBench("skottie_phonehub_svgo_no_frills_onboard.json", |
| "skottie/skottie-phonehub-svgo-no-frills-onboard.json")); |
| // All of the above PhoneHub benchmarks, with https://skia-review.googlesource.com/c/skia/+/141265 |
| DEF_BENCH(return new SkottieDecodeBench("skottie_phonehub_connecting_min.json", |
| "skottie/skottie-phonehub-connecting_min.json")); |
| DEF_BENCH(return new SkottieDecodeBench("skottie_phonehub_generic_error_min.json", |
| "skottie/skottie-phonehub-generic-error_min.json")); |
| DEF_BENCH(return new SkottieDecodeBench("skottie_phonehub_onboard_min.json", |
| "skottie/skottie-phonehub-onboard_min.json")); |
| DEF_BENCH(return new SkottieDecodeBench("skottie_phonehub_svgo_connecting_min.json", |
| "skottie/skottie-phonehub-svgo-connecting_min.json")); |
| DEF_BENCH(return new SkottieDecodeBench("skottie_phonehub_svgo_generic_error_min.json", |
| "skottie/skottie-phonehub-svgo-generic-error_min.json")); |
| DEF_BENCH(return new SkottieDecodeBench("skottie_phonehub_svgo_onboard_min.json", |
| "skottie/skottie-phonehub-svgo-onboard_min.json")); |
| DEF_BENCH(return new SkottieDecodeBench( |
| "skottie_phonehub_svgo_no_masks_connecting_min.json", |
| "skottie/skottie-phonehub-svgo-no-masks-connecting_min.json")); |
| DEF_BENCH(return new SkottieDecodeBench("skottie_phonehub_svgo_no_masks_onboard_min.json", |
| "skottie/skottie-phonehub-svgo-no-masks-onboard_min.json")); |
| DEF_BENCH(return new SkottieDecodeBench( |
| "skottie_phonehub_svgo_no_frills_connecting_min.json", |
| "skottie/skottie-phonehub-svgo-no-frills-connecting_min.json")); |
| DEF_BENCH(return new SkottieDecodeBench( |
| "skottie_phonehub_svgo_no_frills_generic_error_min.json", |
| "skottie/skottie-phonehub-svgo-no-frills-generic-error_min.json")); |
| DEF_BENCH( |
| return new SkottieDecodeBench("skottie_phonehub_svgo_no_frills_onboard_min.json", |
| "skottie/skottie-phonehub-svgo-no-frills-onboard_min.json")); |
| |
| DEF_BENCH(return new SkottiePictureDecodeBench("skottiepic_large", |
| "skottie/skottie-text-scale-to-fit-minmax.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench("skottiepic_medium", |
| "skottie/skottie-sphere-effect.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench("skottiepic_small", |
| "skottie/skottie_sample_multiframe.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench("skottiepic_phonehub_connecting.json", |
| "skottie/skottie-phonehub-connecting.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench("skottiepic_phonehub_generic_error.json", |
| "skottie/skottie-phonehub-generic-error.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench("skottiepic_phonehub_onboard.json", |
| "skottie/skottie-phonehub-onboard.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench("skottiepic_phonehub_svgo_connecting.json", |
| "skottie/skottie-phonehub-svgo-connecting.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench("skottiepic_phonehub_svgo_generic_error.json", |
| "skottie/skottie-phonehub-svgo-generic-error.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench("skottiepic_phonehub_svgo_onboard.json", |
| "skottie/skottie-phonehub-svgo-onboard.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench( |
| "skottiepic_phonehub_svgo_no_masks_connecting.json", |
| "skottie/skottie-phonehub-svgo-no-masks-connecting.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench( |
| "skottiepic_phonehub_svgo_no_masks_onboard.json", |
| "skottie/skottie-phonehub-svgo-no-masks-onboard.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench( |
| "skottiepic_phonehub_svgo_no_frills_connecting.json", |
| "skottie/skottie-phonehub-svgo-no-frills-connecting.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench( |
| "skottiepic_phonehub_svgo_no_frills_generic_error.json", |
| "skottie/skottie-phonehub-svgo-no-frills-generic-error.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench( |
| "skottiepic_phonehub_svgo_no_frills_onboard.json", |
| "skottie/skottie-phonehub-svgo-no-frills-onboard.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench("skottiepic_phonehub_connecting_min.json", |
| "skottie/skottie-phonehub-connecting_min.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench("skottiepic_phonehub_generic_error_min.json", |
| "skottie/skottie-phonehub-generic-error_min.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench("skottiepic_phonehub_onboard_min.json", |
| "skottie/skottie-phonehub-onboard_min.json")); |
| DEF_BENCH( |
| return new SkottiePictureDecodeBench("skottiepic_phonehub_svgo_connecting_min.json", |
| "skottie/skottie-phonehub-svgo-connecting_min.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench( |
| "skottiepic_phonehub_svgo_generic_error_min.json", |
| "skottie/skottie-phonehub-svgo-generic-error_min.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench("skottiepic_phonehub_svgo_onboard_min.json", |
| "skottie/skottie-phonehub-svgo-onboard_min.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench( |
| "skottiepic_phonehub_svgo_no_masks_connecting_min.json", |
| "skottie/skottie-phonehub-svgo-no-masks-connecting_min.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench( |
| "skottiepic_phonehub_svgo_no_masks_onboard_min.json", |
| "skottie/skottie-phonehub-svgo-no-masks-onboard_min.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench( |
| "skottiepic_phonehub_svgo_no_frills_connecting_min.json", |
| "skottie/skottie-phonehub-svgo-no-frills-connecting_min.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench( |
| "skottiepic_phonehub_svgo_no_frills_generic_error_min.json", |
| "skottie/skottie-phonehub-svgo-no-frills-generic-error_min.json")); |
| DEF_BENCH(return new SkottiePictureDecodeBench( |
| "skottiepic_phonehub_svgo_no_frills_onboard_min.json", |
| "skottie/skottie-phonehub-svgo-no-frills-onboard_min.json")); |
| |
| DEF_BENCH(return new BitmapDecodeBench("png_large" /*1600x1600*/, "images/mandrill_1600.png")); |
| DEF_BENCH(return new BitmapDecodeBench("png_medium" /* 512x 512*/, "images/mandrill_512.png")); |
| DEF_BENCH(return new BitmapDecodeBench("png_small" /* 32x 32*/, "images/mandrill_32.png")); |
| DEF_BENCH(return new BitmapDecodeBench("png_phonehub_connecting" , "images/Connecting.png")); |
| DEF_BENCH(return new BitmapDecodeBench("png_phonehub_generic_error", "images/Generic_Error.png")); |
| DEF_BENCH(return new BitmapDecodeBench("png_phonehub_onboard" , "images/Onboard.png")); |