summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorIoana Stefan <ioanastefan@google.com>2020-12-01 10:34:36 +0000
committerIoana Stefan <ioanastefan@google.com>2020-12-02 16:48:40 +0000
commit09bd8a6e386c19a0e6e6afa38074bf335eefea49 (patch)
tree4837dfd0c00a987da549fff9b83d8353bde2b59b /core/java/android
parentcfa7acdf8e233c4bcb1038b5772bc4ee52263028 (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.java16
-rw-r--r--core/java/android/view/InsetsSourceConsumer.java12
-rw-r--r--core/java/android/view/ViewRootImpl.java9
-rw-r--r--core/java/android/view/inputmethod/InputMethodManager.java13
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);