diff options
| author | 2024-09-11 01:44:57 +0000 | |
|---|---|---|
| committer | 2024-09-13 19:03:42 +0000 | |
| commit | 830ddac8a4eb2ff8a7818f411396fd49d34249d4 (patch) | |
| tree | 701c8db77406eed5892bbbf5e1dddf9065263a8c | |
| parent | a9f5bdf324b33c4b48b428b6f06e331d48e6491f (diff) | |
Format IMMS#dump to display concurrent multi-users
New output format for `adb shell dumpsys input_method`:
```
Current Input Method Manager state:
mSystemReady=...
mInteractive=...
mConcurrentMultiUserModeEnabled=...
ENABLE_HIDE_IME_CAPTION_BAR=...
mStylusIds=...
mMenuControllerNew:
isShowing: ...
...
UserId=0
Input Methods:
InputMethod #0:
...
UserId=10
Input Methods:
InputMethod #0:
...
UserId=n
...
[UserDataRepository]
[ClientStates]
[StartInputHistory]
[SoftInputShowHideHistory]
[ImeTrackerService]
```
Bug: 351912418
Flag: EXEMPT refactor dumpsys input_method
Test: m
Change-Id: I604784d6cb637334d933d20890998daa29181849
| -rw-r--r-- | services/core/java/com/android/server/inputmethod/InputMethodManagerService.java | 193 |
1 files changed, 104 insertions, 89 deletions
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index f7478799527c..2bb2b7b21cce 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -6107,7 +6107,22 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. final int argUserId = parseUserIdFromDumpArgs(args); final Printer p = new PrintWriterPrinter(pw); p.println("Current Input Method Manager state:"); - p.println(" concurrentMultiUserModeEnabled=" + mConcurrentMultiUserModeEnabled); + p.println(" mSystemReady=" + mSystemReady); + p.println(" mInteractive=" + mIsInteractive); + p.println(" mConcurrentMultiUserModeEnabled=" + mConcurrentMultiUserModeEnabled); + p.println(" ENABLE_HIDE_IME_CAPTION_BAR=" + + InputMethodService.ENABLE_HIDE_IME_CAPTION_BAR); + synchronized (ImfLock.class) { + p.println(" mStylusIds=" + (mStylusIds != null + ? Arrays.toString(mStylusIds.toArray()) : "")); + } + if (Flags.imeSwitcherRevamp()) { + p.println(" mMenuControllerNew:"); + mMenuControllerNew.dump(p, " "); + } else { + p.println(" mMenuController:"); + mMenuController.dump(p, " "); + } if (mConcurrentMultiUserModeEnabled && argUserId == UserHandle.USER_NULL) { mUserDataRepository.forAllUserData( u -> dumpAsStringNoCheckForUser(u, fd, pw, args, isCritical)); @@ -6116,6 +6131,22 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. final var userData = getUserData(userId); dumpAsStringNoCheckForUser(userData, fd, pw, args, isCritical); } + + // TODO(b/365868861): Make StartInputHistory, SoftInputShowHideHistory and ImeTracker per + // user. + synchronized (ImfLock.class) { + p.println(" mStartInputHistory:"); + mStartInputHistory.dump(pw, " "); + + p.println(" mSoftInputShowHideHistory:"); + mSoftInputShowHideHistory.dump(pw, " "); + } + + p.println(" mImeTrackerService#History:"); + mImeTrackerService.dump(pw, " "); + + dumpUserRepository(p); + dumpClientStates(p); } @UserIdInt @@ -6140,104 +6171,33 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. userData.mUserId); final List<InputMethodInfo> methodList = settings.getMethodList(); int numImes = methodList.size(); - p.println(" Input Methods:"); + p.println(" Input Methods:"); for (int i = 0; i < numImes; i++) { InputMethodInfo info = methodList.get(i); - p.println(" InputMethod #" + i + ":"); - info.dump(p, " "); + p.println(" InputMethod #" + i + ":"); + info.dump(p, " "); } - // Dump ClientController#mClients - p.println(" ClientStates:"); - // TODO(b/324907325): Remove the suppress warnings once b/324907325 is fixed. - @SuppressWarnings("GuardedBy") Consumer<ClientState> clientControllerDump = c -> { - p.println(" " + c + ":"); - p.println(" client=" + c.mClient); - p.println(" fallbackInputConnection=" - + c.mFallbackInputConnection); - p.println(" sessionRequested=" - + c.mSessionRequested); - p.println(" sessionRequestedForAccessibility=" - + c.mSessionRequestedForAccessibility); - p.println(" curSession=" + c.mCurSession); - p.println(" selfReportedDisplayId=" + c.mSelfReportedDisplayId); - p.println(" uid=" + c.mUid); - p.println(" pid=" + c.mPid); - }; - mClientController.forAllClients(clientControllerDump); final var bindingController = userData.mBindingController; - p.println(" mCurMethodId=" + bindingController.getSelectedMethodId()); + p.println(" mCurMethodId=" + bindingController.getSelectedMethodId()); client = userData.mCurClient; - p.println(" mCurClient=" + client + " mCurSeq=" + p.println(" mCurClient=" + client + " mCurSeq=" + bindingController.getSequenceNumber()); - p.println(" mFocusedWindowPerceptible=" + mFocusedWindowPerceptible); + p.println(" mFocusedWindowPerceptible=" + mFocusedWindowPerceptible); userData.mImeBindingState.dump(/* prefix= */ " ", p); - - p.println(" mCurId=" + bindingController.getCurId() - + " mHaveConnection=" + bindingController.hasMainConnection() - + " mBoundToMethod=" + userData.mBoundToMethod + " mVisibleBound=" - + bindingController.isVisibleBound()); - - p.println(" mUserDataRepository="); - // TODO(b/324907325): Remove the suppress warnings once b/324907325 is fixed. - @SuppressWarnings("GuardedBy") Consumer<UserData> userDataDump = - u -> { - p.println(" mUserId=" + u.mUserId); - p.println(" unlocked=" + u.mIsUnlockingOrUnlocked.get()); - p.println(" hasMainConnection=" - + u.mBindingController.hasMainConnection()); - p.println(" isVisibleBound=" + u.mBindingController.isVisibleBound()); - p.println(" boundToMethod=" + u.mBoundToMethod); - p.println(" curClient=" + u.mCurClient); - if (u.mCurEditorInfo != null) { - p.println(" curEditorInfo:"); - u.mCurEditorInfo.dump(p, " ", false /* dumpExtras */); - } else { - p.println(" curEditorInfo: null"); - } - p.println(" imeBindingState:"); - u.mImeBindingState.dump(" ", p); - p.println(" enabledSession=" + u.mEnabledSession); - p.println(" inFullscreenMode=" + u.mInFullscreenMode); - p.println(" imeDrawsNavBar=" + u.mImeDrawsNavBar.get()); - p.println(" switchingController:"); - u.mSwitchingController.dump(p, " "); - p.println(" mLastEnabledInputMethodsStr=" - + u.mLastEnabledInputMethodsStr); - }; - mUserDataRepository.forAllUserData(userDataDump); - - if (Flags.imeSwitcherRevamp()) { - p.println(" menuControllerNew:"); - mMenuControllerNew.dump(p, " "); - } else { - p.println(" menuController:"); - mMenuController.dump(p, " "); - } - p.println(" mCurToken=" + bindingController.getCurToken()); - p.println(" mCurTokenDisplayId=" + bindingController.getCurTokenDisplayId()); - p.println(" mCurHostInputToken=" + bindingController.getCurHostInputToken()); - p.println(" mCurIntent=" + bindingController.getCurIntent()); + p.println(" mCurId=" + bindingController.getCurId()); + p.println(" mHaveConnection=" + bindingController.hasMainConnection()); + p.println(" mBoundToMethod=" + userData.mBoundToMethod); + p.println(" mVisibleBound=" + bindingController.isVisibleBound()); + p.println(" mCurToken=" + bindingController.getCurToken()); + p.println(" mCurTokenDisplayId=" + bindingController.getCurTokenDisplayId()); + p.println(" mCurHostInputToken=" + bindingController.getCurHostInputToken()); + p.println(" mCurIntent=" + bindingController.getCurIntent()); method = bindingController.getCurMethod(); - p.println(" mCurMethod=" + method); - p.println(" mEnabledSession=" + userData.mEnabledSession); + p.println(" mCurMethod=" + method); + p.println(" mEnabledSession=" + userData.mEnabledSession); final var visibilityStateComputer = userData.mVisibilityStateComputer; visibilityStateComputer.dump(pw, " "); - p.println(" mInFullscreenMode=" + userData.mInFullscreenMode); - p.println(" mSystemReady=" + mSystemReady + " mInteractive=" + mIsInteractive); - p.println(" mConcurrentMultiUserModeEnabled=" + mConcurrentMultiUserModeEnabled); - p.println(" ENABLE_HIDE_IME_CAPTION_BAR=" - + InputMethodService.ENABLE_HIDE_IME_CAPTION_BAR); - p.println(" mStylusIds=" + (mStylusIds != null - ? Arrays.toString(mStylusIds.toArray()) : "")); - - p.println(" mStartInputHistory:"); - mStartInputHistory.dump(pw, " "); - - p.println(" mSoftInputShowHideHistory:"); - mSoftInputShowHideHistory.dump(pw, " "); - - p.println(" mImeTrackerService#History:"); - mImeTrackerService.dump(pw, " "); + p.println(" mInFullscreenMode=" + userData.mInFullscreenMode); } // Exit here for critical dump, as remaining sections require IPCs to other processes. @@ -6288,6 +6248,61 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. } } + private void dumpClientStates(Printer p) { + p.println(" ClientStates:"); + // TODO(b/324907325): Remove the suppress warnings once b/324907325 is fixed. + @SuppressWarnings("GuardedBy") Consumer<ClientState> clientControllerDump = c -> { + p.println(" " + c + ":"); + p.println(" client=" + c.mClient); + p.println(" fallbackInputConnection=" + + c.mFallbackInputConnection); + p.println(" sessionRequested=" + + c.mSessionRequested); + p.println(" sessionRequestedForAccessibility=" + + c.mSessionRequestedForAccessibility); + p.println(" curSession=" + c.mCurSession); + p.println(" selfReportedDisplayId=" + c.mSelfReportedDisplayId); + p.println(" uid=" + c.mUid); + p.println(" pid=" + c.mPid); + }; + synchronized (ImfLock.class) { + mClientController.forAllClients(clientControllerDump); + } + } + + private void dumpUserRepository(Printer p) { + p.println(" mUserDataRepository="); + // TODO(b/324907325): Remove the suppress warnings once b/324907325 is fixed. + @SuppressWarnings("GuardedBy") Consumer<UserData> userDataDump = + u -> { + p.println(" mUserId=" + u.mUserId); + p.println(" unlocked=" + u.mIsUnlockingOrUnlocked.get()); + p.println(" hasMainConnection=" + + u.mBindingController.hasMainConnection()); + p.println(" isVisibleBound=" + u.mBindingController.isVisibleBound()); + p.println(" boundToMethod=" + u.mBoundToMethod); + p.println(" curClient=" + u.mCurClient); + if (u.mCurEditorInfo != null) { + p.println(" curEditorInfo:"); + u.mCurEditorInfo.dump(p, " ", false /* dumpExtras */); + } else { + p.println(" curEditorInfo: null"); + } + p.println(" imeBindingState:"); + u.mImeBindingState.dump(" ", p); + p.println(" enabledSession=" + u.mEnabledSession); + p.println(" inFullscreenMode=" + u.mInFullscreenMode); + p.println(" imeDrawsNavBar=" + u.mImeDrawsNavBar.get()); + p.println(" switchingController:"); + u.mSwitchingController.dump(p, " "); + p.println(" mLastEnabledInputMethodsStr=" + + u.mLastEnabledInputMethodsStr); + }; + synchronized (ImfLock.class) { + mUserDataRepository.forAllUserData(userDataDump); + } + } + @BinderThread @Override public void onShellCommand(@Nullable FileDescriptor in, @Nullable FileDescriptor out, |