Release surface control of remote transition leash without removal

Because the transition-leash is put under transition root, it will
be removed with the root when the finish transaction executes.

Otherwise if "transition-leash" is removed earlier than reparenting
task to its original parent, it may show a few frames with empty root
and looks flickering.
 Transition Root
  > transition-leash
     > Task
  > transition-leash
     > Task

So it is enough to only release the reference.

Bug: 206062800
Test: adb shell setprop  persist.debug.shell_transit 1; reboot
      Launch app from home and return to home. The app and home
      should not flicker.
Change-Id: I451f4bcce90405a6256ec40afd345824a79c96ae
This commit is contained in:
Riddle Hsu
2021-11-12 20:40:43 +08:00
parent 05c87f765c
commit c9853d9a63

View File

@@ -205,20 +205,17 @@ public class RemoteAnimationAdapterCompat {
@Override
@SuppressLint("NewApi")
public void run() {
counterLauncher.cleanUp(info.getRootLeash());
counterWallpaper.cleanUp(info.getRootLeash());
// Release surface references now. This is apparently to free GPU memory
// while doing quick operations (eg. during CTS).
for (int i = info.getChanges().size() - 1; i >= 0; --i) {
info.getChanges().get(i).getLeash().release();
}
for (int i = leashMap.size() - 1; i >= 0; --i) {
leashMap.valueAt(i).release();
}
try {
counterLauncher.cleanUp(info.getRootLeash());
counterWallpaper.cleanUp(info.getRootLeash());
// Release surface references now. This is apparently to free GPU
// memory while doing quick operations (eg. during CTS).
for (int i = 0; i < info.getChanges().size(); ++i) {
info.getChanges().get(i).getLeash().release();
}
SurfaceControl.Transaction t = new SurfaceControl.Transaction();
for (int i = 0; i < leashMap.size(); ++i) {
if (leashMap.keyAt(i) == leashMap.valueAt(i)) continue;
t.remove(leashMap.valueAt(i));
}
t.apply();
finishCallback.onTransitionFinished(null /* wct */, null /* sct */);
} catch (RemoteException e) {
Log.e("ActivityOptionsCompat", "Failed to call app controlled animation"