diff options
| author | Ioana Stefan <ioanastefan@google.com> | 2020-12-01 10:34:36 +0000 |
|---|---|---|
| committer | Ioana Stefan <ioanastefan@google.com> | 2020-12-02 16:48:40 +0000 |
| commit | 09bd8a6e386c19a0e6e6afa38074bf335eefea49 (patch) | |
| tree | 4837dfd0c00a987da549fff9b83d8353bde2b59b /core/java/android | |
| parent | cfa7acdf8e233c4bcb1038b5772bc4ee52263028 (diff) | |
Add extra methods to trigger IME tracing dumps
This change adds extra methods for triggering IME dumps, based on the
places decided on go/ime-tracing-opt.
Bug: 154348613
Test: record an IME trace through ADB Connect in Winscope and visualize
dumps at the new places added
Change-Id: Idbe8d512c0f1b3d3aca525f160f6e45d657e3724
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/view/InsetsController.java | 16 | ||||
| -rw-r--r-- | core/java/android/view/InsetsSourceConsumer.java | 12 | ||||
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 9 | ||||
| -rw-r--r-- | core/java/android/view/inputmethod/InputMethodManager.java | 13 |
4 files changed, 48 insertions, 2 deletions
diff --git a/core/java/android/view/InsetsController.java b/core/java/android/view/InsetsController.java index 1c82619a61ad..33be381948f3 100644 --- a/core/java/android/view/InsetsController.java +++ b/core/java/android/view/InsetsController.java @@ -1057,6 +1057,10 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation boolean canRun = false; if (show) { // Show request + if (fromIme) { + ImeTracing.getInstance().triggerClientDump( + "ImeInsetsSourceConsumer#requestShow", mHost.getInputMethodManager()); + } switch(consumer.requestShow(fromIme)) { case ShowResult.SHOW_IMMEDIATELY: canRun = true; @@ -1096,8 +1100,16 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation + fromIme); // We don't have a control at the moment. However, we still want to update requested // visibility state such that in case we get control, we can apply show animation. + if (fromIme) { + ImeTracing.getInstance().triggerClientDump( + "InsetsSourceConsumer#show", mHost.getInputMethodManager()); + } consumer.show(fromIme); } else if (animationType == ANIMATION_TYPE_HIDE) { + if (fromIme) { + ImeTracing.getInstance().triggerClientDump( + "InsetsSourceConsumer#hide", mHost.getInputMethodManager()); + } consumer.hide(); } } @@ -1217,8 +1229,8 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation private void applyLocalVisibilityOverride() { for (int i = mSourceConsumers.size() - 1; i >= 0; i--) { - final InsetsSourceConsumer controller = mSourceConsumers.valueAt(i); - controller.applyLocalVisibilityOverride(); + final InsetsSourceConsumer consumer = mSourceConsumers.valueAt(i); + consumer.applyLocalVisibilityOverride(); } } diff --git a/core/java/android/view/InsetsSourceConsumer.java b/core/java/android/view/InsetsSourceConsumer.java index 537fd42d7135..7ee337137176 100644 --- a/core/java/android/view/InsetsSourceConsumer.java +++ b/core/java/android/view/InsetsSourceConsumer.java @@ -25,6 +25,7 @@ import static android.view.InsetsSourceConsumerProto.IS_REQUESTED_VISIBLE; import static android.view.InsetsSourceConsumerProto.PENDING_FRAME; import static android.view.InsetsSourceConsumerProto.PENDING_VISIBLE_FRAME; import static android.view.InsetsSourceConsumerProto.SOURCE_CONTROL; +import static android.view.InsetsState.ITYPE_IME; import static android.view.InsetsState.getDefaultVisibility; import static android.view.InsetsState.toPublicType; @@ -34,6 +35,7 @@ import android.annotation.IntDef; import android.annotation.Nullable; import android.graphics.Rect; import android.util.Log; +import android.util.imetracing.ImeTracing; import android.util.proto.ProtoOutputStream; import android.view.InsetsState.InternalInsetsType; import android.view.SurfaceControl.Transaction; @@ -108,6 +110,10 @@ public class InsetsSourceConsumer { */ public void setControl(@Nullable InsetsSourceControl control, @InsetsType int[] showTypes, @InsetsType int[] hideTypes) { + if (mType == ITYPE_IME) { + ImeTracing.getInstance().triggerClientDump("InsetsSourceConsumer#setControl", + mController.getHost().getInputMethodManager()); + } if (mSourceControl == control) { return; } @@ -237,6 +243,12 @@ public class InsetsSourceConsumer { final boolean isVisible = source != null ? source.isVisible() : getDefaultVisibility(mType); final boolean hasControl = mSourceControl != null; + if (mType == ITYPE_IME) { + ImeTracing.getInstance().triggerClientDump( + "InsetsSourceConsumer#applyLocalVisibilityOverride", + mController.getHost().getInputMethodManager()); + } + // We still need to let the legacy app know the visibility change even if we don't have the // control. If we don't have the source, we don't change the requested visibility for making // the callback behavior compatible. diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 2bea0d6b4b04..800dabb2d21f 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -19,6 +19,7 @@ package android.view; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; import static android.view.InputDevice.SOURCE_CLASS_NONE; +import static android.view.InsetsState.ITYPE_IME; import static android.view.InsetsState.ITYPE_NAVIGATION_BAR; import static android.view.InsetsState.ITYPE_STATUS_BAR; import static android.view.InsetsState.SIZE; @@ -7914,6 +7915,10 @@ public final class ViewRootImpl implements ViewParent, if (mTranslator != null) { mTranslator.translateInsetsStateInScreenToAppWindow(insetsState); } + if (insetsState != null && insetsState.getSource(ITYPE_IME).isVisible()) { + ImeTracing.getInstance().triggerClientDump("ViewRootImpl#dispatchInsetsChanged", + getInsetsController().getHost().getInputMethodManager()); + } mHandler.obtainMessage(MSG_INSETS_CHANGED, insetsState).sendToTarget(); } @@ -7930,6 +7935,10 @@ public final class ViewRootImpl implements ViewParent, if (mTranslator != null) { mTranslator.translateInsetsStateInScreenToAppWindow(insetsState); } + if (insetsState != null && insetsState.getSource(ITYPE_IME).isVisible()) { + ImeTracing.getInstance().triggerClientDump("ViewRootImpl#dispatchInsetsControlChanged", + getInsetsController().getHost().getInputMethodManager()); + } SomeArgs args = SomeArgs.obtain(); args.arg1 = insetsState; args.arg2 = activeControls; diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java index 8d2c2d96637f..1708355136d8 100644 --- a/core/java/android/view/inputmethod/InputMethodManager.java +++ b/core/java/android/view/inputmethod/InputMethodManager.java @@ -596,6 +596,8 @@ public final class InputMethodManager { */ @Override public void finishInput() { + ImeTracing.getInstance().triggerClientDump( + "InputMethodManager.DelegateImpl#finishInput", InputMethodManager.this); synchronized (mH) { finishInputLocked(); } @@ -639,6 +641,10 @@ public final class InputMethodManager { int startInputFlags = getStartInputFlags(focusedView, 0); startInputFlags |= StartInputFlags.WINDOW_GAINED_FOCUS; + ImeTracing.getInstance().triggerClientDump( + "InputMethodManager.DelegateImpl#startInputAsyncOnWindowFocusGain", + InputMethodManager.this); + final ImeFocusController controller = getFocusController(); if (controller == null) { return; @@ -948,6 +954,9 @@ public final class InputMethodManager { case MSG_APPLY_IME_VISIBILITY: { synchronized (mH) { if (mImeInsetsConsumer != null) { + ImeTracing.getInstance().triggerClientDump( + "ImeInsetsSourceConsumer#applyImeVisibility", + InputMethodManager.this); mImeInsetsConsumer.applyImeVisibility(msg.arg1 != 0); } } @@ -1852,6 +1861,8 @@ public final class InputMethodManager { * {@link #HIDE_NOT_ALWAYS} bit set. **/ public void toggleSoftInputFromWindow(IBinder windowToken, int showFlags, int hideFlags) { + ImeTracing.getInstance().triggerClientDump( + "InputMethodManager#toggleSoftInputFromWindow", InputMethodManager.this); synchronized (mH) { final View servedView = getServedViewLocked(); if (servedView == null || servedView.getWindowToken() != windowToken) { @@ -1879,6 +1890,8 @@ public final class InputMethodManager { * {@link #HIDE_NOT_ALWAYS} bit set. */ public void toggleSoftInput(int showFlags, int hideFlags) { + ImeTracing.getInstance().triggerClientDump( + "InputMethodManager#toggleSoftInput", InputMethodManager.this); if (mCurMethod != null) { try { mCurMethod.toggleSoftInput(showFlags, hideFlags); |
