Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f4631727 authored by Tiger's avatar Tiger
Browse files

Acquire the global lock of WM before calling updateConfigIfNeeded

The logic in PackageConfigPersister#updateConfigIfNeeded might access
the ConfigurationContainer fields protected by WindowManagerGlobalLock.
This CL moves the call to
ActivityTaskManagerService.LocalService#onProcessAdded instead.

Fix: 365671924
Flag: com.android.window.flags.insets_decoupled_configuration
Test: atest WindowProcessControllerTests ActivityTaskManagerServiceTests
Change-Id: I0c37eb6ca60e6bc9ca9952441bf47e78fba8b174
parent 6501ca31
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -6207,6 +6207,8 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        @Override
        public void onProcessAdded(WindowProcessController proc) {
            synchronized (mGlobalLockWithoutBoost) {
                mPackageConfigPersister.updateConfigIfNeeded(
                        proc, proc.mUserId, proc.mInfo.packageName);
                mProcessNames.put(proc.mName, proc.mUid, proc);
            }
        }
+0 −2
Original line number Diff line number Diff line
@@ -357,8 +357,6 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio
        }
        mUseFifoUiScheduling = com.android.window.flags.Flags.fifoPriorityForMajorUiProcesses()
                && (isSysUiPackage || mAtm.isCallerRecents(uid));

        mAtm.mPackageConfigPersister.updateConfigIfNeeded(this, mUserId, mInfo.packageName);
    }

    public void setPid(int pid) {
+1 −3
Original line number Diff line number Diff line
@@ -932,7 +932,6 @@ public class ActivityTaskManagerServiceTests extends WindowTestsBase {
        WindowProcessController wpc = createWindowProcessController(
                DEFAULT_PACKAGE_NAME, DEFAULT_USER_ID);
        mAtm.mProcessMap.put(Binder.getCallingPid(), wpc);
        mAtm.mInternal.onProcessAdded(wpc);

        ActivityTaskManagerInternal.PackageConfig appSpecificConfig = mAtm.mInternal
                .getApplicationConfig(DEFAULT_PACKAGE_NAME, DEFAULT_USER_ID);
@@ -987,7 +986,6 @@ public class ActivityTaskManagerServiceTests extends WindowTestsBase {
        WindowProcessController wpc = createWindowProcessController(
                DEFAULT_PACKAGE_NAME, DEFAULT_USER_ID);
        mAtm.mProcessMap.put(Binder.getCallingPid(), wpc);
        mAtm.mInternal.onProcessAdded(wpc);

        ActivityTaskManagerInternal.PackageConfigurationUpdater packageConfigUpdater =
                mAtm.mInternal.createPackageConfigurationUpdater(DEFAULT_PACKAGE_NAME,
@@ -1018,7 +1016,6 @@ public class ActivityTaskManagerServiceTests extends WindowTestsBase {
        WindowProcessController wpc = createWindowProcessController(
                DEFAULT_PACKAGE_NAME, DEFAULT_USER_ID);
        mAtm.mProcessMap.put(Binder.getCallingPid(), wpc);
        mAtm.mInternal.onProcessAdded(wpc);

        ActivityTaskManagerInternal.PackageConfigurationUpdater packageConfigUpdater =
                mAtm.mInternal.createPackageConfigurationUpdater(DEFAULT_PACKAGE_NAME,
@@ -1048,6 +1045,7 @@ public class ActivityTaskManagerServiceTests extends WindowTestsBase {
        WindowProcessController wpc = new WindowProcessController(
                mAtm, info, packageName, 0, userId, null, mMockListener);
        mAtm.mInternal.preBindApplication(wpc, info);
        mAtm.mInternal.onProcessAdded(wpc);
        wpc.setThread(mock(IApplicationThread.class));
        return wpc;
    }