From 87c291421544821fe9d10a08ee4e9f31b62d5052 Mon Sep 17 00:00:00 2001 From: Satoshi Kataoka Date: Wed, 31 Jul 2013 23:11:54 +0900 Subject: [PATCH] Add a debug utility for InputMethodUtils Change-Id: I59f6001bf20640e36e19b09cf117b8579120ba7d --- .../inputmethod/InputMethodUtils.java | 22 +++++++++++++++++++ .../server/InputMethodManagerService.java | 3 ++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/core/java/com/android/internal/inputmethod/InputMethodUtils.java b/core/java/com/android/internal/inputmethod/InputMethodUtils.java index 7b4352e66f3ff..c7b5697f55af8 100644 --- a/core/java/com/android/internal/inputmethod/InputMethodUtils.java +++ b/core/java/com/android/internal/inputmethod/InputMethodUtils.java @@ -72,6 +72,28 @@ public class InputMethodUtils { } return sb.toString(); } + + public static String getApiCallStack() { + String apiCallStack = ""; + try { + throw new RuntimeException(); + } catch (RuntimeException e) { + final StackTraceElement[] frames = e.getStackTrace(); + for (int j = 1; j < frames.length; ++j) { + final String tempCallStack = frames[j].toString(); + if (TextUtils.isEmpty(apiCallStack)) { + // Overwrite apiCallStack if it's empty + apiCallStack = tempCallStack; + } else if (tempCallStack.indexOf("Transact(") < 0) { + // Overwrite apiCallStack if it's not a binder call + apiCallStack = tempCallStack; + } else { + break; + } + } + } + return apiCallStack; + } // ---------------------------------------------------------------------- public static boolean isSystemIme(InputMethodInfo inputMethod) { diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java index 8200a690e0dba..da584e2012b4d 100644 --- a/services/java/com/android/server/InputMethodManagerService.java +++ b/services/java/com/android/server/InputMethodManagerService.java @@ -899,7 +899,8 @@ public class InputMethodManagerService extends IInputMethodManager.Stub Slog.d(TAG, "--- calledFromForegroundUserOrSystemProcess ? " + "calling uid = " + uid + " system uid = " + Process.SYSTEM_UID + " calling userId = " + userId + ", foreground user id = " - + mSettings.getCurrentUserId() + ", calling pid = " + Binder.getCallingPid()); + + mSettings.getCurrentUserId() + ", calling pid = " + Binder.getCallingPid() + + InputMethodUtils.getApiCallStack()); } if (uid == Process.SYSTEM_UID || userId == mSettings.getCurrentUserId()) { return true;