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:
committed by
Maryam Dehaini
parent
5be8ccc63b
commit
dbce4f859f
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user