Avoid unnecessary ULocale.addLikelySubtags()
This CL gets rid of unnecessary operations from LocaleUtils.filterByLanguage() to speed it up, especially for the case where there is an IME that has many subtypes. ULocale.addLikelySubtags(ULocale) is known to be slow. Given an IME that has N IME subtypes, LocaleUtils.filterByLanguage() calls it no less than N times even when the only one system language is selected. This has contributed to device boot time (Bug 32343335) time and user switching time (Bug 28750507) since Android N where IME support started taking multi-locale into account. With this CL, LocaleUtils.filterByLanguage() no longer calls it for a subtype unless its language part of the locale matches one of user-selected system locales. The only assumption we made here is for any Locale objects l1 and l2 TextUtils.equals(l1.getLanguage(), l2.getLanguage()) and TextUtils.equals(ul1.getLanguage(), ul2.getLanguage()) are equivalent, where ul1 = ULocale.addLikelySubtags(ULocale.forLocale(l1)) and ul2 = ULocale.addLikelySubtags(ULocale.forLocale(l2)) This should be reasonable assumption, at least for locales we want to care about for IMEs. Under this assumption there is no behavior change at all. Test: bit FrameworksCoreTests:com.android.internal.inputmethod.LocaleUtilsTest Bug: 37647204 Change-Id: Ic96900fcaf3db8b7046a50b3fe6ad65aceada369
Loading
Please register or sign in to comment