Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 09bd8a6e authored by Ioana Stefan's avatar Ioana Stefan
Browse files

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
parent cfa7acdf
Loading
Loading
Loading
Loading
+14 −2
Original line number Original line Diff line number Diff line
@@ -1057,6 +1057,10 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
            boolean canRun = false;
            boolean canRun = false;
            if (show) {
            if (show) {
                // Show request
                // Show request
                if (fromIme) {
                    ImeTracing.getInstance().triggerClientDump(
                            "ImeInsetsSourceConsumer#requestShow", mHost.getInputMethodManager());
                }
                switch(consumer.requestShow(fromIme)) {
                switch(consumer.requestShow(fromIme)) {
                    case ShowResult.SHOW_IMMEDIATELY:
                    case ShowResult.SHOW_IMMEDIATELY:
                        canRun = true;
                        canRun = true;
@@ -1096,8 +1100,16 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
                        + fromIme);
                        + fromIme);
                // We don't have a control at the moment. However, we still want to update requested
                // 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.
                // 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);
                consumer.show(fromIme);
            } else if (animationType == ANIMATION_TYPE_HIDE) {
            } else if (animationType == ANIMATION_TYPE_HIDE) {
                if (fromIme) {
                    ImeTracing.getInstance().triggerClientDump(
                            "InsetsSourceConsumer#hide", mHost.getInputMethodManager());
                }
                consumer.hide();
                consumer.hide();
            }
            }
        }
        }
@@ -1217,8 +1229,8 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation


    private void applyLocalVisibilityOverride() {
    private void applyLocalVisibilityOverride() {
        for (int i = mSourceConsumers.size() - 1; i >= 0; i--) {
        for (int i = mSourceConsumers.size() - 1; i >= 0; i--) {
            final InsetsSourceConsumer controller = mSourceConsumers.valueAt(i);
            final InsetsSourceConsumer consumer = mSourceConsumers.valueAt(i);
            controller.applyLocalVisibilityOverride();
            consumer.applyLocalVisibilityOverride();
        }
        }
    }
    }


+12 −0
Original line number Original line Diff line number Diff line
@@ -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_FRAME;
import static android.view.InsetsSourceConsumerProto.PENDING_VISIBLE_FRAME;
import static android.view.InsetsSourceConsumerProto.PENDING_VISIBLE_FRAME;
import static android.view.InsetsSourceConsumerProto.SOURCE_CONTROL;
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.getDefaultVisibility;
import static android.view.InsetsState.toPublicType;
import static android.view.InsetsState.toPublicType;


@@ -34,6 +35,7 @@ import android.annotation.IntDef;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.graphics.Rect;
import android.graphics.Rect;
import android.util.Log;
import android.util.Log;
import android.util.imetracing.ImeTracing;
import android.util.proto.ProtoOutputStream;
import android.util.proto.ProtoOutputStream;
import android.view.InsetsState.InternalInsetsType;
import android.view.InsetsState.InternalInsetsType;
import android.view.SurfaceControl.Transaction;
import android.view.SurfaceControl.Transaction;
@@ -108,6 +110,10 @@ public class InsetsSourceConsumer {
     */
     */
    public void setControl(@Nullable InsetsSourceControl control,
    public void setControl(@Nullable InsetsSourceControl control,
            @InsetsType int[] showTypes, @InsetsType int[] hideTypes) {
            @InsetsType int[] showTypes, @InsetsType int[] hideTypes) {
        if (mType == ITYPE_IME) {
            ImeTracing.getInstance().triggerClientDump("InsetsSourceConsumer#setControl",
                    mController.getHost().getInputMethodManager());
        }
        if (mSourceControl == control) {
        if (mSourceControl == control) {
            return;
            return;
        }
        }
@@ -237,6 +243,12 @@ public class InsetsSourceConsumer {
        final boolean isVisible = source != null ? source.isVisible() : getDefaultVisibility(mType);
        final boolean isVisible = source != null ? source.isVisible() : getDefaultVisibility(mType);
        final boolean hasControl = mSourceControl != null;
        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
        // 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
        // control. If we don't have the source, we don't change the requested visibility for making
        // the callback behavior compatible.
        // the callback behavior compatible.
+9 −0
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@ package android.view;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.Display.INVALID_DISPLAY;
import static android.view.Display.INVALID_DISPLAY;
import static android.view.InputDevice.SOURCE_CLASS_NONE;
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_NAVIGATION_BAR;
import static android.view.InsetsState.ITYPE_STATUS_BAR;
import static android.view.InsetsState.ITYPE_STATUS_BAR;
import static android.view.InsetsState.SIZE;
import static android.view.InsetsState.SIZE;
@@ -7914,6 +7915,10 @@ public final class ViewRootImpl implements ViewParent,
        if (mTranslator != null) {
        if (mTranslator != null) {
            mTranslator.translateInsetsStateInScreenToAppWindow(insetsState);
            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();
        mHandler.obtainMessage(MSG_INSETS_CHANGED, insetsState).sendToTarget();
    }
    }


@@ -7930,6 +7935,10 @@ public final class ViewRootImpl implements ViewParent,
        if (mTranslator != null) {
        if (mTranslator != null) {
            mTranslator.translateInsetsStateInScreenToAppWindow(insetsState);
            mTranslator.translateInsetsStateInScreenToAppWindow(insetsState);
        }
        }
        if (insetsState != null && insetsState.getSource(ITYPE_IME).isVisible()) {
            ImeTracing.getInstance().triggerClientDump("ViewRootImpl#dispatchInsetsControlChanged",
                    getInsetsController().getHost().getInputMethodManager());
        }
        SomeArgs args = SomeArgs.obtain();
        SomeArgs args = SomeArgs.obtain();
        args.arg1 = insetsState;
        args.arg1 = insetsState;
        args.arg2 = activeControls;
        args.arg2 = activeControls;
+13 −0
Original line number Original line Diff line number Diff line
@@ -596,6 +596,8 @@ public final class InputMethodManager {
         */
         */
        @Override
        @Override
        public void finishInput() {
        public void finishInput() {
            ImeTracing.getInstance().triggerClientDump(
                    "InputMethodManager.DelegateImpl#finishInput", InputMethodManager.this);
            synchronized (mH) {
            synchronized (mH) {
                finishInputLocked();
                finishInputLocked();
            }
            }
@@ -639,6 +641,10 @@ public final class InputMethodManager {
            int startInputFlags = getStartInputFlags(focusedView, 0);
            int startInputFlags = getStartInputFlags(focusedView, 0);
            startInputFlags |= StartInputFlags.WINDOW_GAINED_FOCUS;
            startInputFlags |= StartInputFlags.WINDOW_GAINED_FOCUS;


            ImeTracing.getInstance().triggerClientDump(
                    "InputMethodManager.DelegateImpl#startInputAsyncOnWindowFocusGain",
                    InputMethodManager.this);

            final ImeFocusController controller = getFocusController();
            final ImeFocusController controller = getFocusController();
            if (controller == null) {
            if (controller == null) {
                return;
                return;
@@ -948,6 +954,9 @@ public final class InputMethodManager {
                case MSG_APPLY_IME_VISIBILITY: {
                case MSG_APPLY_IME_VISIBILITY: {
                    synchronized (mH) {
                    synchronized (mH) {
                        if (mImeInsetsConsumer != null) {
                        if (mImeInsetsConsumer != null) {
                            ImeTracing.getInstance().triggerClientDump(
                                    "ImeInsetsSourceConsumer#applyImeVisibility",
                                    InputMethodManager.this);
                            mImeInsetsConsumer.applyImeVisibility(msg.arg1 != 0);
                            mImeInsetsConsumer.applyImeVisibility(msg.arg1 != 0);
                        }
                        }
                    }
                    }
@@ -1852,6 +1861,8 @@ public final class InputMethodManager {
     * {@link #HIDE_NOT_ALWAYS} bit set.
     * {@link #HIDE_NOT_ALWAYS} bit set.
     **/
     **/
    public void toggleSoftInputFromWindow(IBinder windowToken, int showFlags, int hideFlags) {
    public void toggleSoftInputFromWindow(IBinder windowToken, int showFlags, int hideFlags) {
        ImeTracing.getInstance().triggerClientDump(
                "InputMethodManager#toggleSoftInputFromWindow", InputMethodManager.this);
        synchronized (mH) {
        synchronized (mH) {
            final View servedView = getServedViewLocked();
            final View servedView = getServedViewLocked();
            if (servedView == null || servedView.getWindowToken() != windowToken) {
            if (servedView == null || servedView.getWindowToken() != windowToken) {
@@ -1879,6 +1890,8 @@ public final class InputMethodManager {
     * {@link #HIDE_NOT_ALWAYS} bit set.
     * {@link #HIDE_NOT_ALWAYS} bit set.
     */
     */
    public void toggleSoftInput(int showFlags, int hideFlags) {
    public void toggleSoftInput(int showFlags, int hideFlags) {
        ImeTracing.getInstance().triggerClientDump(
                "InputMethodManager#toggleSoftInput", InputMethodManager.this);
        if (mCurMethod != null) {
        if (mCurMethod != null) {
            try {
            try {
                mCurMethod.toggleSoftInput(showFlags, hideFlags);
                mCurMethod.toggleSoftInput(showFlags, hideFlags);