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:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user