Loading libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingWindowController.java +30 −5 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import android.os.IBinder; import android.os.Trace; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; import android.util.SparseArray; import android.util.SparseIntArray; import android.view.SurfaceControl; Loading Loading @@ -86,6 +87,7 @@ public class StartingWindowController implements RemoteCallable<StartingWindowCo public static final String TAG = "ShellStartingWindow"; private static final long TASK_BG_COLOR_RETAIN_TIME_MS = 5000; private static final long UNCERTAIN_TRANSITION_TIMEOUT_MS = 5000; private final StartingSurfaceDrawer mStartingSurfaceDrawer; private final StartingWindowTypeAlgorithm mStartingWindowTypeAlgorithm; Loading Loading @@ -186,11 +188,12 @@ public class StartingWindowController implements RemoteCallable<StartingWindowCo && TransitionUtil.isOpeningMode(c.getMode())) { // Uncertain condition, this is activity transition so we don't know which // task the starting window belongs. final UncertainTracker tracker = new UncertainTracker( final UncertainTracker tracker = new UncertainTracker(info.getDebugId(), () -> uncertainTrackComplete(transition)); mUncertainTrackers.put(transition, tracker); startTransaction.addTransactionCommittedListener(mShellMainExecutor, tracker); mShellMainExecutor.executeDelayed(tracker, UNCERTAIN_TRANSITION_TIMEOUT_MS); ProtoLog.v(ShellProtoLogGroup.WM_SHELL_REMOVE_STARTING_TRACKER, "RSO:Create uncertain transition tracker=%s", tracker); break; Loading Loading @@ -281,8 +284,13 @@ public class StartingWindowController implements RemoteCallable<StartingWindowCo } private void uncertainTrackComplete(IBinder transition) { final boolean hasRemove = mUncertainTrackers.remove(transition) != null; if (!hasRemove || !mUncertainTrackers.isEmpty()) { final UncertainTracker tracker = mUncertainTrackers.remove(transition); if (tracker == null) { return; } mShellMainExecutor.removeCallbacks(tracker); if (!mUncertainTrackers.isEmpty()) { return; } // check if anything task left due to uncertain transition. Loading @@ -292,9 +300,13 @@ public class StartingWindowController implements RemoteCallable<StartingWindowCo } } static class UncertainTracker implements SurfaceControl.TransactionCommittedListener { static class UncertainTracker implements SurfaceControl.TransactionCommittedListener, Runnable { private final int mTransitionId; private final Runnable mCleanUp; UncertainTracker(Runnable cleanUp) { UncertainTracker(int transitionId, Runnable cleanUp) { mTransitionId = transitionId; mCleanUp = cleanUp; } Loading @@ -304,6 +316,19 @@ public class StartingWindowController implements RemoteCallable<StartingWindowCo "RSO:Uncertain transition tracker complete=%s", this); mCleanUp.run(); } /** Runs on timeout. */ @Override public void run() { Log.wtf(TAG, "RSO:Uncertain transition tracker timeout! " + this); mCleanUp.run(); } @Override public String toString() { return "UncertainTracker@" + Integer.toHexString(System.identityHashCode(this)) + ", monitor transitionId= " + mTransitionId; } } private static class WindowRecord { Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingWindowController.java +30 −5 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import android.os.IBinder; import android.os.Trace; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; import android.util.SparseArray; import android.util.SparseIntArray; import android.view.SurfaceControl; Loading Loading @@ -86,6 +87,7 @@ public class StartingWindowController implements RemoteCallable<StartingWindowCo public static final String TAG = "ShellStartingWindow"; private static final long TASK_BG_COLOR_RETAIN_TIME_MS = 5000; private static final long UNCERTAIN_TRANSITION_TIMEOUT_MS = 5000; private final StartingSurfaceDrawer mStartingSurfaceDrawer; private final StartingWindowTypeAlgorithm mStartingWindowTypeAlgorithm; Loading Loading @@ -186,11 +188,12 @@ public class StartingWindowController implements RemoteCallable<StartingWindowCo && TransitionUtil.isOpeningMode(c.getMode())) { // Uncertain condition, this is activity transition so we don't know which // task the starting window belongs. final UncertainTracker tracker = new UncertainTracker( final UncertainTracker tracker = new UncertainTracker(info.getDebugId(), () -> uncertainTrackComplete(transition)); mUncertainTrackers.put(transition, tracker); startTransaction.addTransactionCommittedListener(mShellMainExecutor, tracker); mShellMainExecutor.executeDelayed(tracker, UNCERTAIN_TRANSITION_TIMEOUT_MS); ProtoLog.v(ShellProtoLogGroup.WM_SHELL_REMOVE_STARTING_TRACKER, "RSO:Create uncertain transition tracker=%s", tracker); break; Loading Loading @@ -281,8 +284,13 @@ public class StartingWindowController implements RemoteCallable<StartingWindowCo } private void uncertainTrackComplete(IBinder transition) { final boolean hasRemove = mUncertainTrackers.remove(transition) != null; if (!hasRemove || !mUncertainTrackers.isEmpty()) { final UncertainTracker tracker = mUncertainTrackers.remove(transition); if (tracker == null) { return; } mShellMainExecutor.removeCallbacks(tracker); if (!mUncertainTrackers.isEmpty()) { return; } // check if anything task left due to uncertain transition. Loading @@ -292,9 +300,13 @@ public class StartingWindowController implements RemoteCallable<StartingWindowCo } } static class UncertainTracker implements SurfaceControl.TransactionCommittedListener { static class UncertainTracker implements SurfaceControl.TransactionCommittedListener, Runnable { private final int mTransitionId; private final Runnable mCleanUp; UncertainTracker(Runnable cleanUp) { UncertainTracker(int transitionId, Runnable cleanUp) { mTransitionId = transitionId; mCleanUp = cleanUp; } Loading @@ -304,6 +316,19 @@ public class StartingWindowController implements RemoteCallable<StartingWindowCo "RSO:Uncertain transition tracker complete=%s", this); mCleanUp.run(); } /** Runs on timeout. */ @Override public void run() { Log.wtf(TAG, "RSO:Uncertain transition tracker timeout! " + this); mCleanUp.run(); } @Override public String toString() { return "UncertainTracker@" + Integer.toHexString(System.identityHashCode(this)) + ", monitor transitionId= " + mTransitionId; } } private static class WindowRecord { Loading