Merge "Prevent updating invlid child task surfaces in the sync queue" into tm-qpr-dev am: 3d8e5f7e5a

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19534870

Change-Id: Iac665038366c30eb1e3c752bd55ddf1d337a3970
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Jerry Chang
2022-08-08 13:26:09 +00:00
committed by Automerger Merge Worker

View File

@@ -33,6 +33,7 @@ import android.content.Context;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.IBinder;
import android.util.Slog;
import android.util.SparseArray;
import android.view.RemoteAnimationTarget;
import android.view.SurfaceControl;
@@ -376,7 +377,13 @@ class StageTaskListener implements ShellTaskOrganizer.TaskListener {
SurfaceControl leash, boolean firstAppeared) {
final Point taskPositionInParent = taskInfo.positionInParent;
mSyncQueue.runInSync(t -> {
t.setWindowCrop(leash, null);
// The task surface might be released before running in the sync queue for the case like
// trampoline launch, so check if the surface is valid before processing it.
if (!leash.isValid()) {
Slog.w(TAG, "Skip updating invalid child task surface of task#" + taskInfo.taskId);
return;
}
t.setCrop(leash, null);
t.setPosition(leash, taskPositionInParent.x, taskPositionInParent.y);
if (firstAppeared && !ENABLE_SHELL_TRANSITIONS) {
t.setAlpha(leash, 1f);