Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dbce4f85 authored by Chavi Weingarten's avatar Chavi Weingarten Committed by Maryam Dehaini
Browse files

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
parent 5be8ccc6
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -99,9 +99,16 @@ public class SurfaceControlViewHost {
        @Override
        public ISurfaceSyncGroup getSurfaceSyncGroup() {
            CompletableFuture<ISurfaceSyncGroup> surfaceSyncGroup = new CompletableFuture<>();
            // 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) {