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

Commit f13bcca8 authored by TYM Tsai's avatar TYM Tsai
Browse files

Refactor scanInstallPackages

Make the method not hold mInstallLoack.

Bug: 362840929
Flag: EXEMPT Code refactoring
Test: atest CtsPackageInstallTestCases
Change-Id: I45910ce359061afe6b4c07497fbe89c6dd904a84
parent 12a2e8f1
Loading
Loading
Loading
Loading
+63 −69
Original line number Diff line number Diff line
@@ -1205,8 +1205,6 @@ final class InstallPackageHelper {

    private boolean scanInstallPackages(List<InstallRequest> requests,
            Map<String, Boolean> createdAppId, Map<String, Settings.VersionInfo> versionInfos) {
        // TODO(b/362840929): remove locker
        try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) {
        final Set<String> scannedPackages = new ArraySet<>(requests.size());
        for (InstallRequest request : requests) {
            final ParsedPackage packageToScan = request.getParsedPackage();
@@ -1219,7 +1217,7 @@ final class InstallPackageHelper {
            final String packageName = packageToScan.getPackageName();
            try {
                request.onScanStarted();
                    final ScanResult scanResult = scanPackageTracedLI(request.getParsedPackage(),
                final ScanResult scanResult = scanPackageTraced(request.getParsedPackage(),
                        request.getParseFlags(), request.getScanFlags(),
                        System.currentTimeMillis(), request.getUser(),
                        request.getAbiOverride());
@@ -1271,7 +1269,6 @@ final class InstallPackageHelper {
                request.setResponsibleInstallerTitles(responsibleInstallerTitles);
            }
        }
        }
        return true;
    }

@@ -1366,7 +1363,6 @@ final class InstallPackageHelper {
        }
    }

    @GuardedBy("mPm.mInstallLock")
    private boolean checkNoAppStorageIsConsistent(AndroidPackage oldPkg, AndroidPackage newPkg) {
        if (oldPkg == null) {
            // New install, nothing to check against.
@@ -4119,14 +4115,13 @@ final class InstallPackageHelper {
        }
    }

    @GuardedBy("mPm.mInstallLock")
    private ScanResult scanPackageTracedLI(ParsedPackage parsedPackage,
    private ScanResult scanPackageTraced(ParsedPackage parsedPackage,
            final @ParsingPackageUtils.ParseFlags int parseFlags,
            @PackageManagerService.ScanFlags int scanFlags, long currentTime,
            @Nullable UserHandle user, String cpuAbiOverride) throws PackageManagerException {
        Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "scanPackage");
        try {
            return scanPackageNewLI(parsedPackage, parseFlags, scanFlags, currentTime, user,
            return scanPackageNew(parsedPackage, parseFlags, scanFlags, currentTime, user,
                    cpuAbiOverride);
        } finally {
            Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
@@ -4203,8 +4198,7 @@ final class InstallPackageHelper {
                realPkgName, parseFlags, scanFlags, isPlatformPackage, user, cpuAbiOverride);
    }

    @GuardedBy("mPm.mInstallLock")
    private ScanResult scanPackageNewLI(@NonNull ParsedPackage parsedPackage,
    private ScanResult scanPackageNew(@NonNull ParsedPackage parsedPackage,
            final @ParsingPackageUtils.ParseFlags int parseFlags,
            @PackageManagerService.ScanFlags int scanFlags, long currentTime,
            @Nullable UserHandle user, String cpuAbiOverride)
@@ -4235,7 +4229,7 @@ final class InstallPackageHelper {
                    initialScanRequest.mOriginalPkgSetting, initialScanRequest.mRealPkgName,
                    parseFlags, scanFlags, initialScanRequest.mIsPlatformPackage, user,
                    cpuAbiOverride);
            return ScanPackageUtils.scanPackageOnlyLI(request, mPm.mInjector, mPm.mFactoryTest,
            return ScanPackageUtils.scanPackageOnly(request, mPm.mInjector, mPm.mFactoryTest,
                    currentTime);
        }
    }
@@ -4289,7 +4283,7 @@ final class InstallPackageHelper {
                ScanPackageUtils.applyPolicy(parsedPackage, scanFlags,
                        mPm.getPlatformPackage(), true);
                final ScanResult scanResult =
                        ScanPackageUtils.scanPackageOnlyLI(request, mPm.mInjector,
                        ScanPackageUtils.scanPackageOnly(request, mPm.mInjector,
                                mPm.mFactoryTest, -1L);
                if (scanResult.mExistingSettingCopied
                        && scanResult.mRequest.mPkgSetting != null) {
@@ -4481,7 +4475,7 @@ final class InstallPackageHelper {

        final long firstInstallTime = Flags.fixSystemAppsFirstInstallTime()
                ? System.currentTimeMillis() : 0;
        final ScanResult scanResult = scanPackageNewLI(parsedPackage, parseFlags,
        final ScanResult scanResult = scanPackageNew(parsedPackage, parseFlags,
                scanFlags | SCAN_UPDATE_SIGNATURE, firstInstallTime, user, null);
        return new Pair<>(scanResult, shouldHideSystemApp);
    }
+1 −3
Original line number Diff line number Diff line
@@ -72,7 +72,6 @@ import android.util.Slog;
import android.util.apk.ApkSignatureVerifier;
import android.util.jar.StrictJarFile;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.pm.parsing.pkg.ParsedPackage;
import com.android.internal.pm.pkg.component.ComponentMutateUtils;
@@ -114,10 +113,9 @@ final class ScanPackageUtils {
     * @param currentTime The current time, in millis
     * @return The results of the scan
     */
    @GuardedBy("mPm.mInstallLock")
    @VisibleForTesting
    @NonNull
    public static ScanResult scanPackageOnlyLI(@NonNull ScanRequest request,
    public static ScanResult scanPackageOnly(@NonNull ScanRequest request,
            PackageManagerServiceInjector injector,
            boolean isUnderFactoryTest, long currentTime)
            throws PackageManagerException {
+2 −2
Original line number Diff line number Diff line
@@ -511,7 +511,7 @@ public class ScanTests {
                .addUsesPermission(
                        new ParsedUsesPermissionImpl(Manifest.permission.FACTORY_TEST, 0));

        final ScanResult scanResult = ScanPackageUtils.scanPackageOnlyLI(
        final ScanResult scanResult = ScanPackageUtils.scanPackageOnly(
                createBasicScanRequestBuilder(basicPackage).build(),
                mMockInjector,
                true /*isUnderFactoryTest*/,
@@ -559,7 +559,7 @@ public class ScanTests {

    private ScanResult executeScan(
            ScanRequest scanRequest) throws PackageManagerException {
        ScanResult result = ScanPackageUtils.scanPackageOnlyLI(
        ScanResult result = ScanPackageUtils.scanPackageOnly(
                scanRequest,
                mMockInjector,
                false /*isUnderFactoryTest*/,