diff options
| author | 2017-12-19 16:44:26 -0800 | |
|---|---|---|
| committer | 2017-12-19 16:44:26 -0800 | |
| commit | ab781c254fa0441241e6851554cad16d3ab9e2a5 (patch) | |
| tree | 87e83cd1afbd0f9bc2aef7cc26bf951de25a094b | |
| parent | f7ca81fbc99888076d56666475a33b7b1a40fbd7 (diff) | |
Offload switchUser calls to worker threads
Some switchUser callbacks can block ActivityManager thread for 100+ ms.
The work can be done on a worker thread instead.
Test: Manual create/switch to user
Bug: 37579992
Change-Id: I45034fa8c8bdf457bcc3737c8064057fbfaf32f5
| -rw-r--r-- | services/core/java/com/android/server/vr/VrManagerService.java | 10 | ||||
| -rw-r--r-- | services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java | 13 |
2 files changed, 15 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/vr/VrManagerService.java b/services/core/java/com/android/server/vr/VrManagerService.java index 21c688907dc1..de723c6701d3 100644 --- a/services/core/java/com/android/server/vr/VrManagerService.java +++ b/services/core/java/com/android/server/vr/VrManagerService.java @@ -59,6 +59,8 @@ import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; import android.util.SparseArray; + +import com.android.server.FgThread; import com.android.server.wm.WindowManagerInternal; import android.view.inputmethod.InputMethodManagerInternal; @@ -825,9 +827,11 @@ public class VrManagerService extends SystemService @Override public void onSwitchUser(int userHandle) { - synchronized (mLock) { - mComponentObserver.onUsersChanged(); - } + FgThread.getHandler().post(() -> { + synchronized (mLock) { + mComponentObserver.onUsersChanged(); + } + }); } diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java index c0685f927398..44f55511f940 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java @@ -67,6 +67,7 @@ import com.android.internal.content.PackageMonitor; import com.android.internal.os.BackgroundThread; import com.android.internal.util.DumpUtils; import com.android.internal.util.Preconditions; +import com.android.server.FgThread; import com.android.server.LocalServices; import com.android.server.SystemService; import com.android.server.UiThread; @@ -389,11 +390,13 @@ public class VoiceInteractionManagerService extends SystemService { } public void switchUser(int userHandle) { - synchronized (this) { - mCurUser = userHandle; - mCurUserUnlocked = false; - switchImplementationIfNeededLocked(false); - } + FgThread.getHandler().post(() -> { + synchronized (this) { + mCurUser = userHandle; + mCurUserUnlocked = false; + switchImplementationIfNeededLocked(false); + } + }); } void switchImplementationIfNeeded(boolean force) { |