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

Commit c8065093 authored by Evan Rosky's avatar Evan Rosky
Browse files

Post view-drawing so that it happens after applying start transaction

These views were drawing before the transition startTransaction is
applied. This can cause deadlocks if there aren't enough buffers
and the view blocks the thread since applying the transaction is
what frees-up the buffers.

Bug: 233625646
Test: run tests and check for fewer ANRs
Change-Id: I7d592fe186695cdcde040d4ec315e656e05354e5
parent 6ad1f71c
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -942,7 +942,7 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
        // Re-set the PIP bounds to none.
        // Re-set the PIP bounds to none.
        mPipBoundsState.setBounds(new Rect());
        mPipBoundsState.setBounds(new Rect());
        mPipUiEventLoggerLogger.setTaskInfo(null);
        mPipUiEventLoggerLogger.setTaskInfo(null);
        mPipMenuController.detach();
        mMainExecutor.executeDelayed(() -> mPipMenuController.detach(), 0);


        if (info.displayId != Display.DEFAULT_DISPLAY && mOnDisplayIdChangeCallback != null) {
        if (info.displayId != Display.DEFAULT_DISPLAY && mOnDisplayIdChangeCallback != null) {
            mOnDisplayIdChangeCallback.accept(Display.DEFAULT_DISPLAY);
            mOnDisplayIdChangeCallback.accept(Display.DEFAULT_DISPLAY);
+1 −1
Original line number Original line Diff line number Diff line
@@ -715,7 +715,7 @@ public class PipTransition extends PipTransitionController {
        mSurfaceTransactionHelper
        mSurfaceTransactionHelper
                .crop(finishTransaction, leash, destinationBounds)
                .crop(finishTransaction, leash, destinationBounds)
                .round(finishTransaction, leash, true /* applyCornerRadius */);
                .round(finishTransaction, leash, true /* applyCornerRadius */);
        mPipMenuController.attach(leash);
        mTransitions.getMainExecutor().executeDelayed(() -> mPipMenuController.attach(leash), 0);


        if (taskInfo.pictureInPictureParams != null
        if (taskInfo.pictureInPictureParams != null
                && taskInfo.pictureInPictureParams.isAutoEnterEnabled()
                && taskInfo.pictureInPictureParams.isAutoEnterEnabled()
+0 −4
Original line number Original line Diff line number Diff line
@@ -28,9 +28,7 @@ import android.app.TaskInfo;
import android.content.ComponentName;
import android.content.ComponentName;
import android.content.pm.ActivityInfo;
import android.content.pm.ActivityInfo;
import android.graphics.Rect;
import android.graphics.Rect;
import android.os.Handler;
import android.os.IBinder;
import android.os.IBinder;
import android.os.Looper;
import android.view.SurfaceControl;
import android.view.SurfaceControl;
import android.view.WindowManager;
import android.view.WindowManager;
import android.window.TransitionInfo;
import android.window.TransitionInfo;
@@ -56,7 +54,6 @@ public abstract class PipTransitionController implements Transitions.TransitionH
    protected final ShellTaskOrganizer mShellTaskOrganizer;
    protected final ShellTaskOrganizer mShellTaskOrganizer;
    protected final PipMenuController mPipMenuController;
    protected final PipMenuController mPipMenuController;
    protected final Transitions mTransitions;
    protected final Transitions mTransitions;
    private final Handler mMainHandler;
    private final List<PipTransitionCallback> mPipTransitionCallbacks = new ArrayList<>();
    private final List<PipTransitionCallback> mPipTransitionCallbacks = new ArrayList<>();
    protected PipTaskOrganizer mPipOrganizer;
    protected PipTaskOrganizer mPipOrganizer;


@@ -144,7 +141,6 @@ public abstract class PipTransitionController implements Transitions.TransitionH
        mPipBoundsAlgorithm = pipBoundsAlgorithm;
        mPipBoundsAlgorithm = pipBoundsAlgorithm;
        mPipAnimationController = pipAnimationController;
        mPipAnimationController = pipAnimationController;
        mTransitions = transitions;
        mTransitions = transitions;
        mMainHandler = new Handler(Looper.getMainLooper());
        if (Transitions.ENABLE_SHELL_TRANSITIONS) {
        if (Transitions.ENABLE_SHELL_TRANSITIONS) {
            transitions.addHandler(this);
            transitions.addHandler(this);
        }
        }