Prevents the binder call fail from freeze when send app visibility.

The client visibility state could remains GONE if the binder call
IWindow#dispatchAppVisibility fail. A possible reason is the binder is
still freeze and the buffer is fulled.
Try to unfreeze the process binder call before set visibility change,
so and top resumed.

Bug: 225530340
Test: verifyapps to dispatch app visibility happen after unfreeze.

Change-Id: I9c931dd72d7803c2add0348aa0d094333f94c73e
This commit is contained in:
wilsonshih
2022-03-29 13:22:28 +08:00
parent 94d1958df5
commit 84f2c89e9f
3 changed files with 5 additions and 0 deletions

View File

@@ -1403,6 +1403,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
+ "activityRecord=%s", this);
return false;
}
if (onTop) {
app.addToPendingTop();
}
try {
ProtoLog.v(WM_DEBUG_STATES, "Sending position change to %s, onTop: %b",
this, onTop);

View File

@@ -1232,6 +1232,7 @@ class TaskFragment extends WindowContainer<WindowContainer> {
// This activity is now becoming visible.
if (!next.mVisibleRequested || next.stopped || lastActivityTranslucent) {
next.app.addToPendingTop();
next.setVisibility(true);
}

View File

@@ -3526,6 +3526,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
"Setting visibility of " + this + ": " + clientVisible);
mClient.dispatchAppVisibility(clientVisible);
} catch (RemoteException e) {
Slog.w(TAG, "Exception thrown during dispatchAppVisibility " + this, e);
}
}