From 921a411bba7db2f097a2e7ef3fa2da4304174180 Mon Sep 17 00:00:00 2001 From: Darryl Johnson Date: Fri, 5 Feb 2021 18:58:52 +0000 Subject: [PATCH] Revert "Defer triggering notifyLidSwitchChanged() until the system is ready." This reverts commit 31c9c8d96bd76520defb09d2d09e39e791673228. Bug: 179498407 Bug: 175558819 Reason for revert: Possible cause of mem regression b/175558819 Change-Id: Ie72a06a56186e32d0db63bc44e7331d6bd912890 --- .../server/input/InputManagerService.java | 47 ++++++------------- 1 file changed, 15 insertions(+), 32 deletions(-) diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java index 2e4200c1f7d96..70e493d26d16f 100644 --- a/services/core/java/com/android/server/input/InputManagerService.java +++ b/services/core/java/com/android/server/input/InputManagerService.java @@ -222,12 +222,7 @@ public class InputManagerService extends IInputManager.Stub private int mNextVibratorTokenValue; // State for lid switch - // Lock for the lid switch state. Held when triggering callbacks to guarantee lid switch events - // are delivered in order. For ex, when a new lid switch callback is registered the lock is held - // while the callback is processing the initial lid switch event which guarantees that any - // events that occur at the same time are delivered after the callback has returned. private final Object mLidSwitchLock = new Object(); - @GuardedBy("mLidSwitchLock") private List mLidSwitchCallbacks = new ArrayList<>(); // State for the currently installed input filter. @@ -375,6 +370,9 @@ public class InputManagerService extends IInputManager.Stub public static final int SW_CAMERA_LENS_COVER_BIT = 1 << SW_CAMERA_LENS_COVER; public static final int SW_MUTE_DEVICE_BIT = 1 << SW_MUTE_DEVICE; + /** Indicates an open state for the lid switch. */ + public static final int SW_STATE_LID_OPEN = 0; + /** Whether to use the dev/input/event or uevent subsystem for the audio jack. */ final boolean mUseDevInputEventForAudioJack; @@ -410,18 +408,13 @@ public class InputManagerService extends IInputManager.Stub } void registerLidSwitchCallbackInternal(@NonNull LidSwitchCallback callback) { + boolean lidOpen; synchronized (mLidSwitchLock) { mLidSwitchCallbacks.add(callback); - - // Skip triggering the initial callback if the system is not yet ready as the switch - // state will be reported as KEY_STATE_UNKNOWN. The callback will be triggered in - // systemRunning(). - if (mSystemReady) { - boolean lidOpen = getSwitchState(-1 /* deviceId */, InputDevice.SOURCE_ANY, SW_LID) - == KEY_STATE_UP; - callback.notifyLidSwitchChanged(0 /* whenNanos */, lidOpen); - } + lidOpen = getSwitchState(-1 /* deviceId */, InputDevice.SOURCE_ANY, SW_LID) + == SW_STATE_LID_OPEN; } + callback.notifyLidSwitchChanged(0 /* whenNanos */, lidOpen); } void unregisterLidSwitchCallbackInternal(@NonNull LidSwitchCallback callback) { @@ -469,18 +462,7 @@ public class InputManagerService extends IInputManager.Stub } mNotificationManager = (NotificationManager)mContext.getSystemService( Context.NOTIFICATION_SERVICE); - - synchronized (mLidSwitchLock) { - mSystemReady = true; - - // Send the initial lid switch state to any callback registered before the system was - // ready. - int switchState = getSwitchState(-1 /* deviceId */, InputDevice.SOURCE_ANY, SW_LID); - for (int i = 0; i < mLidSwitchCallbacks.size(); i++) { - LidSwitchCallback callback = mLidSwitchCallbacks.get(i); - callback.notifyLidSwitchChanged(0 /* whenNanos */, switchState == KEY_STATE_UP); - } - } + mSystemReady = true; IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED); filter.addAction(Intent.ACTION_PACKAGE_REMOVED); @@ -2251,13 +2233,14 @@ public class InputManagerService extends IInputManager.Stub if ((switchMask & SW_LID_BIT) != 0) { final boolean lidOpen = ((switchValues & SW_LID_BIT) == 0); + + ArrayList callbacksCopy; synchronized (mLidSwitchLock) { - if (mSystemReady) { - for (int i = 0; i < mLidSwitchCallbacks.size(); i++) { - LidSwitchCallback callbacks = mLidSwitchCallbacks.get(i); - callbacks.notifyLidSwitchChanged(whenNanos, lidOpen); - } - } + callbacksCopy = new ArrayList<>(mLidSwitchCallbacks); + } + for (int i = 0; i < callbacksCopy.size(); i++) { + LidSwitchCallback callbacks = callbacksCopy.get(i); + callbacks.notifyLidSwitchChanged(whenNanos, lidOpen); } }