Loading services/core/java/com/android/server/am/ActiveServices.java +13 −6 Original line number Diff line number Diff line Loading @@ -2117,6 +2117,12 @@ public final class ActiveServices { Slog.w(TAG, "Service lookup failed: " + msg); return new ServiceLookupResult(null, msg); } // Store the defining packageName and uid, as they might be changed in // the ApplicationInfo for external services (which run with the package name // and uid of the caller). String definingPackageName = sInfo.applicationInfo.packageName; int definingUid = sInfo.applicationInfo.uid; if ((sInfo.flags & ServiceInfo.FLAG_EXTERNAL_SERVICE) != 0) { if (isBindExternal) { if (!sInfo.exported) { Loading Loading @@ -2175,8 +2181,8 @@ public final class ActiveServices { sInfo.applicationInfo.uid, name.getPackageName(), name.getClassName()); } r = new ServiceRecord(mAm, ss, className, name, filter, sInfo, callingFromFg, res); r = new ServiceRecord(mAm, ss, className, name, definingPackageName, definingUid, filter, sInfo, callingFromFg, res); res.setService(r); smap.mServicesByInstanceName.put(name, r); smap.mServicesByIntent.put(filter, r); Loading Loading @@ -2557,7 +2563,7 @@ public final class ActiveServices { final boolean isolated = (r.serviceInfo.flags&ServiceInfo.FLAG_ISOLATED_PROCESS) != 0; final String procName = r.processName; String hostingType = "service"; HostingRecord hostingRecord = new HostingRecord("service", r.instanceName); ProcessRecord app; if (!isolated) { Loading Loading @@ -2588,10 +2594,11 @@ public final class ActiveServices { app = r.isolatedProc; if (WebViewZygote.isMultiprocessEnabled() && r.serviceInfo.packageName.equals(WebViewZygote.getPackageName())) { hostingType = "webview_service"; hostingRecord = HostingRecord.byWebviewZygote(r.instanceName); } if ((r.serviceInfo.flags & ServiceInfo.FLAG_USE_APP_ZYGOTE) != 0) { hostingType = "app_zygote"; hostingRecord = HostingRecord.byAppZygote(r.instanceName, r.definingPackageName, r.definingUid); } } Loading @@ -2599,7 +2606,7 @@ public final class ActiveServices { // to be executed when the app comes up. if (app == null && !permissionsReviewRequired) { if ((app=mAm.startProcessLocked(procName, r.appInfo, true, intentFlags, hostingType, r.instanceName, false, isolated, false)) == null) { hostingRecord, false, isolated, false)) == null) { String msg = "Unable to launch app " + r.appInfo.packageName + "/" + r.appInfo.uid + " for service " Loading services/core/java/com/android/server/am/ActivityManagerService.java +31 −21 Original line number Diff line number Diff line Loading @@ -1498,6 +1498,7 @@ public class ActivityManagerService extends IActivityManager.Stub private ParcelFileDescriptor[] mLifeMonitorFds; static final HostingRecord sNullHostingRecord = new HostingRecord(null); /** * Used to notify activity lifecycle events. */ Loading Loading @@ -1963,7 +1964,7 @@ public class ActivityManagerService extends IActivityManager.Stub ProcessRecord app = mProcessList.newProcessRecordLocked(info, info.processName, false, 0, false); new HostingRecord("system")); app.setPersistent(true); app.pid = MY_PID; app.getWindowProcessController().setPid(MY_PID); Loading Loading @@ -2894,8 +2895,9 @@ public class ActivityManagerService extends IActivityManager.Stub info.seInfoUser = SELinuxUtil.COMPLETE_STR; info.targetSdkVersion = Build.VERSION.SDK_INT; ProcessRecord proc = mProcessList.startProcessLocked(processName, info /* info */, false /* knownToBeDead */, 0 /* intentFlags */, "" /* hostingType */, null /* hostingName */, true /* allowWhileBooting */, true /* isolated */, false /* knownToBeDead */, 0 /* intentFlags */, sNullHostingRecord /* hostingRecord */, true /* allowWhileBooting */, true /* isolated */, uid, true /* keepIfLarge */, abiOverride, entryPoint, entryPointArgs, crashHandler); return proc != null; Loading @@ -2905,11 +2907,10 @@ public class ActivityManagerService extends IActivityManager.Stub @GuardedBy("this") final ProcessRecord startProcessLocked(String processName, ApplicationInfo info, boolean knownToBeDead, int intentFlags, String hostingType, ComponentName hostingName, boolean allowWhileBooting, HostingRecord hostingRecord, boolean allowWhileBooting, boolean isolated, boolean keepIfLarge) { return mProcessList.startProcessLocked(processName, info, knownToBeDead, intentFlags, hostingType, hostingName, allowWhileBooting, isolated, 0 /* isolatedUid */, keepIfLarge, hostingRecord, allowWhileBooting, isolated, 0 /* isolatedUid */, keepIfLarge, null /* ABI override */, null /* entryPoint */, null /* entryPointArgs */, null /* crashHandler */); } Loading Loading @@ -4692,7 +4693,8 @@ public class ActivityManagerService extends IActivityManager.Stub app.deathRecipient = adr; } catch (RemoteException e) { app.resetPackageList(mProcessStats); mProcessList.startProcessLocked(app, "link fail", processName); mProcessList.startProcessLocked(app, new HostingRecord("link fail", processName)); return false; } Loading Loading @@ -4931,7 +4933,7 @@ public class ActivityManagerService extends IActivityManager.Stub app.resetPackageList(mProcessStats); app.unlinkDeathRecipient(); mProcessList.startProcessLocked(app, "bind fail", processName); mProcessList.startProcessLocked(app, new HostingRecord("bind-fail", processName)); return false; } Loading Loading @@ -5013,8 +5015,8 @@ public class ActivityManagerService extends IActivityManager.Stub app.startTime, (int) (bindApplicationTimeMillis - app.startTime), (int) (SystemClock.elapsedRealtime() - app.startTime), app.hostingType, (app.hostingNameStr != null ? app.hostingNameStr : "")); app.hostingRecord.getType(), (app.hostingRecord.getName() != null ? app.hostingRecord.getName() : "")); return true; } Loading Loading @@ -5123,7 +5125,7 @@ public class ActivityManagerService extends IActivityManager.Stub for (int ip=0; ip<NP; ip++) { if (DEBUG_PROCESSES) Slog.v(TAG_PROCESSES, "Starting process on hold: " + procs.get(ip)); mProcessList.startProcessLocked(procs.get(ip), "on-hold", null); mProcessList.startProcessLocked(procs.get(ip), new HostingRecord("on-hold")); } } if (mFactoryTest == FactoryTest.FACTORY_TEST_LOW_LEVEL) { Loading Loading @@ -6915,9 +6917,10 @@ public class ActivityManagerService extends IActivityManager.Stub } else { checkTime(startTime, "getContentProviderImpl: before start process"); proc = startProcessLocked(cpi.processName, cpr.appInfo, false, 0, "content provider", cpr.appInfo, false, 0, new HostingRecord("content provider", new ComponentName(cpi.applicationInfo.packageName, cpi.name), false, false, false); cpi.name)), false, false, false); checkTime(startTime, "getContentProviderImpl: after start process"); if (proc == null) { Slog.w(TAG, "Unable to launch app " Loading Loading @@ -7638,7 +7641,9 @@ public class ActivityManagerService extends IActivityManager.Stub } if (app == null) { app = mProcessList.newProcessRecordLocked(info, customProcess, isolated, 0, false); app = mProcessList.newProcessRecordLocked(info, customProcess, isolated, 0, new HostingRecord("added application", customProcess != null ? customProcess : info.processName)); mProcessList.updateLruProcessLocked(app, false, null); updateOomAdjLocked(); } Loading @@ -7659,9 +7664,9 @@ public class ActivityManagerService extends IActivityManager.Stub } if (app.thread == null && mPersistentStartingProcesses.indexOf(app) < 0) { mPersistentStartingProcesses.add(app); mProcessList.startProcessLocked(app, "added application", customProcess != null ? customProcess : app.processName, disableHiddenApiChecks, mountExtStorageFull, abiOverride); mProcessList.startProcessLocked(app, new HostingRecord("added application", customProcess != null ? customProcess : app.processName), disableHiddenApiChecks, mountExtStorageFull, abiOverride); } return app; Loading Loading @@ -13611,7 +13616,8 @@ public class ActivityManagerService extends IActivityManager.Stub } mProcessList.addProcessNameLocked(app); app.pendingStart = false; mProcessList.startProcessLocked(app, "restart", app.processName); mProcessList.startProcessLocked(app, new HostingRecord("restart", app.processName)); return true; } else if (app.pid > 0 && app.pid != MY_PID) { // Goodbye! Loading Loading @@ -13952,9 +13958,12 @@ public class ActivityManagerService extends IActivityManager.Stub (backupMode == ApplicationThreadConstants.BACKUP_MODE_INCREMENTAL) ? new ComponentName(app.packageName, app.backupAgentName) : new ComponentName("android", "FullBackupAgent"); // startProcessLocked() returns existing proc's record if it's already running ProcessRecord proc = startProcessLocked(app.processName, app, false, 0, "backup", hostingName, false, false, false); false, 0, new HostingRecord("backup", hostingName), false, false, false); if (proc == null) { Slog.e(TAG, "Unable to start backup agent process " + r); return false; Loading Loading @@ -18163,8 +18172,9 @@ public class ActivityManagerService extends IActivityManager.Stub } synchronized (ActivityManagerService.this) { startProcessLocked(processName, info, knownToBeDead, 0 /* intentFlags */, hostingType, hostingName, false /* allowWhileBooting */, false /* isolated */, true /* keepIfLarge */); new HostingRecord(hostingType, hostingName), false /* allowWhileBooting */, false /* isolated */, true /* keepIfLarge */); } } finally { Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); services/core/java/com/android/server/am/BroadcastQueue.java +1 −1 Original line number Diff line number Diff line Loading @@ -1623,7 +1623,7 @@ public final class BroadcastQueue { if ((r.curApp=mService.startProcessLocked(targetProcess, info.activityInfo.applicationInfo, true, r.intent.getFlags() | Intent.FLAG_FROM_BACKGROUND, "broadcast", r.curComponent, new HostingRecord("broadcast", r.curComponent), (r.intent.getFlags()&Intent.FLAG_RECEIVER_BOOT_UPGRADE) != 0, false, false)) == null) { // Ah, this recipient is unavailable. Finish it if necessary, Loading services/core/java/com/android/server/am/HostingRecord.java 0 → 100644 +149 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.am; import android.content.ComponentName; /** * This class describes various information required to start a process. * * The {@code mHostingType} field describes the reason why we started a process, and * is only used for logging and stats. * * The {@code mHostingName} field describes the Component for which we are starting the * process, and is only used for logging and stats. * * The {@code mHostingZygote} field describes from which Zygote the new process should be spawned. * * {@code mDefiningPackageName} contains the packageName of the package that defines the * component we want to start; this can be different from the packageName and uid in the * ApplicationInfo that we're creating the process with, in case the service is a * {@link android.content.Context#BIND_EXTERNAL_SERVICE} service. In that case, the packageName * and uid in the ApplicationInfo will be set to those of the caller, not of the defining package. * * {@code mDefiningUid} contains the uid of the application that defines the component we want to * start; this can be different from the packageName and uid in the ApplicationInfo that we're * creating the process with, in case the service is a * {@link android.content.Context#BIND_EXTERNAL_SERVICE} service. In that case, the packageName * and uid in the ApplicationInfo will be set to those of the caller, not of the defining package. * */ public final class HostingRecord { private static final int REGULAR_ZYGOTE = 0; private static final int WEBVIEW_ZYGOTE = 1; private static final int APP_ZYGOTE = 2; private final String mHostingType; private final String mHostingName; private final int mHostingZygote; private final String mDefiningPackageName; private final int mDefiningUid; public HostingRecord(String hostingType) { this(hostingType, null, REGULAR_ZYGOTE, null, -1); } public HostingRecord(String hostingType, ComponentName hostingName) { this(hostingType, hostingName, REGULAR_ZYGOTE); } public HostingRecord(String hostingType, String hostingName) { this(hostingType, hostingName, REGULAR_ZYGOTE); } private HostingRecord(String hostingType, ComponentName hostingName, int hostingZygote) { this(hostingType, hostingName.toShortString(), hostingZygote); } private HostingRecord(String hostingType, String hostingName, int hostingZygote) { this(hostingType, hostingName, hostingZygote, null, -1); } private HostingRecord(String hostingType, String hostingName, int hostingZygote, String definingPackageName, int definingUid) { mHostingType = hostingType; mHostingName = hostingName; mHostingZygote = hostingZygote; mDefiningPackageName = definingPackageName; mDefiningUid = definingUid; } public String getType() { return mHostingType; } public String getName() { return mHostingName; } /** * Returns the UID of the package defining the component we want to start. Only valid * when {@link #usesAppZygote()} returns true. * * @return the UID of the hosting application */ public int getDefiningUid() { return mDefiningUid; } /** * Returns the packageName of the package defining the component we want to start. Only valid * when {@link #usesAppZygote()} returns true. * * @return the packageName of the hosting application */ public String getDefiningPackageName() { return mDefiningPackageName; } /** * Creates a HostingRecord for a process that must spawn from the webview zygote * @param hostingName name of the component to be hosted in this process * @return The constructed HostingRecord */ public static HostingRecord byWebviewZygote(ComponentName hostingName) { return new HostingRecord("", hostingName.toShortString(), WEBVIEW_ZYGOTE); } /** * Creates a HostingRecord for a process that must spawn from the application zygote * @param hostingName name of the component to be hosted in this process * @param definingPackageName name of the package defining the service * @param definingUid uid of the package defining the service * @return The constructed HostingRecord */ public static HostingRecord byAppZygote(ComponentName hostingName, String definingPackageName, int definingUid) { return new HostingRecord("", hostingName.toShortString(), APP_ZYGOTE, definingPackageName, definingUid); } /** * @return whether the process should spawn from the application zygote */ public boolean usesAppZygote() { return mHostingZygote == APP_ZYGOTE; } /** * @return whether the process should spawn from the webview zygote */ public boolean usesWebviewZygote() { return mHostingZygote == WEBVIEW_ZYGOTE; } } services/core/java/com/android/server/am/ProcessList.java +63 −48 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
services/core/java/com/android/server/am/ActiveServices.java +13 −6 Original line number Diff line number Diff line Loading @@ -2117,6 +2117,12 @@ public final class ActiveServices { Slog.w(TAG, "Service lookup failed: " + msg); return new ServiceLookupResult(null, msg); } // Store the defining packageName and uid, as they might be changed in // the ApplicationInfo for external services (which run with the package name // and uid of the caller). String definingPackageName = sInfo.applicationInfo.packageName; int definingUid = sInfo.applicationInfo.uid; if ((sInfo.flags & ServiceInfo.FLAG_EXTERNAL_SERVICE) != 0) { if (isBindExternal) { if (!sInfo.exported) { Loading Loading @@ -2175,8 +2181,8 @@ public final class ActiveServices { sInfo.applicationInfo.uid, name.getPackageName(), name.getClassName()); } r = new ServiceRecord(mAm, ss, className, name, filter, sInfo, callingFromFg, res); r = new ServiceRecord(mAm, ss, className, name, definingPackageName, definingUid, filter, sInfo, callingFromFg, res); res.setService(r); smap.mServicesByInstanceName.put(name, r); smap.mServicesByIntent.put(filter, r); Loading Loading @@ -2557,7 +2563,7 @@ public final class ActiveServices { final boolean isolated = (r.serviceInfo.flags&ServiceInfo.FLAG_ISOLATED_PROCESS) != 0; final String procName = r.processName; String hostingType = "service"; HostingRecord hostingRecord = new HostingRecord("service", r.instanceName); ProcessRecord app; if (!isolated) { Loading Loading @@ -2588,10 +2594,11 @@ public final class ActiveServices { app = r.isolatedProc; if (WebViewZygote.isMultiprocessEnabled() && r.serviceInfo.packageName.equals(WebViewZygote.getPackageName())) { hostingType = "webview_service"; hostingRecord = HostingRecord.byWebviewZygote(r.instanceName); } if ((r.serviceInfo.flags & ServiceInfo.FLAG_USE_APP_ZYGOTE) != 0) { hostingType = "app_zygote"; hostingRecord = HostingRecord.byAppZygote(r.instanceName, r.definingPackageName, r.definingUid); } } Loading @@ -2599,7 +2606,7 @@ public final class ActiveServices { // to be executed when the app comes up. if (app == null && !permissionsReviewRequired) { if ((app=mAm.startProcessLocked(procName, r.appInfo, true, intentFlags, hostingType, r.instanceName, false, isolated, false)) == null) { hostingRecord, false, isolated, false)) == null) { String msg = "Unable to launch app " + r.appInfo.packageName + "/" + r.appInfo.uid + " for service " Loading
services/core/java/com/android/server/am/ActivityManagerService.java +31 −21 Original line number Diff line number Diff line Loading @@ -1498,6 +1498,7 @@ public class ActivityManagerService extends IActivityManager.Stub private ParcelFileDescriptor[] mLifeMonitorFds; static final HostingRecord sNullHostingRecord = new HostingRecord(null); /** * Used to notify activity lifecycle events. */ Loading Loading @@ -1963,7 +1964,7 @@ public class ActivityManagerService extends IActivityManager.Stub ProcessRecord app = mProcessList.newProcessRecordLocked(info, info.processName, false, 0, false); new HostingRecord("system")); app.setPersistent(true); app.pid = MY_PID; app.getWindowProcessController().setPid(MY_PID); Loading Loading @@ -2894,8 +2895,9 @@ public class ActivityManagerService extends IActivityManager.Stub info.seInfoUser = SELinuxUtil.COMPLETE_STR; info.targetSdkVersion = Build.VERSION.SDK_INT; ProcessRecord proc = mProcessList.startProcessLocked(processName, info /* info */, false /* knownToBeDead */, 0 /* intentFlags */, "" /* hostingType */, null /* hostingName */, true /* allowWhileBooting */, true /* isolated */, false /* knownToBeDead */, 0 /* intentFlags */, sNullHostingRecord /* hostingRecord */, true /* allowWhileBooting */, true /* isolated */, uid, true /* keepIfLarge */, abiOverride, entryPoint, entryPointArgs, crashHandler); return proc != null; Loading @@ -2905,11 +2907,10 @@ public class ActivityManagerService extends IActivityManager.Stub @GuardedBy("this") final ProcessRecord startProcessLocked(String processName, ApplicationInfo info, boolean knownToBeDead, int intentFlags, String hostingType, ComponentName hostingName, boolean allowWhileBooting, HostingRecord hostingRecord, boolean allowWhileBooting, boolean isolated, boolean keepIfLarge) { return mProcessList.startProcessLocked(processName, info, knownToBeDead, intentFlags, hostingType, hostingName, allowWhileBooting, isolated, 0 /* isolatedUid */, keepIfLarge, hostingRecord, allowWhileBooting, isolated, 0 /* isolatedUid */, keepIfLarge, null /* ABI override */, null /* entryPoint */, null /* entryPointArgs */, null /* crashHandler */); } Loading Loading @@ -4692,7 +4693,8 @@ public class ActivityManagerService extends IActivityManager.Stub app.deathRecipient = adr; } catch (RemoteException e) { app.resetPackageList(mProcessStats); mProcessList.startProcessLocked(app, "link fail", processName); mProcessList.startProcessLocked(app, new HostingRecord("link fail", processName)); return false; } Loading Loading @@ -4931,7 +4933,7 @@ public class ActivityManagerService extends IActivityManager.Stub app.resetPackageList(mProcessStats); app.unlinkDeathRecipient(); mProcessList.startProcessLocked(app, "bind fail", processName); mProcessList.startProcessLocked(app, new HostingRecord("bind-fail", processName)); return false; } Loading Loading @@ -5013,8 +5015,8 @@ public class ActivityManagerService extends IActivityManager.Stub app.startTime, (int) (bindApplicationTimeMillis - app.startTime), (int) (SystemClock.elapsedRealtime() - app.startTime), app.hostingType, (app.hostingNameStr != null ? app.hostingNameStr : "")); app.hostingRecord.getType(), (app.hostingRecord.getName() != null ? app.hostingRecord.getName() : "")); return true; } Loading Loading @@ -5123,7 +5125,7 @@ public class ActivityManagerService extends IActivityManager.Stub for (int ip=0; ip<NP; ip++) { if (DEBUG_PROCESSES) Slog.v(TAG_PROCESSES, "Starting process on hold: " + procs.get(ip)); mProcessList.startProcessLocked(procs.get(ip), "on-hold", null); mProcessList.startProcessLocked(procs.get(ip), new HostingRecord("on-hold")); } } if (mFactoryTest == FactoryTest.FACTORY_TEST_LOW_LEVEL) { Loading Loading @@ -6915,9 +6917,10 @@ public class ActivityManagerService extends IActivityManager.Stub } else { checkTime(startTime, "getContentProviderImpl: before start process"); proc = startProcessLocked(cpi.processName, cpr.appInfo, false, 0, "content provider", cpr.appInfo, false, 0, new HostingRecord("content provider", new ComponentName(cpi.applicationInfo.packageName, cpi.name), false, false, false); cpi.name)), false, false, false); checkTime(startTime, "getContentProviderImpl: after start process"); if (proc == null) { Slog.w(TAG, "Unable to launch app " Loading Loading @@ -7638,7 +7641,9 @@ public class ActivityManagerService extends IActivityManager.Stub } if (app == null) { app = mProcessList.newProcessRecordLocked(info, customProcess, isolated, 0, false); app = mProcessList.newProcessRecordLocked(info, customProcess, isolated, 0, new HostingRecord("added application", customProcess != null ? customProcess : info.processName)); mProcessList.updateLruProcessLocked(app, false, null); updateOomAdjLocked(); } Loading @@ -7659,9 +7664,9 @@ public class ActivityManagerService extends IActivityManager.Stub } if (app.thread == null && mPersistentStartingProcesses.indexOf(app) < 0) { mPersistentStartingProcesses.add(app); mProcessList.startProcessLocked(app, "added application", customProcess != null ? customProcess : app.processName, disableHiddenApiChecks, mountExtStorageFull, abiOverride); mProcessList.startProcessLocked(app, new HostingRecord("added application", customProcess != null ? customProcess : app.processName), disableHiddenApiChecks, mountExtStorageFull, abiOverride); } return app; Loading Loading @@ -13611,7 +13616,8 @@ public class ActivityManagerService extends IActivityManager.Stub } mProcessList.addProcessNameLocked(app); app.pendingStart = false; mProcessList.startProcessLocked(app, "restart", app.processName); mProcessList.startProcessLocked(app, new HostingRecord("restart", app.processName)); return true; } else if (app.pid > 0 && app.pid != MY_PID) { // Goodbye! Loading Loading @@ -13952,9 +13958,12 @@ public class ActivityManagerService extends IActivityManager.Stub (backupMode == ApplicationThreadConstants.BACKUP_MODE_INCREMENTAL) ? new ComponentName(app.packageName, app.backupAgentName) : new ComponentName("android", "FullBackupAgent"); // startProcessLocked() returns existing proc's record if it's already running ProcessRecord proc = startProcessLocked(app.processName, app, false, 0, "backup", hostingName, false, false, false); false, 0, new HostingRecord("backup", hostingName), false, false, false); if (proc == null) { Slog.e(TAG, "Unable to start backup agent process " + r); return false; Loading Loading @@ -18163,8 +18172,9 @@ public class ActivityManagerService extends IActivityManager.Stub } synchronized (ActivityManagerService.this) { startProcessLocked(processName, info, knownToBeDead, 0 /* intentFlags */, hostingType, hostingName, false /* allowWhileBooting */, false /* isolated */, true /* keepIfLarge */); new HostingRecord(hostingType, hostingName), false /* allowWhileBooting */, false /* isolated */, true /* keepIfLarge */); } } finally { Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
services/core/java/com/android/server/am/BroadcastQueue.java +1 −1 Original line number Diff line number Diff line Loading @@ -1623,7 +1623,7 @@ public final class BroadcastQueue { if ((r.curApp=mService.startProcessLocked(targetProcess, info.activityInfo.applicationInfo, true, r.intent.getFlags() | Intent.FLAG_FROM_BACKGROUND, "broadcast", r.curComponent, new HostingRecord("broadcast", r.curComponent), (r.intent.getFlags()&Intent.FLAG_RECEIVER_BOOT_UPGRADE) != 0, false, false)) == null) { // Ah, this recipient is unavailable. Finish it if necessary, Loading
services/core/java/com/android/server/am/HostingRecord.java 0 → 100644 +149 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.am; import android.content.ComponentName; /** * This class describes various information required to start a process. * * The {@code mHostingType} field describes the reason why we started a process, and * is only used for logging and stats. * * The {@code mHostingName} field describes the Component for which we are starting the * process, and is only used for logging and stats. * * The {@code mHostingZygote} field describes from which Zygote the new process should be spawned. * * {@code mDefiningPackageName} contains the packageName of the package that defines the * component we want to start; this can be different from the packageName and uid in the * ApplicationInfo that we're creating the process with, in case the service is a * {@link android.content.Context#BIND_EXTERNAL_SERVICE} service. In that case, the packageName * and uid in the ApplicationInfo will be set to those of the caller, not of the defining package. * * {@code mDefiningUid} contains the uid of the application that defines the component we want to * start; this can be different from the packageName and uid in the ApplicationInfo that we're * creating the process with, in case the service is a * {@link android.content.Context#BIND_EXTERNAL_SERVICE} service. In that case, the packageName * and uid in the ApplicationInfo will be set to those of the caller, not of the defining package. * */ public final class HostingRecord { private static final int REGULAR_ZYGOTE = 0; private static final int WEBVIEW_ZYGOTE = 1; private static final int APP_ZYGOTE = 2; private final String mHostingType; private final String mHostingName; private final int mHostingZygote; private final String mDefiningPackageName; private final int mDefiningUid; public HostingRecord(String hostingType) { this(hostingType, null, REGULAR_ZYGOTE, null, -1); } public HostingRecord(String hostingType, ComponentName hostingName) { this(hostingType, hostingName, REGULAR_ZYGOTE); } public HostingRecord(String hostingType, String hostingName) { this(hostingType, hostingName, REGULAR_ZYGOTE); } private HostingRecord(String hostingType, ComponentName hostingName, int hostingZygote) { this(hostingType, hostingName.toShortString(), hostingZygote); } private HostingRecord(String hostingType, String hostingName, int hostingZygote) { this(hostingType, hostingName, hostingZygote, null, -1); } private HostingRecord(String hostingType, String hostingName, int hostingZygote, String definingPackageName, int definingUid) { mHostingType = hostingType; mHostingName = hostingName; mHostingZygote = hostingZygote; mDefiningPackageName = definingPackageName; mDefiningUid = definingUid; } public String getType() { return mHostingType; } public String getName() { return mHostingName; } /** * Returns the UID of the package defining the component we want to start. Only valid * when {@link #usesAppZygote()} returns true. * * @return the UID of the hosting application */ public int getDefiningUid() { return mDefiningUid; } /** * Returns the packageName of the package defining the component we want to start. Only valid * when {@link #usesAppZygote()} returns true. * * @return the packageName of the hosting application */ public String getDefiningPackageName() { return mDefiningPackageName; } /** * Creates a HostingRecord for a process that must spawn from the webview zygote * @param hostingName name of the component to be hosted in this process * @return The constructed HostingRecord */ public static HostingRecord byWebviewZygote(ComponentName hostingName) { return new HostingRecord("", hostingName.toShortString(), WEBVIEW_ZYGOTE); } /** * Creates a HostingRecord for a process that must spawn from the application zygote * @param hostingName name of the component to be hosted in this process * @param definingPackageName name of the package defining the service * @param definingUid uid of the package defining the service * @return The constructed HostingRecord */ public static HostingRecord byAppZygote(ComponentName hostingName, String definingPackageName, int definingUid) { return new HostingRecord("", hostingName.toShortString(), APP_ZYGOTE, definingPackageName, definingUid); } /** * @return whether the process should spawn from the application zygote */ public boolean usesAppZygote() { return mHostingZygote == APP_ZYGOTE; } /** * @return whether the process should spawn from the webview zygote */ public boolean usesWebviewZygote() { return mHostingZygote == WEBVIEW_ZYGOTE; } }
services/core/java/com/android/server/am/ProcessList.java +63 −48 File changed.Preview size limit exceeded, changes collapsed. Show changes