summaryrefslogtreecommitdiff
path: root/libs/androidfw/LoadedArsc.cpp
diff options
context:
space:
mode:
author Yurii Zubrytskyi <zyy@google.com> 2023-11-10 16:05:38 -0800
committer Yurii Zubrytskyi <zyy@google.com> 2024-01-17 23:52:44 -0800
commit596fa1789c222ab224076b60de470d96865a5d6a (patch)
treea32706e444c19dd962dfa854bb940766a2ac0926 /libs/androidfw/LoadedArsc.cpp
parent4f48ffd43b182f31a199e54a39406cbd3d84abb0 (diff)
[res] Optimize name lookups in idmap service
The most common operation when build idmaps is to find the resource ID by name. This is the least optimized operation in the current resources data structures, as they only expect ID -> value lookups This change adds an optional flag that creates a name->ID hash map inside ResStringPool, and use it when loading APKs in idmap2d Bug: 282215580 Test: build + boot + perf record Change-Id: I82f4d684cb48e2dcddcd677b882b11497c1c13b1
Diffstat (limited to 'libs/androidfw/LoadedArsc.cpp')
-rw-r--r--libs/androidfw/LoadedArsc.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/libs/androidfw/LoadedArsc.cpp b/libs/androidfw/LoadedArsc.cpp
index 02707e0e0c73..d9166a16cdea 100644
--- a/libs/androidfw/LoadedArsc.cpp
+++ b/libs/androidfw/LoadedArsc.cpp
@@ -454,7 +454,8 @@ const LoadedPackage* LoadedArsc::GetPackageById(uint8_t package_id) const {
std::unique_ptr<const LoadedPackage> LoadedPackage::Load(const Chunk& chunk,
package_property_t property_flags) {
ATRACE_NAME("LoadedPackage::Load");
- std::unique_ptr<LoadedPackage> loaded_package(new LoadedPackage());
+ const bool optimize_name_lookups = (property_flags & PROPERTY_OPTIMIZE_NAME_LOOKUPS) != 0;
+ std::unique_ptr<LoadedPackage> loaded_package(new LoadedPackage(optimize_name_lookups));
// typeIdOffset was added at some point, but we still must recognize apps built before this
// was added.