Revert "[skottie] Cache attached assets"

This reverts commit ba3ed69a4ee4125750cd56ca9141c2b78fd65d22.

Reason for revert:

Looks like asset references can manipulate the timeline (preComps),
so we do need distinct instances for each ref.

May revisit in the future for cases where all instances share the same timeline.

Original change's description:
> [skottie] Cache attached assets
> 
> This avoids redundant instantiations for assets referenced multiple
> times.
> 
> TBR=
> 
> Change-Id: I8f61f73e695f0d567e55ef077c7d3fb344399f12
> Reviewed-on: https://skia-review.googlesource.com/101002
> Reviewed-by: Florin Malita <fmalita@chromium.org>
> Commit-Queue: Florin Malita <fmalita@chromium.org>

TBR=fmalita@chromium.org

Change-Id: I3e537ace9dfbf69a11f421992db033a0f8ad2aa9
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/101220
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
diff --git a/experimental/skottie/Skottie.cpp b/experimental/skottie/Skottie.cpp
index d0ebb5d..1ec4614 100644
--- a/experimental/skottie/Skottie.cpp
+++ b/experimental/skottie/Skottie.cpp
@@ -50,12 +50,7 @@
 
 namespace {
 
-struct AssetRec {
-    const Json::Value*      fJson;
-    sk_sp<sksg::RenderNode> fNode;
-};
-
-using AssetMap = SkTHashMap<SkString, AssetRec>;
+using AssetMap = SkTHashMap<SkString, const Json::Value*>;
 
 struct AttachContext {
     const ResourceProvider&    fResources;
@@ -681,33 +676,23 @@
     return draws.empty() ? nullptr : shape_wrapper;
 }
 
-sk_sp<sksg::RenderNode> AttachAsset(const Json::Value& jobject, AttachContext* ctx,
-                                    sk_sp<sksg::RenderNode>(proc)(const Json::Value&,
-                                                                  AttachContext*)) {
-    SkASSERT(jobject.isObject());
+sk_sp<sksg::RenderNode> AttachCompLayer(const Json::Value& layer, AttachContext* ctx) {
+    SkASSERT(layer.isObject());
 
     SkString refId;
-    if (!Parse(jobject["refId"], &refId) || refId.isEmpty()) {
-        LOG("!! Missing asset refId\n");
+    if (!Parse(layer["refId"], &refId) || refId.isEmpty()) {
+        LOG("!! Comp layer missing refId\n");
         return nullptr;
     }
 
-    auto* rec = ctx->fAssets.find(refId);
-    if (!rec) {
-        LOG("!! Asset not found: '%s'\n", refId.c_str());
+    const auto* comp = ctx->fAssets.find(refId);
+    if (!comp) {
+        LOG("!! Pre-comp not found: '%s'\n", refId.c_str());
         return nullptr;
     }
 
-    if (!rec->fNode) {
-        // TODO: cycle detection
-        rec->fNode = proc(*rec->fJson, ctx);
-    }
-
-    return rec->fNode;
-}
-
-sk_sp<sksg::RenderNode> AttachCompLayer(const Json::Value& jlayer, AttachContext* ctx) {
-    return AttachAsset(jlayer, ctx, AttachComposition);
+    // TODO: cycle detection
+    return AttachComposition(**comp, ctx);
 }
 
 sk_sp<sksg::RenderNode> AttachSolidLayer(const Json::Value& jlayer, AttachContext*) {
@@ -751,8 +736,22 @@
         SkImage::MakeFromEncoded(SkData::MakeFromStream(resStream.get(), resStream->getLength())));
 }
 
-sk_sp<sksg::RenderNode> AttachImageLayer(const Json::Value& jlayer, AttachContext* ctx) {
-    return AttachAsset(jlayer, ctx, AttachImageAsset);
+sk_sp<sksg::RenderNode> AttachImageLayer(const Json::Value& layer, AttachContext* ctx) {
+    SkASSERT(layer.isObject());
+
+    SkString refId;
+    if (!Parse(layer["refId"], &refId) || refId.isEmpty()) {
+        LOG("!! Image layer missing refId\n");
+        return nullptr;
+    }
+
+    const auto* jimage = ctx->fAssets.find(refId);
+    if (!jimage) {
+        LOG("!! Image asset not found: '%s'\n", refId.c_str());
+        return nullptr;
+    }
+
+    return AttachImageAsset(**jimage, ctx);
 }
 
 sk_sp<sksg::RenderNode> AttachNullLayer(const Json::Value& layer, AttachContext*) {
@@ -1089,7 +1088,7 @@
             continue;
         }
 
-        assets.set(ParseDefault(asset["id"], SkString()), {&asset, nullptr});
+        assets.set(ParseDefault(asset["id"], SkString()), &asset);
     }
 
     sksg::Scene::AnimatorList animators;