From 37594626b53bb11d2a57cf48d1597c6bb06f69d1 Mon Sep 17 00:00:00 2001 From: Nick Lefever Date: Tue, 10 Sep 2024 07:26:38 -0700 Subject: [PATCH] Cache vector image detection for assets (#46415) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/46415 Changelog: [Internal] Cache the results checking for vector content. This check is decompressing the asset content and parsing XML to check for vector graphics. Caching the result per context/asset name removes the need to parse the content on each image assignment. Reviewed By: Abbondanzo Differential Revision: D62436412 --- .../views/imagehelper/ResourceDrawableIdHelper.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/ResourceDrawableIdHelper.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/ResourceDrawableIdHelper.kt index 12f24b5aa892..496da026c492 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/ResourceDrawableIdHelper.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/ResourceDrawableIdHelper.kt @@ -19,6 +19,7 @@ import org.xmlpull.v1.XmlPullParser @ThreadSafe public class ResourceDrawableIdHelper private constructor() { private val resourceDrawableIdMap: MutableMap = HashMap() + private val vectorDrawableCheckCache: MutableMap> = HashMap() @Synchronized public fun clear() { @@ -64,7 +65,15 @@ public class ResourceDrawableIdHelper private constructor() { } public fun isVectorDrawable(context: Context, name: String): Boolean { - return getOpeningXmlTag(context, name) == "vector" + val cachedResult = vectorDrawableCheckCache[context]?.get(name); + if (cachedResult != null) { + return cachedResult + } + + + val result = getOpeningXmlTag(context, name) == "vector" + vectorDrawableCheckCache.getOrPut(context, { HashMap() }).put(name, result) + return result } /**