aboutsummaryrefslogtreecommitdiffhomepage
path: root/experimental
diff options
context:
space:
mode:
authorGravatar Florin Malita <fmalita@chromium.org>2018-01-29 15:42:01 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-01-29 15:42:10 +0000
commitdd22cf96d3bd464b375130786d3cb0b3f44614d3 (patch)
tree51fc9065db7c3e860ff5296bf5010f27bfc1970b /experimental
parent1c80e99dd5b23ebc3f10c768857a21887ab9f090 (diff)
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>
Diffstat (limited to 'experimental')
-rw-r--r--experimental/skottie/Skottie.cpp55
1 files changed, 27 insertions, 28 deletions
diff --git a/experimental/skottie/Skottie.cpp b/experimental/skottie/Skottie.cpp
index d0ebb5dbb9..1ec461423d 100644
--- a/experimental/skottie/Skottie.cpp
+++ b/experimental/skottie/Skottie.cpp
@@ -50,12 +50,7 @@ namespace skottie {
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 @@ sk_sp<sksg::RenderNode> AttachShape(const Json::Value& jshape, AttachShapeContex
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 @@ sk_sp<sksg::RenderNode> AttachImageAsset(const Json::Value& jimage, AttachContex
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 @@ Animation::Animation(const ResourceProvider& resources,
continue;
}
- assets.set(ParseDefault(asset["id"], SkString()), {&asset, nullptr});
+ assets.set(ParseDefault(asset["id"], SkString()), &asset);
}
sksg::Scene::AnimatorList animators;