diff options
5 files changed, 23 insertions, 19 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index d12153559b31..7d90dfc998d8 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -299,7 +299,6 @@ import android.content.pm.TestUtilityService; import android.content.pm.UserInfo; import android.content.pm.UserProperties; import android.content.pm.VersionedPackage; -import android.content.res.CompatibilityInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.database.ContentObserver; @@ -2971,10 +2970,6 @@ public class ActivityManagerService extends IActivityManager.Stub } } - CompatibilityInfo compatibilityInfoForPackage(ApplicationInfo ai) { - return mAtmInternal.compatibilityInfoForPackage(ai); - } - /** * Enforces that the uid that calls a method is not an * {@link UserHandle#isIsolated(int) isolated} uid. @@ -4635,7 +4630,6 @@ public class ActivityManagerService extends IActivityManager.Stub ProtoLog.v(WM_DEBUG_CONFIGURATION, "Binding proc %s with config %s", processName, app.getWindowProcessController().getConfiguration()); ApplicationInfo appInfo = instr != null ? instr.mTargetInfo : app.info; - app.setCompat(compatibilityInfoForPackage(appInfo)); ProfilerInfo profilerInfo = mAppProfiler.setupProfilerInfoLocked(thread, app, instr); @@ -4674,7 +4668,9 @@ public class ActivityManagerService extends IActivityManager.Stub checkTime(startTime, "attachApplicationLocked: immediately before bindApplication"); bindApplicationTimeMillis = SystemClock.uptimeMillis(); bindApplicationTimeNanos = SystemClock.uptimeNanos(); - mAtmInternal.preBindApplication(app.getWindowProcessController()); + final ActivityTaskManagerInternal.PreBindInfo preBindInfo = + mAtmInternal.preBindApplication(app.getWindowProcessController(), appInfo); + app.setCompat(preBindInfo.compatibilityInfo); final ActiveInstrumentation instr2 = app.getActiveInstrumentation(); if (mPlatformCompat != null) { mPlatformCompat.resetReporting(app.info); @@ -4716,7 +4712,7 @@ public class ActivityManagerService extends IActivityManager.Stub enableTrackAllocation, isRestrictedBackupMode || !normalMode, app.isPersistent(), - new Configuration(app.getWindowProcessController().getConfiguration()), + preBindInfo.configuration, app.getCompat(), getCommonServicesLocked(app.isolated), mCoreSettingsObserver.getCoreSettingsLocked(), diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java index 26a6b00254d3..b8ce02ed5937 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java @@ -380,7 +380,16 @@ public abstract class ActivityTaskManagerInternal { public abstract void onPackageAdded(String name, boolean replacing); public abstract void onPackageReplaced(ApplicationInfo aInfo); - public abstract CompatibilityInfo compatibilityInfoForPackage(ApplicationInfo ai); + /** The data for IApplicationThread#bindApplication. */ + public static final class PreBindInfo { + public final @NonNull CompatibilityInfo compatibilityInfo; + public final @NonNull Configuration configuration; + + PreBindInfo(@NonNull CompatibilityInfo compatInfo, @NonNull Configuration config) { + compatibilityInfo = compatInfo; + configuration = config; + } + } public final class ActivityTokens { private final @NonNull IBinder mActivityToken; @@ -502,7 +511,9 @@ public abstract class ActivityTaskManagerInternal { public abstract void resumeTopActivities(boolean scheduleIdle); /** Called by AM just before it binds to an application process. */ - public abstract void preBindApplication(WindowProcessController wpc); + @NonNull + public abstract PreBindInfo preBindApplication(@NonNull WindowProcessController wpc, + @NonNull ApplicationInfo info); /** Called by AM when an application process attaches. */ public abstract boolean attachApplication(WindowProcessController wpc) throws RemoteException; diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index f5476f29849a..12f91437587c 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -6421,13 +6421,6 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } @Override - public CompatibilityInfo compatibilityInfoForPackage(ApplicationInfo ai) { - synchronized (mGlobalLock) { - return compatibilityInfoForPackageLocked(ai); - } - } - - @Override public void sendActivityResult(int callingUid, IBinder activityToken, String resultWho, int requestCode, int resultCode, Intent data) { final ActivityRecord r; @@ -6705,9 +6698,13 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @HotPath(caller = HotPath.PROCESS_CHANGE) @Override - public void preBindApplication(WindowProcessController wpc) { + public PreBindInfo preBindApplication(WindowProcessController wpc, ApplicationInfo info) { synchronized (mGlobalLockWithoutBoost) { mTaskSupervisor.getActivityMetricsLogger().notifyBindApplication(wpc.mInfo); + wpc.onConfigurationChanged(getGlobalConfiguration()); + // The "info" can be the target of instrumentation. + return new PreBindInfo(compatibilityInfoForPackageLocked(info), + new Configuration(wpc.getConfiguration())); } } diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java index d96ebc6655ac..281221e130fe 100644 --- a/services/core/java/com/android/server/wm/WindowProcessController.java +++ b/services/core/java/com/android/server/wm/WindowProcessController.java @@ -357,7 +357,6 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio mUseFifoUiScheduling = com.android.window.flags.Flags.fifoPriorityForMajorUiProcesses() && (isSysUiPackage || mAtm.isCallerRecents(uid)); - onConfigurationChanged(atm.getGlobalConfiguration()); mAtm.mPackageConfigPersister.updateConfigIfNeeded(this, mUserId, mInfo.packageName); } diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java index 4f94704ee39f..c706d5200443 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java @@ -1047,6 +1047,7 @@ public class ActivityTaskManagerServiceTests extends WindowTestsBase { info.packageName = packageName; WindowProcessController wpc = new WindowProcessController( mAtm, info, packageName, 0, userId, null, mMockListener); + mAtm.mInternal.preBindApplication(wpc, info); wpc.setThread(mock(IApplicationThread.class)); return wpc; } |