[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;
 };