diff options
author | 2025-04-04 07:53:12 +0000 | |
---|---|---|
committer | 2025-04-17 20:19:05 -0700 | |
commit | d26880d971ad200f7ad611dabc2c26697c3a3980 (patch) | |
tree | 39c03fd1480fe594aadde9e73d2a85819755996d | |
parent | af23e219388afe04eaf7e2eb8cc3d675e15922ab (diff) |
DreamService should execute runnables in place if already in main thread
Bug: b/394274826
Test: atest DreamServiceTest , manual testing
Flag: EXEMPT bugfix
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:181c1789a3512e83514a12bd5d9980c36952e3aa)
Merged-In: Ic302b534509d0eeabea567d95a2607a03801ee4d
Change-Id: Ic302b534509d0eeabea567d95a2607a03801ee4d
-rw-r--r-- | core/java/android/service/dreams/DreamService.java | 24 | ||||
-rw-r--r-- | services/tests/dreamservicetests/src/com/android/server/dreams/TestDreamEnvironment.java | 2 |
2 files changed, 14 insertions, 12 deletions
diff --git a/core/java/android/service/dreams/DreamService.java b/core/java/android/service/dreams/DreamService.java index 31143a559060..81cecf1b3642 100644 --- a/core/java/android/service/dreams/DreamService.java +++ b/core/java/android/service/dreams/DreamService.java @@ -341,7 +341,7 @@ public class DreamService extends Service implements Window.Callback { */ public interface WakefulHandler { /** Posts a {@link Runnable} to be ran on the underlying {@link Handler}. */ - void post(Runnable r); + void postIfNeeded(Runnable r); /** * Returns the underlying {@link Handler}. Should only be used for passing the handler into @@ -386,8 +386,10 @@ public class DreamService extends Service implements Window.Callback { } @Override - public void post(Runnable r) { - if (mWakeLock != null) { + public void postIfNeeded(Runnable r) { + if (mHandler.getLooper().isCurrentThread()) { + r.run(); + } else if (mWakeLock != null) { mHandler.post(mWakeLock.wrap(r)); } else { mHandler.post(r); @@ -995,17 +997,17 @@ public class DreamService extends Service implements Window.Callback { } } - private void post(Runnable runnable) { + private void postIfNeeded(Runnable runnable) { // The handler is based on the populated context is not ready at construction time. // therefore we fetch on demand. - mInjector.getWakefulHandler().post(runnable); + mInjector.getWakefulHandler().postIfNeeded(runnable); } /** * Updates doze state. Note that this must be called on the mHandler. */ private void updateDoze() { - post(() -> { + postIfNeeded(() -> { if (mDreamToken == null) { Slog.w(mTag, "Updating doze without a dream token."); return; @@ -1047,7 +1049,7 @@ public class DreamService extends Service implements Window.Callback { */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) public void stopDozing() { - post(() -> { + postIfNeeded(() -> { if (mDreamToken == null) { return; } @@ -1290,7 +1292,7 @@ public class DreamService extends Service implements Window.Callback { final long token = Binder.clearCallingIdentity(); try { // Simply finish dream when exit is requested. - post(() -> finishInternal()); + postIfNeeded(() -> finishInternal()); } finally { Binder.restoreCallingIdentity(token); } @@ -1396,7 +1398,7 @@ public class DreamService extends Service implements Window.Callback { * </p> */ public final void finish() { - post(this::finishInternal); + postIfNeeded(this::finishInternal); } private void finishInternal() { @@ -1458,7 +1460,7 @@ public class DreamService extends Service implements Window.Callback { * </p> */ public final void wakeUp() { - post(()-> wakeUp(false)); + postIfNeeded(()-> wakeUp(false)); } /** @@ -1964,7 +1966,7 @@ public class DreamService extends Service implements Window.Callback { return; } - service.post(() -> consumer.accept(service)); + service.postIfNeeded(() -> consumer.accept(service)); } @Override diff --git a/services/tests/dreamservicetests/src/com/android/server/dreams/TestDreamEnvironment.java b/services/tests/dreamservicetests/src/com/android/server/dreams/TestDreamEnvironment.java index a16d463cae71..03d4ab8e4982 100644 --- a/services/tests/dreamservicetests/src/com/android/server/dreams/TestDreamEnvironment.java +++ b/services/tests/dreamservicetests/src/com/android/server/dreams/TestDreamEnvironment.java @@ -201,7 +201,7 @@ public class TestDreamEnvironment { doAnswer(invocation -> { ((Runnable) invocation.getArgument(0)).run(); return null; - }).when(mWakefulHandler).post(any()); + }).when(mWakefulHandler).postIfNeeded(any()); } @Override public void init(Context context) { |