DO NOT MERGE Isolated processes don't get precached system service binders

More specifically, they get a PackageManager binder -- necessary for
Android process startup and configuration -- but none of the other
usual preloaded service binders.
(backported from commit 2c61c57ac5)

Bug: 30202228

Change-Id: I3810649f504cd631665ece338a83d2e54d41ad05
This commit is contained in:
Suprabh Shukla
2016-10-12 19:01:11 -07:00
parent 5b05226586
commit 2aa7e5e861

View File

@@ -788,6 +788,7 @@ public final class ActivityManagerService extends ActivityManagerNative
* For example, references to the commonly used services. * For example, references to the commonly used services.
*/ */
HashMap<String, IBinder> mAppBindArgs; HashMap<String, IBinder> mAppBindArgs;
HashMap<String, IBinder> mIsolatedAppBindArgs;
/** /**
* Temporary to avoid allocations. Protected by main lock. * Temporary to avoid allocations. Protected by main lock.
@@ -2210,7 +2211,17 @@ public final class ActivityManagerService extends ActivityManagerNative
* process when the bindApplication() IPC is sent to the process. They're * process when the bindApplication() IPC is sent to the process. They're
* lazily setup to make sure the services are running when they're asked for. * lazily setup to make sure the services are running when they're asked for.
*/ */
private HashMap<String, IBinder> getCommonServicesLocked() { private HashMap<String, IBinder> getCommonServicesLocked(boolean isolated) {
// Isolated processes won't get this optimization, so that we don't
// violate the rules about which services they have access to.
if (isolated) {
if (mIsolatedAppBindArgs == null) {
mIsolatedAppBindArgs = new HashMap<String, IBinder>();
mIsolatedAppBindArgs.put("package", ServiceManager.getService("package"));
}
return mIsolatedAppBindArgs;
}
if (mAppBindArgs == null) { if (mAppBindArgs == null) {
mAppBindArgs = new HashMap<String, IBinder>(); mAppBindArgs = new HashMap<String, IBinder>();
@@ -4990,7 +5001,8 @@ public final class ActivityManagerService extends ActivityManagerNative
app.instrumentationArguments, app.instrumentationWatcher, app.instrumentationArguments, app.instrumentationWatcher,
app.instrumentationUiAutomationConnection, testMode, enableOpenGlTrace, app.instrumentationUiAutomationConnection, testMode, enableOpenGlTrace,
isRestrictedBackupMode || !normalMode, app.persistent, isRestrictedBackupMode || !normalMode, app.persistent,
new Configuration(mConfiguration), app.compat, getCommonServicesLocked(), new Configuration(mConfiguration), app.compat,
getCommonServicesLocked(app.isolated),
mCoreSettingsObserver.getCoreSettingsLocked()); mCoreSettingsObserver.getCoreSettingsLocked());
updateLruProcessLocked(app, false, null); updateLruProcessLocked(app, false, null);
app.lastRequestedGc = app.lastLowMemory = SystemClock.uptimeMillis(); app.lastRequestedGc = app.lastLowMemory = SystemClock.uptimeMillis();