aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/viewer/SkottieSlide.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/viewer/SkottieSlide.cpp')
-rw-r--r--tools/viewer/SkottieSlide.cpp50
1 files changed, 45 insertions, 5 deletions
diff --git a/tools/viewer/SkottieSlide.cpp b/tools/viewer/SkottieSlide.cpp
index 77501d8a9f..78cda5cbda 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 @@ void SkottieSlide::draw(SkCanvas* canvas) {
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::animate(const SkAnimTimer& timer) {
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 @@ bool SkottieSlide::onMouse(SkScalar x, SkScalar y, sk_app::Window::InputState st
switch (state) {
case sk_app::Window::kUp_InputState:
fShowAnimationInval = !fShowAnimationInval;
+ fShowAnimationStats = !fShowAnimationStats;
fAnimation->setShowInval(fShowAnimationInval);
break;
default: