summaryrefslogtreecommitdiff
path: root/libs/androidfw/LocaleDataLookup.cpp
diff options
context:
space:
mode:
author Victor Chang <vichang@google.com> 2025-01-29 15:26:44 +0000
committer Victor Chang <vichang@google.com> 2025-01-31 01:58:02 -0800
commitd0dde3c3533d2335293a94146bb089a90e50259e (patch)
treeccb197203a27a4f05fb47d6e9a5555bfa23db04f /libs/androidfw/LocaleDataLookup.cpp
parentb6c589db9e0d181c61b8816f17b3747ca52dbe1e (diff)
Add benchmarks for LocaleDataLookup
on aosp_cf_x86_64_phone-userdebug, the benchmark result is libandroidfw_benchmarks#BM_LocaleDataLookupIsLocaleRepresentative: PASSED (0ms) cpu_time_ns: 55.07607273354898 real_time_ns: 55.19976479889459 libandroidfw_benchmarks#BM_LocaleDataLookupLikelyScript: PASSED (0ms) cpu_time_ns: 87.99205759931041 real_time_ns: 88.19010674954154 With the unordered_set and unordered_map, the result is libandroidfw_benchmarks#BM_LocaleDataLookupIsLocaleRepresentative: PASSED (0ms) cpu_time_ns: 113.01179143336402 real_time_ns: 113.3695957412614 libandroidfw_benchmarks#BM_LocaleDataLookupLikelyScript: PASSED (1ms) cpu_time_ns: 109.63471229710265 real_time_ns: 109.91545630537807 With std::binary_search, the result is libandroidfw_benchmarks#BM_LocaleDataLookupIsLocaleRepresentative: PASSED (0ms) cpu_time_ns: 123.82590108826805 real_time_ns: 123.98891085230711 Let's keep the current implementation, and add a TODO about the disk size. Bug: 383096413 Test: atest libandroidfw_benchmarks Change-Id: Iaa5f1ab5ac4dcc6bbdd3c4b66fe129c61d75c1d1
Diffstat (limited to 'libs/androidfw/LocaleDataLookup.cpp')
-rw-r--r--libs/androidfw/LocaleDataLookup.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/libs/androidfw/LocaleDataLookup.cpp b/libs/androidfw/LocaleDataLookup.cpp
index 6e751a77f355..ea9e9a2d4280 100644
--- a/libs/androidfw/LocaleDataLookup.cpp
+++ b/libs/androidfw/LocaleDataLookup.cpp
@@ -7518,6 +7518,13 @@ const char* lookupLikelyScript(uint32_t packed_lang_region) {
}
}
+/*
+ * TODO: Consider turning the below switch statement into binary search
+ * to save the disk space when the table is larger in the future.
+ * Disassembled code shows that the jump table emitted by clang can be
+ * 4x larger than the data in disk size, but it depends on the optimization option.
+ * However, a switch statement will benefit from the future of compiler improvement.
+ */
bool isLocaleRepresentative(uint32_t language_and_region, const char* script) {
const uint64_t packed_locale =
((static_cast<uint64_t>(language_and_region)) << 32u) |