diff options
author | 2024-10-18 18:23:19 +0000 | |
---|---|---|
committer | 2024-10-18 19:12:44 +0000 | |
commit | dca77daf2c4466d8d143f6b80c86737a244ecde0 (patch) | |
tree | 0ef6875b6a41aa782d9bba0da5e25b99b3b68925 | |
parent | 562064bebdf17706d8cd5a34908d295ffe33deb4 (diff) |
Runs the A11yManagerService package monitor on a dedicated thread.
The default BackgroundThread used by PackageMonitor is shared by
other components and can get busy, causing a delay and eventual
ANR when responding to broadcasts sent to this PackageMonitor.
Fix: 348138695
Test: existing tests in `atest AccessibilityManagerService`
Test: install and uninstall packages, observe no change in behavior
Flag: com.android.server.accessibility.package_monitor_dedicated_thread
Change-Id: Idd112cfeb7e3e55d18d4596c28a90450aa72f682
-rw-r--r-- | services/accessibility/accessibility.aconfig | 10 | ||||
-rw-r--r-- | services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java | 15 |
2 files changed, 24 insertions, 1 deletions
diff --git a/services/accessibility/accessibility.aconfig b/services/accessibility/accessibility.aconfig index ee3bbcaf711d..1280a048ed32 100644 --- a/services/accessibility/accessibility.aconfig +++ b/services/accessibility/accessibility.aconfig @@ -172,6 +172,16 @@ flag { } flag { + name: "package_monitor_dedicated_thread" + namespace: "accessibility" + description: "Runs the A11yManagerService PackageMonitor on a dedicated thread" + bug: "348138695" + metadata { + purpose: PURPOSE_BUGFIX + } +} + +flag { name: "manager_package_monitor_logic_fix" namespace: "accessibility" description: "Corrects the return values of the HandleForceStop function" diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index d595d02016e0..a23eb6748481 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -116,6 +116,7 @@ import android.os.Binder; import android.os.Build; import android.os.Bundle; import android.os.Handler; +import android.os.HandlerThread; import android.os.IBinder; import android.os.Looper; import android.os.Message; @@ -901,7 +902,19 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub private void registerBroadcastReceivers() { // package changes mPackageMonitor = new ManagerPackageMonitor(this); - mPackageMonitor.register(mContext, null, UserHandle.ALL, true); + final Looper packageMonitorLooper; + if (Flags.packageMonitorDedicatedThread()) { + // Use a dedicated thread because the default BackgroundThread used by PackageMonitor + // is shared by other components and can get busy, causing a delay and eventual ANR when + // responding to broadcasts sent to this PackageMonitor. + HandlerThread packageMonitorThread = new HandlerThread(LOG_TAG + " PackageMonitor", + Process.THREAD_PRIORITY_BACKGROUND); + packageMonitorThread.start(); + packageMonitorLooper = packageMonitorThread.getLooper(); + } else { + packageMonitorLooper = null; + } + mPackageMonitor.register(mContext, packageMonitorLooper, UserHandle.ALL, true); // user change and unlock IntentFilter intentFilter = new IntentFilter(); |