diff options
author | 2025-01-16 09:04:35 -0800 | |
---|---|---|
committer | 2025-01-16 09:04:35 -0800 | |
commit | 2b7d92aa6ac8724660e8584e383334b02a21d9fe (patch) | |
tree | 3d0b52bd06cea6390702fe961635ce6af09239f0 | |
parent | fb6f500a69ca00bf7c251f5ff289ee0f8de33824 (diff) | |
parent | 94ee6d726a143ea40a574e3a45afe4aa1e022958 (diff) |
Merge "Dispatch pending events outside a lock" into main
-rw-r--r-- | services/core/java/com/android/server/display/DisplayManagerService.java | 37 |
1 files changed, 20 insertions, 17 deletions
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index ca001b9c7e6d..a37e9c3ac1b8 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -4382,26 +4382,29 @@ public final class DisplayManagerService extends SystemService { // would be unusual to do so. The method returns true on success. // This is only used if {@link deferDisplayEventsWhenFrozen()} is true. public boolean dispatchPending() { + Event[] pending; + synchronized (mCallback) { + if (mPendingEvents == null || mPendingEvents.isEmpty() || !mAlive) { + return true; + } + if (!isReadyLocked()) { + return false; + } + pending = new Event[mPendingEvents.size()]; + pending = mPendingEvents.toArray(pending); + mPendingEvents.clear(); + } try { - synchronized (mCallback) { - if (mPendingEvents == null || mPendingEvents.isEmpty() || !mAlive) { - return true; - } - if (!isReadyLocked()) { - return false; - } - for (int i = 0; i < mPendingEvents.size(); i++) { - Event displayEvent = mPendingEvents.get(i); - if (DEBUG) { - Slog.d(TAG, "Send pending display event #" + i + " " - + displayEvent.displayId + "/" - + displayEvent.event + " to " + mUid + "/" + mPid); - } - transmitDisplayEvent(displayEvent.displayId, displayEvent.event); + for (int i = 0; i < pending.length; i++) { + Event displayEvent = pending[i]; + if (DEBUG) { + Slog.d(TAG, "Send pending display event #" + i + " " + + displayEvent.displayId + "/" + + displayEvent.event + " to " + mUid + "/" + mPid); } - mPendingEvents.clear(); - return true; + transmitDisplayEvent(displayEvent.displayId, displayEvent.event); } + return true; } catch (RemoteException ex) { Slog.w(TAG, "Failed to notify process " + mPid + " that display topology changed, assuming it died.", ex); |