[skottie] Show load stats in SkottieSlide
TBR=
Change-Id: Ie3a1036d9a90cb16d2795134c453759aeff06e3c
Reviewed-on: https://skia-review.googlesource.com/124461
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
diff --git a/tools/viewer/SkottieSlide.cpp b/tools/viewer/SkottieSlide.cpp
index 77501d8..78cda5c 100644
--- a/tools/viewer/SkottieSlide.cpp
+++ b/tools/viewer/SkottieSlide.cpp
@@ -11,13 +11,51 @@
#include "SkCanvas.h"
#include "Skottie.h"
+static void draw_stats_box(SkCanvas* canvas, const skottie::Animation::Stats& stats) {
+ static constexpr SkRect kR = { 10, 10, 280, 120 };
+ static constexpr SkScalar kTextSize = 20;
+
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ paint.setColor(0xffeeeeee);
+ paint.setTextSize(kTextSize);
+
+ canvas->drawRect(kR, paint);
+
+ paint.setColor(SK_ColorBLACK);
+
+ const auto json_size = SkStringPrintf("Json size: %lu bytes",
+ stats.fJsonSize);
+ canvas->drawText(json_size.c_str(),
+ json_size.size(), kR.x() + 10, kR.y() + kTextSize * 1, paint);
+ const auto animator_count = SkStringPrintf("Animator count: %lu",
+ stats.fAnimatorCount);
+ canvas->drawText(animator_count.c_str(),
+ animator_count.size(), kR.x() + 10, kR.y() + kTextSize * 2, paint);
+ const auto json_parse_time = SkStringPrintf("Json parse time: %.3f ms",
+ stats.fJsonParseTimeMS);
+ canvas->drawText(json_parse_time.c_str(),
+ json_parse_time.size(), kR.x() + 10, kR.y() + kTextSize * 3, paint);
+ const auto scene_parse_time = SkStringPrintf("Scene build time: %.3f ms",
+ stats.fSceneParseTimeMS);
+ canvas->drawText(scene_parse_time.c_str(),
+ scene_parse_time.size(), kR.x() + 10, kR.y() + kTextSize * 4, paint);
+ const auto total_load_time = SkStringPrintf("Total load time: %.3f ms",
+ stats.fTotalLoadTimeMS);
+ canvas->drawText(total_load_time.c_str(),
+ total_load_time.size(), kR.x() + 10, kR.y() + kTextSize * 5, paint);
+
+ paint.setStyle(SkPaint::kStroke_Style);
+ canvas->drawRect(kR, paint);
+}
+
SkottieSlide::SkottieSlide(const SkString& name, const SkString& path)
: fPath(path) {
fName = name;
}
void SkottieSlide::load(SkScalar w, SkScalar h) {
- fAnimation = skottie::Animation::MakeFromFile(fPath.c_str());
+ fAnimation = skottie::Animation::MakeFromFile(fPath.c_str(), nullptr, &fAnimationStats);
fWinSize = SkSize::Make(w, h);
fTimeBase = 0; // force a time reset
@@ -47,6 +85,10 @@
SkAutoCanvasRestore acr(canvas, true);
const auto dstR = SkRect::MakeSize(fWinSize);
fAnimation->render(canvas, &dstR);
+
+ if (fShowAnimationStats) {
+ draw_stats_box(canvas, fAnimationStats);
+ }
}
}
@@ -66,10 +108,7 @@
bool SkottieSlide::onChar(SkUnichar c) {
switch (c) {
case 'I':
- if (fAnimation) {
- fShowAnimationInval = !fShowAnimationInval;
- fAnimation->setShowInval(fShowAnimationInval);
- }
+ fShowAnimationStats = !fShowAnimationStats;
break;
default:
break;
@@ -82,6 +121,7 @@
switch (state) {
case sk_app::Window::kUp_InputState:
fShowAnimationInval = !fShowAnimationInval;
+ fShowAnimationStats = !fShowAnimationStats;
fAnimation->setShowInval(fShowAnimationInval);
break;
default:
diff --git a/tools/viewer/SkottieSlide.h b/tools/viewer/SkottieSlide.h
index b5770a0..0bfe66e 100644
--- a/tools/viewer/SkottieSlide.h
+++ b/tools/viewer/SkottieSlide.h
@@ -9,8 +9,8 @@
#define SkottieSlide_DEFINED
#include "Slide.h"
+#include "Skottie.h"
-namespace skottie { class Animation; }
namespace sksg { class Scene; }
class SkottieSlide : public Slide {
@@ -32,9 +32,11 @@
private:
SkString fPath;
sk_sp<skottie::Animation> fAnimation;
+ skottie::Animation::Stats fAnimationStats;
SkSize fWinSize = SkSize::MakeEmpty();
SkMSec fTimeBase = 0;
- bool fShowAnimationInval = false;
+ bool fShowAnimationInval = false,
+ fShowAnimationStats = false;
typedef Slide INHERITED;
};