Loading core/java/android/view/ViewProtoLogGroups.java +8 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.view; import android.view.inputmethod.ImeTracker; import com.android.internal.protolog.ProtoLogGroup; /** Loading @@ -26,12 +28,15 @@ import com.android.internal.protolog.ProtoLogGroup; * * @hide */ final class ViewProtoLogGroups { final static ProtoLogGroup IME_INSETS_CONTROLLER = new ProtoLogGroup( public final class ViewProtoLogGroups { static final ProtoLogGroup IME_INSETS_CONTROLLER = new ProtoLogGroup( "IME_INSETS_CONTROLLER", "InsetsController", true /* enabled */); public static final ProtoLogGroup IME_TRACKER = new ProtoLogGroup( "IME_TRACKER", ImeTracker.TAG, true); final static ProtoLogGroup[] ALL_GROUPS = { static final ProtoLogGroup[] ALL_GROUPS = { IME_INSETS_CONTROLLER, IME_TRACKER, }; } core/java/android/view/inputmethod/ImeTracker.java +30 −13 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.view.inputmethod; import static android.view.InsetsController.ANIMATION_TYPE_HIDE; import static android.view.InsetsController.ANIMATION_TYPE_SHOW; import static android.view.ViewProtoLogGroups.IME_TRACKER; import static com.android.internal.inputmethod.InputMethodDebug.softInputDisplayReasonToString; import static com.android.internal.jank.Cuj.CUJ_IME_INSETS_HIDE_ANIMATION; Loading @@ -35,6 +36,7 @@ import android.os.Parcel; import android.os.Parcelable; import android.os.Process; import android.os.SystemProperties; import android.text.TextUtils; import android.util.Log; import android.view.InsetsController.AnimationType; import android.view.SurfaceControl; Loading @@ -46,6 +48,7 @@ import com.android.internal.inputmethod.InputMethodDebug; import com.android.internal.inputmethod.SoftInputShowHideReason; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.jank.InteractionJankMonitor.Configuration; import com.android.internal.protolog.ProtoLog; import com.android.internal.util.LatencyTracker; import java.lang.annotation.Retention; Loading Loading @@ -604,6 +607,10 @@ public interface ImeTracker { reloadSystemProperties(); // Update when system properties change. SystemProperties.addChangeCallback(this::reloadSystemProperties); if (android.tracing.Flags.imetrackerProtolog()) { // TODO(b/410517697): Register ProtoLog groups } } /** Whether {@link #onProgress} calls should be logged. */ Loading @@ -620,11 +627,11 @@ public interface ImeTracker { final var token = IInputMethodManagerGlobalInvoker.onStart(tag, uid, type, origin, reason, fromUser); Log.i(TAG, token.mTag + ": " + getOnStartPrefix(type) + " at " + Debug.originToString(origin) + " reason " + InputMethodDebug.softInputDisplayReasonToString(reason) + " fromUser " + fromUser, mLogStackTrace ? new Throwable() : null); log("%s: %s at %s reason %s fromUser %s%s", token.mTag, getOnStartPrefix(type), Debug.originToString(origin), InputMethodDebug.softInputDisplayReasonToString(reason), fromUser, mLogStackTrace ? " Stack trace=" + Log.getStackTraceString(new Throwable()) : "" ); return token; } Loading @@ -634,7 +641,7 @@ public interface ImeTracker { IInputMethodManagerGlobalInvoker.onProgress(token.mBinder, phase); if (mLogProgress) { Log.i(TAG, token.mTag + ": onProgress at " + Debug.phaseToString(phase)); log("%s: onProgress at %s", token.mTag, Debug.phaseToString(phase)); } } Loading @@ -643,13 +650,13 @@ public interface ImeTracker { if (token == null) return; IInputMethodManagerGlobalInvoker.onFailed(token, phase); Log.i(TAG, token.mTag + ": onFailed at " + Debug.phaseToString(phase)); log("%s: onFailed at %s", token.mTag, Debug.phaseToString(phase)); } @Override public void onTodo(@Nullable Token token, @Phase int phase) { if (token == null) return; Log.i(TAG, token.mTag + ": onTodo at " + Debug.phaseToString(phase)); log("%s: onTodo at %s", token.mTag, Debug.phaseToString(phase)); } @Override Loading @@ -657,7 +664,7 @@ public interface ImeTracker { if (token == null) return; IInputMethodManagerGlobalInvoker.onCancelled(token, phase); Log.i(TAG, token.mTag + ": onCancelled at " + Debug.phaseToString(phase)); log("%s: onCancelled at %s", token.mTag, Debug.phaseToString(phase)); } @Override Loading @@ -665,7 +672,7 @@ public interface ImeTracker { if (token == null) return; IInputMethodManagerGlobalInvoker.onShown(token); Log.i(TAG, token.mTag + ": onShown"); log("%s: onShown", token.mTag); } @Override Loading @@ -673,7 +680,7 @@ public interface ImeTracker { if (token == null) return; IInputMethodManagerGlobalInvoker.onHidden(token); Log.i(TAG, token.mTag + ": onHidden"); log("%s: onHidden", token.mTag); } @Override Loading @@ -681,7 +688,7 @@ public interface ImeTracker { if (token == null) return; IInputMethodManagerGlobalInvoker.onDispatched(token); Log.i(TAG, token.mTag + ": onDispatched"); log("%s: onDispatched", token.mTag); } @Override Loading @@ -689,7 +696,7 @@ public interface ImeTracker { if (token == null) return; // This is already sent to ImeTrackerService to mark it finished during onDispatched. Log.i(TAG, token.mTag + ": onUserFinished " + (shown ? "shown" : "hidden")); log("%s: onUserFinished %s", token.mTag, shown ? "shown" : "hidden"); } /** Loading Loading @@ -912,6 +919,16 @@ public interface ImeTracker { Context getAppContext(); } private static void log(@NonNull String messageString, @NonNull Object... args) { if (android.tracing.Flags.imetrackerProtolog()) { ProtoLog.i(IME_TRACKER, messageString, args); } else { // Log only to logcat final var message = TextUtils.formatSimple(messageString, args); Log.i(TAG, message); } } /** * A tracker instance which is in charge of communicating with {@link InteractionJankMonitor}. * This class disallows instantiating from outside, use {@link #forJank()} to get the singleton. Loading Loading
core/java/android/view/ViewProtoLogGroups.java +8 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.view; import android.view.inputmethod.ImeTracker; import com.android.internal.protolog.ProtoLogGroup; /** Loading @@ -26,12 +28,15 @@ import com.android.internal.protolog.ProtoLogGroup; * * @hide */ final class ViewProtoLogGroups { final static ProtoLogGroup IME_INSETS_CONTROLLER = new ProtoLogGroup( public final class ViewProtoLogGroups { static final ProtoLogGroup IME_INSETS_CONTROLLER = new ProtoLogGroup( "IME_INSETS_CONTROLLER", "InsetsController", true /* enabled */); public static final ProtoLogGroup IME_TRACKER = new ProtoLogGroup( "IME_TRACKER", ImeTracker.TAG, true); final static ProtoLogGroup[] ALL_GROUPS = { static final ProtoLogGroup[] ALL_GROUPS = { IME_INSETS_CONTROLLER, IME_TRACKER, }; }
core/java/android/view/inputmethod/ImeTracker.java +30 −13 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.view.inputmethod; import static android.view.InsetsController.ANIMATION_TYPE_HIDE; import static android.view.InsetsController.ANIMATION_TYPE_SHOW; import static android.view.ViewProtoLogGroups.IME_TRACKER; import static com.android.internal.inputmethod.InputMethodDebug.softInputDisplayReasonToString; import static com.android.internal.jank.Cuj.CUJ_IME_INSETS_HIDE_ANIMATION; Loading @@ -35,6 +36,7 @@ import android.os.Parcel; import android.os.Parcelable; import android.os.Process; import android.os.SystemProperties; import android.text.TextUtils; import android.util.Log; import android.view.InsetsController.AnimationType; import android.view.SurfaceControl; Loading @@ -46,6 +48,7 @@ import com.android.internal.inputmethod.InputMethodDebug; import com.android.internal.inputmethod.SoftInputShowHideReason; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.jank.InteractionJankMonitor.Configuration; import com.android.internal.protolog.ProtoLog; import com.android.internal.util.LatencyTracker; import java.lang.annotation.Retention; Loading Loading @@ -604,6 +607,10 @@ public interface ImeTracker { reloadSystemProperties(); // Update when system properties change. SystemProperties.addChangeCallback(this::reloadSystemProperties); if (android.tracing.Flags.imetrackerProtolog()) { // TODO(b/410517697): Register ProtoLog groups } } /** Whether {@link #onProgress} calls should be logged. */ Loading @@ -620,11 +627,11 @@ public interface ImeTracker { final var token = IInputMethodManagerGlobalInvoker.onStart(tag, uid, type, origin, reason, fromUser); Log.i(TAG, token.mTag + ": " + getOnStartPrefix(type) + " at " + Debug.originToString(origin) + " reason " + InputMethodDebug.softInputDisplayReasonToString(reason) + " fromUser " + fromUser, mLogStackTrace ? new Throwable() : null); log("%s: %s at %s reason %s fromUser %s%s", token.mTag, getOnStartPrefix(type), Debug.originToString(origin), InputMethodDebug.softInputDisplayReasonToString(reason), fromUser, mLogStackTrace ? " Stack trace=" + Log.getStackTraceString(new Throwable()) : "" ); return token; } Loading @@ -634,7 +641,7 @@ public interface ImeTracker { IInputMethodManagerGlobalInvoker.onProgress(token.mBinder, phase); if (mLogProgress) { Log.i(TAG, token.mTag + ": onProgress at " + Debug.phaseToString(phase)); log("%s: onProgress at %s", token.mTag, Debug.phaseToString(phase)); } } Loading @@ -643,13 +650,13 @@ public interface ImeTracker { if (token == null) return; IInputMethodManagerGlobalInvoker.onFailed(token, phase); Log.i(TAG, token.mTag + ": onFailed at " + Debug.phaseToString(phase)); log("%s: onFailed at %s", token.mTag, Debug.phaseToString(phase)); } @Override public void onTodo(@Nullable Token token, @Phase int phase) { if (token == null) return; Log.i(TAG, token.mTag + ": onTodo at " + Debug.phaseToString(phase)); log("%s: onTodo at %s", token.mTag, Debug.phaseToString(phase)); } @Override Loading @@ -657,7 +664,7 @@ public interface ImeTracker { if (token == null) return; IInputMethodManagerGlobalInvoker.onCancelled(token, phase); Log.i(TAG, token.mTag + ": onCancelled at " + Debug.phaseToString(phase)); log("%s: onCancelled at %s", token.mTag, Debug.phaseToString(phase)); } @Override Loading @@ -665,7 +672,7 @@ public interface ImeTracker { if (token == null) return; IInputMethodManagerGlobalInvoker.onShown(token); Log.i(TAG, token.mTag + ": onShown"); log("%s: onShown", token.mTag); } @Override Loading @@ -673,7 +680,7 @@ public interface ImeTracker { if (token == null) return; IInputMethodManagerGlobalInvoker.onHidden(token); Log.i(TAG, token.mTag + ": onHidden"); log("%s: onHidden", token.mTag); } @Override Loading @@ -681,7 +688,7 @@ public interface ImeTracker { if (token == null) return; IInputMethodManagerGlobalInvoker.onDispatched(token); Log.i(TAG, token.mTag + ": onDispatched"); log("%s: onDispatched", token.mTag); } @Override Loading @@ -689,7 +696,7 @@ public interface ImeTracker { if (token == null) return; // This is already sent to ImeTrackerService to mark it finished during onDispatched. Log.i(TAG, token.mTag + ": onUserFinished " + (shown ? "shown" : "hidden")); log("%s: onUserFinished %s", token.mTag, shown ? "shown" : "hidden"); } /** Loading Loading @@ -912,6 +919,16 @@ public interface ImeTracker { Context getAppContext(); } private static void log(@NonNull String messageString, @NonNull Object... args) { if (android.tracing.Flags.imetrackerProtolog()) { ProtoLog.i(IME_TRACKER, messageString, args); } else { // Log only to logcat final var message = TextUtils.formatSimple(messageString, args); Log.i(TAG, message); } } /** * A tracker instance which is in charge of communicating with {@link InteractionJankMonitor}. * This class disallows instantiating from outside, use {@link #forJank()} to get the singleton. Loading