/* * 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/SkPictureRecorder.h" #include "modules/skottie/include/Skottie.h" #include "tools/Resources.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 == kNonRendering_Backend; } const char* onGetName() final { return fName.c_str(); } void onDelayedSetup() override { fData = GetResourceAsData(fSource); SkASSERT(fData); } protected: sk_sp 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(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::Make(reinterpret_cast(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::Make(reinterpret_cast(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")); 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 BitmapDecodeBench("png_large" , "images/mandrill_1600.png"));// 1600x1600 DEF_BENCH(return new BitmapDecodeBench("png_medium", "images/mandrill_512.png")); // 512x 512 DEF_BENCH(return new BitmapDecodeBench("png_small" , "images/mandrill_32.png")); // 32x 32