Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Skip to content
Commit 91a851e4 authored by Yohei Yukawa's avatar Yohei Yukawa
Browse files

Minimize invocations of queryIntentServices() in IMMS

This CL reworks how updates on user locking state and additional
subtypes are reflected into the InputMethodSettingsRepository.

Previously we have called

  InputMethodManagerService#queryInputMethodServicesInternal()

in a relatively ad-hoc manner, meaning that we have called it whenever
we need a new InputMethodMap that is different from the one stored in
InputMethodSettingsRepository.

With this CL

  UserData#mRawInputMethodMap

keeps track of the raw results of Context#queryIntentServices() for
both direct-boot aware IMEs and direct-boot unaware IMEs in a form
that additional subtypes are not yet taken into account. The cache
allows us to reconstruct the required InputMethodMap on the fly
without calling Context#queryIntentServices() again. This is a huge
win in terms of both performance and code simplicity.

For instance, the following IME APIs no longer need to rely on
Context#queryIntentServices() internally, which means that these APIs
will return much sooner than before, and more importantly without
depending on ActivityManagerService global lock.

 * InputMethodManager#setAdditionalInputMethodSubtypes()
 * InputMethodManager#getInputMethodListAsUser()
           with DirectBootAwareness.ANY

Overall there should be no observable behavior change, and wxisting
end-to-end CTS tests should verify such expectations.

Fix: 354256119
Test: atest CtsInputMethodTestCases
Test: atest CtsInputMethodInstallTestCases
Test: atest FrameworksInputMethodSystemServerTest
Flag: EXEMPT refactor
Change-Id: I4cb07b0c776143b2f477ef8bb383ad4e0ed0b204
parent 5a1286dc
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment