[skottie] Pass asset IDs to ResourceProvider::loadImageAsset
Also use explicit IDs as keys for the image asset cache.
Change-Id: I359ff026063318ace524d1205b4f0b3e7a6e1d5d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/227783
Commit-Queue: Florin Malita <fmalita@google.com>
Reviewed-by: Isabel Ren <isabelren@google.com>
diff --git a/modules/canvaskit/skottie_bindings.cpp b/modules/canvaskit/skottie_bindings.cpp
index abdaf43..bfce156 100644
--- a/modules/canvaskit/skottie_bindings.cpp
+++ b/modules/canvaskit/skottie_bindings.cpp
@@ -48,8 +48,9 @@
}
sk_sp<skottie::ImageAsset> loadImageAsset(const char[] /* path */,
- const char name[]) const override {
- // For CK/Skottie we ignore paths and identify images based solely on name.
+ const char name[],
+ const char[] /* id */) const override {
+ // For CK/Skottie we ignore paths & IDs, and identify images based solely on name.
if (auto data = this->findAsset(name)) {
return skottie_utils::MultiFrameImageAsset::Make(std::move(data), true /* predecode */);
}
diff --git a/modules/skottie/gm/SkottieGM.cpp b/modules/skottie/gm/SkottieGM.cpp
index 627f367..f95ee1c 100644
--- a/modules/skottie/gm/SkottieGM.cpp
+++ b/modules/skottie/gm/SkottieGM.cpp
@@ -210,7 +210,7 @@
private:
class MultiFrameResourceProvider final : public skottie::ResourceProvider {
public:
- sk_sp<ImageAsset> loadImageAsset(const char[], const char[]) const override {
+ sk_sp<ImageAsset> loadImageAsset(const char[], const char[], const char[]) const override {
return skottie_utils::MultiFrameImageAsset::Make(
GetResourceAsData("images/flightAnim.gif"));
}
diff --git a/modules/skottie/include/Skottie.h b/modules/skottie/include/Skottie.h
index 538e5f3..689b2e0 100644
--- a/modules/skottie/include/Skottie.h
+++ b/modules/skottie/include/Skottie.h
@@ -72,6 +72,11 @@
* ImageAsset proxy.
*/
virtual sk_sp<ImageAsset> loadImageAsset(const char resource_path[],
+ const char resource_name[],
+ const char resource_id[]) const;
+
+ // DEPRECATED - to be removed
+ virtual sk_sp<ImageAsset> loadImageAsset(const char resource_path[],
const char resource_name[]) const;
/**
diff --git a/modules/skottie/src/Skottie.cpp b/modules/skottie/src/Skottie.cpp
index 3f958e8..208e1da 100644
--- a/modules/skottie/src/Skottie.cpp
+++ b/modules/skottie/src/Skottie.cpp
@@ -398,6 +398,12 @@
return nullptr;
}
+sk_sp<ImageAsset> ResourceProvider::loadImageAsset(const char path[], const char name[],
+ const char id[]) const {
+ // temporary redirect for legacy clients.
+ return this->loadImageAsset(path, name);
+}
+
sk_sp<ImageAsset> ResourceProvider::loadImageAsset(const char path[], const char name[]) const {
return nullptr;
}
diff --git a/modules/skottie/src/layers/ImageLayer.cpp b/modules/skottie/src/layers/ImageLayer.cpp
index 0b6df2d..32f8ed4 100644
--- a/modules/skottie/src/layers/ImageLayer.cpp
+++ b/modules/skottie/src/layers/ImageLayer.cpp
@@ -21,21 +21,20 @@
AnimationBuilder::loadImageAsset(const skjson::ObjectValue& jimage) const {
const skjson::StringValue* name = jimage["p"];
const skjson::StringValue* path = jimage["u"];
- if (!name) {
+ const skjson::StringValue* id = jimage["id"];
+ if (!name || !path || !id) {
return nullptr;
}
- const auto name_cstr = name->begin(),
- path_cstr = path ? path->begin() : "";
- const auto res_id = SkStringPrintf("%s|%s", path_cstr, name_cstr);
+ const SkString res_id(id->begin());
if (auto* cached_info = fImageAssetCache.find(res_id)) {
return cached_info;
}
- auto asset = fResourceProvider->loadImageAsset(path_cstr, name_cstr);
+ auto asset = fResourceProvider->loadImageAsset(path->begin(), name->begin(), id->begin());
if (!asset) {
- this->log(Logger::Level::kError, nullptr,
- "Could not load image asset: %s/%s.", path_cstr, name_cstr);
+ this->log(Logger::Level::kError, nullptr, "Could not load image asset: %s/%s (id: '%s').",
+ path->begin(), name->begin(), id->begin());
return nullptr;
}
diff --git a/modules/skottie/utils/SkottieUtils.cpp b/modules/skottie/utils/SkottieUtils.cpp
index 191d834..980d84f 100644
--- a/modules/skottie/utils/SkottieUtils.cpp
+++ b/modules/skottie/utils/SkottieUtils.cpp
@@ -93,7 +93,8 @@
}
sk_sp<skottie::ImageAsset> FileResourceProvider::loadImageAsset(const char resource_path[],
- const char resource_name[]) const {
+ const char resource_name[],
+ const char[]) const {
return MultiFrameImageAsset::Make(this->load(resource_path, resource_name));
}
diff --git a/modules/skottie/utils/SkottieUtils.h b/modules/skottie/utils/SkottieUtils.h
index 0783888..7d26d1e 100644
--- a/modules/skottie/utils/SkottieUtils.h
+++ b/modules/skottie/utils/SkottieUtils.h
@@ -55,7 +55,8 @@
sk_sp<SkData> load(const char resource_path[], const char resource_name[]) const override;
- sk_sp<skottie::ImageAsset> loadImageAsset(const char[], const char []) const override;
+ sk_sp<skottie::ImageAsset> loadImageAsset(const char[], const char[],
+ const char[]) const override;
private:
explicit FileResourceProvider(SkString);