diff options
| author | 2023-05-24 18:32:21 -0700 | |
|---|---|---|
| committer | 2023-05-27 00:14:17 +0000 | |
| commit | 37f58660a199f6e51ce9f71bda43b69dcdeb0735 (patch) | |
| tree | 1d5faaef530bbdf9dba9dbd292e103bfe198a5ef | |
| parent | 32f42bf93b53a98dc84de51f1c706ac0cae02375 (diff) | |
Workaround a robelectric related NPE in SurfaceSyncGroup.addTimer
Robolectric mocks out `HandlerThread` in such a way that in certain instances `HandlerThread.getLooper` returns null. Since adding the null check is small enough, we can opt to make this change to allow robolectric tests to run.
Test: atest ClockworkSettingsRobotests
Bug: 237804605
Change-Id: Ib28f80413265a770cfac44cf451714f1b66dfbc8
| -rw-r--r-- | core/java/android/window/SurfaceSyncGroup.java | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/core/java/android/window/SurfaceSyncGroup.java b/core/java/android/window/SurfaceSyncGroup.java index dfdff9ef97ce..5d14698c82b3 100644 --- a/core/java/android/window/SurfaceSyncGroup.java +++ b/core/java/android/window/SurfaceSyncGroup.java @@ -26,6 +26,7 @@ import android.os.Debug; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; +import android.os.Looper; import android.os.RemoteException; import android.os.Trace; import android.util.ArraySet; @@ -800,22 +801,25 @@ public final class SurfaceSyncGroup { } private void addTimeout() { + Looper looper = null; synchronized (sHandlerThreadLock) { if (sHandlerThread == null) { sHandlerThread = new HandlerThread("SurfaceSyncGroupTimer"); sHandlerThread.start(); } + + looper = sHandlerThread.getLooper(); } synchronized (mLock) { - if (mTimeoutAdded || mTimeoutDisabled) { + if (mTimeoutAdded || mTimeoutDisabled || looper == null) { // We only need one timeout for the entire SurfaceSyncGroup since we just want to // ensure it doesn't stay stuck forever. return; } if (mHandler == null) { - mHandler = new Handler(sHandlerThread.getLooper()); + mHandler = new Handler(looper); } mTimeoutAdded = true; |