diff options
| author | 2016-06-30 21:06:12 +0000 | |
|---|---|---|
| committer | 2016-06-30 21:06:16 +0000 | |
| commit | 5a1f346e2d37af989dfeb0438e5bbf980be20bfd (patch) | |
| tree | e7443fd2a25b9dcc459c8be8155aec8f137b59f5 | |
| parent | d4ec5df707225331b2ebc1ed12efcb875142cda2 (diff) | |
| parent | 7877b8add811aafd7f57f731c8e22c9fe6a319c8 (diff) | |
Merge "Optimized onUnlockUser" into nyc-mr1-dev
3 files changed, 27 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java index e0d89f2fe6d3..71ac54492cb6 100644 --- a/services/core/java/com/android/server/InputMethodManagerService.java +++ b/services/core/java/com/android/server/InputMethodManagerService.java @@ -177,6 +177,8 @@ public class InputMethodManagerService extends IInputMethodManager.Stub static final int MSG_HARD_KEYBOARD_SWITCH_CHANGED = 4000; + static final int MSG_SYSTEM_UNLOCK_USER = 5000; + static final long TIME_TO_RECONNECT = 3 * 1000; static final int SECURE_SUGGESTION_SPANS_MAX_SIZE = 20; @@ -800,14 +802,14 @@ public class InputMethodManagerService extends IInputMethodManager.Stub @Override public void onSwitchUser(@UserIdInt int userHandle) { - // Called on the system server's main looper thread. + // Called on ActivityManager thread. // TODO: Dispatch this to a worker thread as needed. mService.onSwitchUser(userHandle); } @Override public void onBootPhase(int phase) { - // Called on the system server's main looper thread. + // Called on ActivityManager thread. // TODO: Dispatch this to a worker thread as needed. if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) { StatusBarManagerService statusBarService = (StatusBarManagerService) ServiceManager @@ -817,10 +819,10 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } @Override - public void onUnlockUser(@UserIdInt int userHandle) { - // Called on the system server's main looper thread. - // TODO: Dispatch this to a worker thread as needed. - mService.onUnlockUser(userHandle); + public void onUnlockUser(final @UserIdInt int userHandle) { + // Called on ActivityManager thread. + mService.mHandler.sendMessage(mService.mHandler.obtainMessage(MSG_SYSTEM_UNLOCK_USER, + userHandle)); } } @@ -2970,6 +2972,10 @@ public class InputMethodManagerService extends IInputMethodManager.Stub case MSG_HARD_KEYBOARD_SWITCH_CHANGED: mHardKeyboardListener.handleHardKeyboardStatusChange(msg.arg1 == 1); return true; + case MSG_SYSTEM_UNLOCK_USER: + final int userId = msg.arg1; + onUnlockUser(userId); + return true; } return false; } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 114ad968d6dc..56406caeeaf6 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -3216,7 +3216,10 @@ public class PackageManagerService extends IPackageManager.Stub { final PermissionsState permissionsState = ps.getPermissionsState(); - final int[] gids = permissionsState.computeGids(userId); + // Compute GIDs only if requested + final int[] gids = (flags & PackageManager.GET_GIDS) != 0 + ? permissionsState.computeGids(userId) : EMPTY_INT_ARRAY; + // TODO b/29879962 Calculate granted permissions only if needed in generatePackageInfo final Set<String> permissions = permissionsState.getPermissions(userId); final PackageUserState state = ps.readUserState(userId); diff --git a/services/core/java/com/android/server/search/SearchManagerService.java b/services/core/java/com/android/server/search/SearchManagerService.java index 4d91814af44a..2e5eb3ac83f5 100644 --- a/services/core/java/com/android/server/search/SearchManagerService.java +++ b/services/core/java/com/android/server/search/SearchManagerService.java @@ -33,6 +33,7 @@ import android.content.pm.ResolveInfo; import android.database.ContentObserver; import android.os.Binder; import android.os.Bundle; +import android.os.Handler; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; @@ -42,6 +43,7 @@ import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.content.PackageMonitor; +import com.android.internal.os.BackgroundThread; import com.android.internal.util.IndentingPrintWriter; import com.android.server.LocalServices; import com.android.server.SystemService; @@ -57,6 +59,7 @@ import java.util.List; */ public class SearchManagerService extends ISearchManager.Stub { private static final String TAG = "SearchManagerService"; + final Handler mHandler; public static class Lifecycle extends SystemService { private SearchManagerService mService; @@ -72,8 +75,13 @@ public class SearchManagerService extends ISearchManager.Stub { } @Override - public void onUnlockUser(int userHandle) { - mService.onUnlockUser(userHandle); + public void onUnlockUser(final int userId) { + mService.mHandler.post(new Runnable() { + @Override + public void run() { + mService.onUnlockUser(userId); + } + }); } @Override @@ -99,6 +107,7 @@ public class SearchManagerService extends ISearchManager.Stub { mContext = context; new MyPackageMonitor().register(context, null, UserHandle.ALL, true); new GlobalSearchProviderObserver(context.getContentResolver()); + mHandler = BackgroundThread.getHandler(); } private Searchables getSearchables(int userId) { |