From c1274bdd5301b74ef502f9416f7df6cc3e37c018 Mon Sep 17 00:00:00 2001 From: Fengjiang Li Date: Wed, 12 Jun 2024 22:18:49 +0000 Subject: [Launcher Jank] Avoid making ContentResolver binder calls from GestureNavigationSettingsObserver Test: manual Flag: NONE performance change Bug: 333772683 Change-Id: Iffb50e296902d5017ad615cea2588719e38bcecf --- .../policy/GestureNavigationSettingsObserver.java | 76 ++++++++++++---------- .../gestural/EdgeBackGestureHandler.java | 9 ++- .../phone/LightBarTransitionsController.java | 4 +- .../phone/LightBarTransitionsControllerTest.java | 7 +- .../java/com/android/server/wm/DisplayPolicy.java | 2 + 5 files changed, 60 insertions(+), 38 deletions(-) diff --git a/core/java/com/android/internal/policy/GestureNavigationSettingsObserver.java b/core/java/com/android/internal/policy/GestureNavigationSettingsObserver.java index f1ed3bed5d89..b7e68bacd143 100644 --- a/core/java/com/android/internal/policy/GestureNavigationSettingsObserver.java +++ b/core/java/com/android/internal/policy/GestureNavigationSettingsObserver.java @@ -36,11 +36,13 @@ public class GestureNavigationSettingsObserver extends ContentObserver { private Context mContext; private Runnable mOnChangeRunnable; private Handler mMainHandler; + private Handler mBgHandler; - public GestureNavigationSettingsObserver(Handler handler, Context context, - Runnable onChangeRunnable) { - super(handler); - mMainHandler = handler; + public GestureNavigationSettingsObserver( + Handler mainHandler, Handler bgHandler, Context context, Runnable onChangeRunnable) { + super(mainHandler); + mMainHandler = mainHandler; + mBgHandler = bgHandler; mContext = context; mOnChangeRunnable = onChangeRunnable; } @@ -60,45 +62,51 @@ public class GestureNavigationSettingsObserver extends ContentObserver { * Registers the observer for all users. */ public void register() { - ContentResolver r = mContext.getContentResolver(); - r.registerContentObserver( - Settings.Secure.getUriFor(Settings.Secure.BACK_GESTURE_INSET_SCALE_LEFT), - false, this, UserHandle.USER_ALL); - r.registerContentObserver( - Settings.Secure.getUriFor(Settings.Secure.BACK_GESTURE_INSET_SCALE_RIGHT), - false, this, UserHandle.USER_ALL); - r.registerContentObserver( - Settings.Secure.getUriFor(Settings.Secure.USER_SETUP_COMPLETE), - false, this, UserHandle.USER_ALL); - DeviceConfig.addOnPropertiesChangedListener( - DeviceConfig.NAMESPACE_SYSTEMUI, - runnable -> mMainHandler.post(runnable), - mOnPropertiesChangedListener); + mBgHandler.post(() -> { + ContentResolver r = mContext.getContentResolver(); + r.registerContentObserver( + Settings.Secure.getUriFor(Settings.Secure.BACK_GESTURE_INSET_SCALE_LEFT), + false, this, UserHandle.USER_ALL); + r.registerContentObserver( + Settings.Secure.getUriFor(Settings.Secure.BACK_GESTURE_INSET_SCALE_RIGHT), + false, this, UserHandle.USER_ALL); + r.registerContentObserver( + Settings.Secure.getUriFor(Settings.Secure.USER_SETUP_COMPLETE), + false, this, UserHandle.USER_ALL); + DeviceConfig.addOnPropertiesChangedListener( + DeviceConfig.NAMESPACE_SYSTEMUI, + runnable -> mMainHandler.post(runnable), + mOnPropertiesChangedListener); + }); } /** * Registers the observer for the calling user. */ public void registerForCallingUser() { - ContentResolver r = mContext.getContentResolver(); - r.registerContentObserver( - Settings.Secure.getUriFor(Settings.Secure.BACK_GESTURE_INSET_SCALE_LEFT), - false, this); - r.registerContentObserver( - Settings.Secure.getUriFor(Settings.Secure.BACK_GESTURE_INSET_SCALE_RIGHT), - false, this); - r.registerContentObserver( - Settings.Secure.getUriFor(Settings.Secure.USER_SETUP_COMPLETE), - false, this); - DeviceConfig.addOnPropertiesChangedListener( - DeviceConfig.NAMESPACE_SYSTEMUI, - runnable -> mMainHandler.post(runnable), - mOnPropertiesChangedListener); + mBgHandler.post(() -> { + ContentResolver r = mContext.getContentResolver(); + r.registerContentObserver( + Settings.Secure.getUriFor(Settings.Secure.BACK_GESTURE_INSET_SCALE_LEFT), + false, this); + r.registerContentObserver( + Settings.Secure.getUriFor(Settings.Secure.BACK_GESTURE_INSET_SCALE_RIGHT), + false, this); + r.registerContentObserver( + Settings.Secure.getUriFor(Settings.Secure.USER_SETUP_COMPLETE), + false, this); + DeviceConfig.addOnPropertiesChangedListener( + DeviceConfig.NAMESPACE_SYSTEMUI, + runnable -> mMainHandler.post(runnable), + mOnPropertiesChangedListener); + }); } public void unregister() { - mContext.getContentResolver().unregisterContentObserver(this); - DeviceConfig.removeOnPropertiesChangedListener(mOnPropertiesChangedListener); + mBgHandler.post(() -> { + mContext.getContentResolver().unregisterContentObserver(this); + DeviceConfig.removeOnPropertiesChangedListener(mOnPropertiesChangedListener); + }); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java index 99c95b54a4ca..c9be9938ef74 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java @@ -45,6 +45,7 @@ import android.graphics.Rect; import android.graphics.Region; import android.hardware.input.InputManager; import android.icu.text.SimpleDateFormat; +import android.os.Handler; import android.os.RemoteException; import android.os.SystemClock; import android.os.SystemProperties; @@ -410,6 +411,7 @@ public class EdgeBackGestureHandler implements PluginListener { synchronized (mLock) { onConfigurationChanged(); -- cgit v1.2.3-59-g8ed1b