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

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

Remove ImfLock dependencies from *Repository

This CL reworks how the following two per-user data stores are
guaranteed to be initialized for each user with also making them
independent of ImfLock.

 * AdditionalSubtypeMapRepository
 * InputMethodSettingsRepository

Here is a quick summary on how the above per-user data stores will be
initialized.

 1. IMMS.Lifecycle(Context context) gets called
  1.1 InputMethodManagerService is initialized
  1.2 IMMS.Lifecycle#initializeUsersAsync() is called for existing
      users, which initializes the above two data stores in the
      I/O thread.
 2. IMMS.Lifecycle#onBootPhase(int phase) gets called for
    PHASE_ACTIVITY_MANAGER_READY
  2.1 IMMS#systemRunning() first calls #waitForUserInitialization()
      to make sure that initializeUsersAsync() is completed with
      a certain timeout (3 sec).
  2.2 IMMS#systemRunning() starts tasks with an assumption that the
      above per-user data stores are initialized.

Here are useful guarantees we can start relying on with this CL.

 * AdditionalSubtypeMap#load() is guaranteed to be called only once
   for each user on the I/O thread without ImfLock.
 * When IMMS#systemRunning() is running *Repository are already
   initialized (unless it's timed out).

This CL should improve the resource utilizations during boot time
without changing the observable semantics.

Bug: 343601565
Fix: 352354308
Test: presubmit
Test: manually verified by checking logcat
Flag: EXEMPT refactor
Change-Id: I4400519f133638c03205f7a8902f7e00c291eda8
parent d2715b13
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment