Track update count of IMMS#mMethodMap
InputMethodManagerService#buildInputMethodListLocked() is known be
one of the biggest contributors to CPU and I/O bandwidth consumed
by InputMethodManagerService (IMMS). To check when it gets called
and to see how a CL would affect its call count, it would be useful
if we can easily get the call count of that method.
With this CL, how many times IMMS#mMethodMap was rebuilt will be
included in the dumpsys.
Test: adb shell dumpsys input_method | grep "mMethodMapUpdateCount="
to make sure the count is increasing.
Bug: 32343335
Change-Id: I05850578cbf2e6adfea6c7e9b1fb9ec4e9d5e2c9
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index f0f50f0..121bc3c 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -227,6 +227,12 @@
new LruCache<>(SECURE_SUGGESTION_SPANS_MAX_SIZE);
private final InputMethodSubtypeSwitchingController mSwitchingController;
+ /**
+ * Tracks how many times {@link #mMethodMap} was updated.
+ */
+ @GuardedBy("mMethodMap")
+ private int mMethodMapUpdateCount = 0;
+
// Used to bring IME service up to visible adjustment while it is being shown.
final ServiceConnection mVisibleConnection = new ServiceConnection() {
@Override public void onServiceConnected(ComponentName name, IBinder service) {
@@ -3069,6 +3075,7 @@
}
mMethodList.clear();
mMethodMap.clear();
+ mMethodMapUpdateCount++;
mMyPackageMonitor.clearPackagesToMonitorComponentChangeLocked();
// Use for queryIntentServicesAsUser
@@ -4070,7 +4077,7 @@
synchronized (mMethodMap) {
p.println("Current Input Method Manager state:");
int N = mMethodList.size();
- p.println(" Input Methods:");
+ p.println(" Input Methods: mMethodMapUpdateCount=" + mMethodMapUpdateCount);
for (int i=0; i<N; i++) {
InputMethodInfo info = mMethodList.get(i);
p.println(" InputMethod #" + i + ":");