From 9025142bdd8511ca4eb049e0171f323023b65ffb Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Sun, 29 Oct 2023 08:00:02 +0100 Subject: [PATCH] AssetManager: speed up XML inflation using HashMap caching This makes XML inflation around 10 times faster. Inflating a layout XML with one TextView and one ImageView now takes 4 ms instead of 40 ms --- .../android/content/res/AssetManager.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/api-impl/android/content/res/AssetManager.java b/src/api-impl/android/content/res/AssetManager.java index 19528f27..2628b9f6 100644 --- a/src/api-impl/android/content/res/AssetManager.java +++ b/src/api-impl/android/content/res/AssetManager.java @@ -147,13 +147,18 @@ public final class AssetManager { } } + private Map tableBlockCache = new HashMap<>(); private EntryGroup tableBlockSearch(int resId) { + if (tableBlockCache.containsKey(resId)) { + return tableBlockCache.get(resId); + } EntryGroup ret = null; for (TableBlock tableBlock : tableBlocks) { ret = tableBlock.search(resId); if (ret != null) break; } + tableBlockCache.put(resId, ret); return ret; } @@ -913,6 +918,12 @@ public final class AssetManager { ResXmlPullParser parser = (ResXmlPullParser)set; outIndices[0] = 0; + Map xmlCache = new HashMap<>(); + if (set != null) { + for (int j=0; j