Check if already on main thread when getting SSG for SCVH

SCVH can be added in process so if they are included in a SSG
the call to getSurfaceSyncGroup could run on the main thread.
If this were the case, the method would never return a value
since the call is is blocking and waiting to run on the main
thread. Instead, check if the incoming thread is the main thread
and return a value immediately instead of a post to main thread.

Change-Id: Id233eecc46afb1f5425df97986e7563e970aff12
Bug: 276356641
Test: SurfaceSyncGroupContinuousTest
This commit is contained in:
Chavi Weingarten
2023-04-05 14:23:26 +00:00
committed by Maryam Dehaini
parent 5be8ccc63b
commit dbce4f859f

View File

@@ -99,9 +99,16 @@ public class SurfaceControlViewHost {
@Override
public ISurfaceSyncGroup getSurfaceSyncGroup() {
CompletableFuture<ISurfaceSyncGroup> surfaceSyncGroup = new CompletableFuture<>();
mViewRoot.mHandler.post(
() -> surfaceSyncGroup.complete(
mViewRoot.getOrCreateSurfaceSyncGroup().mISurfaceSyncGroup));
// If the call came from in process and it's already running on the UI thread, return
// results immediately instead of posting to the main thread. If we post to the main
// thread, it will block itself and the return value will always be null.
if (Thread.currentThread() == mViewRoot.mThread) {
return mViewRoot.getOrCreateSurfaceSyncGroup().mISurfaceSyncGroup;
} else {
mViewRoot.mHandler.post(
() -> surfaceSyncGroup.complete(
mViewRoot.getOrCreateSurfaceSyncGroup().mISurfaceSyncGroup));
}
try {
return surfaceSyncGroup.get(1, TimeUnit.SECONDS);
} catch (InterruptedException | ExecutionException | TimeoutException e) {