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

Commit d12cecab authored by Kevin Jeon's avatar Kevin Jeon
Browse files

Clean up PM flag for parallel package parsing

Test: presubmit
Bug: 444319626
Flag: EXEMPT FLAG_REMOVAL
Change-Id: I9bd37e9808e45208af4bedee5d9c824111fee162
parent 3898892c
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -302,13 +302,6 @@ flag {
    is_fixed_read_only: true
}

flag {
    name: "parallel_package_parsing_across_system_dirs"
    namespace: "system_performance"
    description: "Continue parsing packages in system dirs instead of blocking on install completion for each directory."
    bug: "401622806"
}

flag {
    name: "protect_supervision_packages"
    namespace: "supervision"
+14 −27
Original line number Diff line number Diff line
@@ -175,10 +175,7 @@ final class InitAppsHelper {
        final List<ApexManager.ScanResult> apexScanResults = scanApexPackagesTraced(packageParser);
        mApexManager.notifyScanResult(apexScanResults);

        // If this flag is enabled, system directories will be scanned in parallel. This doesn't
        // affect the order that packages are installed in.
        scanSystemDirs(packageParser, mExecutorService,
                android.content.pm.Flags.parallelPackageParsingAcrossSystemDirs());
        scanSystemDirs(packageParser, mExecutorService);

        // Parse overlay configuration files to set default enable state, mutability, and
        // priority of system overlays.
@@ -343,30 +340,23 @@ final class InitAppsHelper {
        }
    }

    // Helper function for either immediately scanning scanDir using the input scan parameters, or
    // just collecting them in scanParamsList to be processed in parallel later.
    // Helper function for collecting input scan parameters to be processed in parallel later.
    @GuardedBy({"mPm.mInstallLock", "mPm.mLock"})
    private void processOrCollectScanParams(List<ScanParams> scanParamsList, File scanDir,
    private void collectScanParams(List<ScanParams> scanParamsList, File scanDir,
            int parseFlags, int scanFlags, PackageParser2 packageParser,
            ExecutorService executorService, ApexManager.ActiveApexInfo apexInfo) {
        if (scanParamsList == null) {
            scanDirTracedLI(scanDir, parseFlags, scanFlags, packageParser, executorService,
                    apexInfo);
        } else {
        scanParamsList.add((scanFlags & SCAN_AS_APK_IN_APEX) != 0
                ? ScanParams.forApkInApexScan(scanDir, parseFlags, scanFlags, apexInfo)
                : ScanParams.forApkPartitionScan(scanDir, parseFlags, scanFlags));
    }
    }

    /**
     * First part of init dir scanning
     */
    @GuardedBy({"mPm.mInstallLock", "mPm.mLock"})
    private void scanSystemDirs(PackageParser2 packageParser, ExecutorService executorService,
            boolean parallelDirScan) {
    private void scanSystemDirs(PackageParser2 packageParser, ExecutorService executorService) {
        File frameworkDir = new File(Environment.getRootDirectory(), "framework");
        List<ScanParams> scanParamsList = parallelDirScan ? new ArrayList<>() : null;
        List<ScanParams> scanParamsList = new ArrayList<>();

        // Collect vendor/product/system_ext overlay packages. (Do this before scanning
        // any apps.)
@@ -377,32 +367,29 @@ final class InitAppsHelper {
            if (partition.getOverlayFolder() == null) {
                continue;
            }
            processOrCollectScanParams(scanParamsList, partition.getOverlayFolder(),
            collectScanParams(scanParamsList, partition.getOverlayFolder(),
                      mSystemParseFlags, mSystemScanFlags | partition.scanFlag, packageParser,
                      executorService, partition.apexInfo);
        }
        processOrCollectScanParams(scanParamsList, frameworkDir, mSystemParseFlags,
        collectScanParams(scanParamsList, frameworkDir, mSystemParseFlags,
                  mSystemScanFlags | SCAN_NO_DEX | SCAN_AS_PRIVILEGED, packageParser,
                  executorService, null);

        for (int i = 0, size = mDirsToScanAsSystem.size(); i < size; i++) {
            final ScanPartition partition = mDirsToScanAsSystem.get(i);
            if (partition.getPrivAppFolder() != null) {
                processOrCollectScanParams(scanParamsList, partition.getPrivAppFolder(),
                collectScanParams(scanParamsList, partition.getPrivAppFolder(),
                        mSystemParseFlags,
                        mSystemScanFlags | SCAN_AS_PRIVILEGED | partition.scanFlag,
                        packageParser, executorService, partition.apexInfo);
            }
            processOrCollectScanParams(scanParamsList, partition.getAppFolder(), mSystemParseFlags,
            collectScanParams(scanParamsList, partition.getAppFolder(), mSystemParseFlags,
                    mSystemScanFlags | partition.scanFlag, packageParser, executorService,
                    partition.apexInfo);
        }

        // Scan all directories with the parameters contained in scanParamsList. If parallelDirScan
        // is not enabled, we will have already scanned and processed everything by this point.
        if (parallelDirScan) {
        // Scan all directories with the parameters contained in scanParamsList.
        parallelScanDirTracedLI(scanParamsList, packageParser, executorService);
        }

        if (!mPm.mPackages.containsKey("android")) {
            throw new IllegalStateException(