diff options
author | 2023-11-10 16:05:38 -0800 | |
---|---|---|
committer | 2024-01-17 23:52:44 -0800 | |
commit | 596fa1789c222ab224076b60de470d96865a5d6a (patch) | |
tree | a32706e444c19dd962dfa854bb940766a2ac0926 /libs/androidfw/LoadedArsc.cpp | |
parent | 4f48ffd43b182f31a199e54a39406cbd3d84abb0 (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.cpp | 3 |
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. |