ime tracing: refactoring prior perfetto migration
Bug: 276433199
Test: capture/visualize IME traces with winscope
Change-Id: I99ef8b90effcd7213bb0e18a4f8432cb6eb5640d
diff --git a/core/java/com/android/internal/inputmethod/ImeTracing.java b/core/java/com/android/internal/inputmethod/ImeTracing.java
index db95012..ee9c3aa 100644
--- a/core/java/com/android/internal/inputmethod/ImeTracing.java
+++ b/core/java/com/android/internal/inputmethod/ImeTracing.java
@@ -16,6 +16,7 @@
package com.android.internal.inputmethod;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.app.ActivityThread;
@@ -144,7 +145,7 @@
*
* @param where Place where the trace was triggered.
*/
- public abstract void triggerManagerServiceDump(String where);
+ public abstract void triggerManagerServiceDump(String where, @NonNull ServiceDumper dumper);
/**
* Being called while taking a bugreport so that tracing files can be included in the bugreport
diff --git a/core/java/com/android/internal/inputmethod/ImeTracingClientImpl.java b/core/java/com/android/internal/inputmethod/ImeTracingClientImpl.java
index 95ed4ed..8a684d3 100644
--- a/core/java/com/android/internal/inputmethod/ImeTracingClientImpl.java
+++ b/core/java/com/android/internal/inputmethod/ImeTracingClientImpl.java
@@ -83,7 +83,7 @@
}
@Override
- public void triggerManagerServiceDump(String where) {
+ public void triggerManagerServiceDump(String where, @NonNull ServiceDumper dumper) {
// Intentionally left empty, this is implemented in ImeTracingServerImpl
}
diff --git a/core/java/com/android/internal/inputmethod/ImeTracingServerImpl.java b/core/java/com/android/internal/inputmethod/ImeTracingServerImpl.java
index edd74f6..937f94c 100644
--- a/core/java/com/android/internal/inputmethod/ImeTracingServerImpl.java
+++ b/core/java/com/android/internal/inputmethod/ImeTracingServerImpl.java
@@ -18,6 +18,7 @@
import static android.os.Build.IS_USER;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.SystemClock;
import android.util.Log;
@@ -116,7 +117,7 @@
}
@Override
- public void triggerManagerServiceDump(String where) {
+ public void triggerManagerServiceDump(String where, @NonNull ServiceDumper dumper) {
if (!isEnabled() || !isAvailable()) {
return;
}
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index 44a200e..13314a1 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -382,6 +382,16 @@
@MultiUserUnawareField
Future<?> mImeDrawsImeNavBarResLazyInitFuture;
+ private final ImeTracing.ServiceDumper mDumper = new ImeTracing.ServiceDumper() {
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void dumpToProto(ProtoOutputStream proto, @Nullable byte[] icProto) {
+ dumpDebug(proto, InputMethodManagerServiceTraceProto.INPUT_METHOD_MANAGER_SERVICE);
+ }
+ };
+
static class SessionState {
final ClientState mClient;
final IInputMethodInvoker mMethod;
@@ -3099,7 +3109,7 @@
Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "IMMS.showSoftInput");
int uid = Binder.getCallingUid();
ImeTracing.getInstance().triggerManagerServiceDump(
- "InputMethodManagerService#showSoftInput");
+ "InputMethodManagerService#showSoftInput", mDumper);
synchronized (ImfLock.class) {
if (!canInteractWithImeLocked(uid, client, "showSoftInput", statsToken)) {
ImeTracker.forLogging().onFailed(
@@ -3198,7 +3208,7 @@
Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "IMMS.startStylusHandwriting");
try {
ImeTracing.getInstance().triggerManagerServiceDump(
- "InputMethodManagerService#startStylusHandwriting");
+ "InputMethodManagerService#startStylusHandwriting", mDumper);
int uid = Binder.getCallingUid();
synchronized (ImfLock.class) {
if (!acceptingDelegation) {
@@ -3426,7 +3436,7 @@
ResultReceiver resultReceiver, @SoftInputShowHideReason int reason) {
int uid = Binder.getCallingUid();
ImeTracing.getInstance().triggerManagerServiceDump(
- "InputMethodManagerService#hideSoftInput");
+ "InputMethodManagerService#hideSoftInput", mDumper);
synchronized (ImfLock.class) {
if (!canInteractWithImeLocked(uid, client, "hideSoftInput", statsToken)) {
if (isInputShownLocked()) {
@@ -3564,7 +3574,7 @@
Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER,
"IMMS.startInputOrWindowGainedFocus");
ImeTracing.getInstance().triggerManagerServiceDump(
- "InputMethodManagerService#startInputOrWindowGainedFocus");
+ "InputMethodManagerService#startInputOrWindowGainedFocus", mDumper);
final InputBindResult result;
synchronized (ImfLock.class) {
// If the system is not yet ready, we shouldn't be running third party code.