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
This commit is contained in:
Ioana Stefan
2020-12-01 10:34:36 +00:00
parent cfa7acdf8e
commit 09bd8a6e38
4 changed files with 48 additions and 2 deletions

View File

@@ -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();
}
}

View File

@@ -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.

View File

@@ -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;

View File

@@ -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);