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

Commit b7acc926 authored by Winson Chiu's avatar Winson Chiu Committed by Automerger Merge Worker
Browse files

Merge "Remove ComputerTracker and fix consistency in PackageManagerService"...

Merge "Remove ComputerTracker and fix consistency in PackageManagerService" into tm-dev am: 35fed17b

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16943855

Change-Id: Ic5d1d6b392e43d614b4bb3a5820490bbe5dfcace
parents 7a58fa3f 35fed17b
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -48,7 +48,6 @@ import com.android.server.pm.PackageSetting;
import com.android.server.pm.dex.DynamicCodeLogger;
import com.android.server.pm.parsing.pkg.AndroidPackage;
import com.android.server.pm.pkg.AndroidPackageApi;
import com.android.server.pm.pkg.PackageState;
import com.android.server.pm.pkg.PackageStateInternal;
import com.android.server.pm.pkg.SharedUserApi;
import com.android.server.pm.pkg.component.ParsedMainComponent;
@@ -690,8 +689,6 @@ public abstract class PackageManagerInternal {
    @Nullable
    public abstract PackageStateInternal getPackageStateInternal(@NonNull String packageName);

    public abstract @Nullable PackageState getPackageState(@NonNull String packageName);

    @NonNull
    public abstract ArrayMap<String, ? extends PackageStateInternal> getPackageStates();

+2 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.content.Context;
import android.content.pm.ApkChecksum;
import android.content.pm.Checksum;
import android.content.pm.IOnChecksumsReadyListener;
import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
import android.content.pm.Signature;
import android.content.pm.SigningDetails.SignatureSchemeVersion;
@@ -62,6 +63,7 @@ import android.util.apk.VerityBuilder;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.security.VerityUtils;
import com.android.server.LocalServices;
import com.android.server.pm.parsing.pkg.AndroidPackage;

import java.io.ByteArrayOutputStream;
+5 −4
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.function.QuadFunction;
import com.android.server.FgThread;
import com.android.server.LocalServices;
import com.android.server.compat.CompatChange;
import com.android.server.om.OverlayReferenceMapper;
import com.android.server.pm.parsing.pkg.AndroidPackage;
@@ -486,12 +487,12 @@ public class AppsFilter implements Watchable, Snappable {
    }

    /** Builder method for an AppsFilter */
    public static AppsFilter create(
            PackageManagerInternal pms, PackageManagerServiceInjector injector) {
    public static AppsFilter create(@NonNull PackageManagerServiceInjector injector,
            @NonNull PackageManagerInternal pmInt) {
        final boolean forceSystemAppsQueryable =
                injector.getContext().getResources()
                        .getBoolean(R.bool.config_forceSystemPackagesQueryable);
        final FeatureConfigImpl featureConfig = new FeatureConfigImpl(pms, injector);
        final FeatureConfigImpl featureConfig = new FeatureConfigImpl(pmInt, injector);
        final String[] forcedQueryablePackageNames;
        if (forceSystemAppsQueryable) {
            // all system apps already queryable, no need to read and parse individual exceptions
@@ -512,7 +513,7 @@ public class AppsFilter implements Watchable, Snappable {
        };
        AppsFilter appsFilter = new AppsFilter(stateProvider, featureConfig,
                forcedQueryablePackageNames, forceSystemAppsQueryable, null,
                injector.getBackgroundExecutor(), pms);
                injector.getBackgroundExecutor(), pmInt);
        featureConfig.setAppsFilter(appsFilter);
        return appsFilter;
    }
+16 −13
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.server.pm;
import static com.android.server.pm.PackageManagerService.PLATFORM_PACKAGE_NAME;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.job.JobInfo;
import android.app.job.JobParameters;
@@ -269,7 +270,7 @@ public final class BackgroundDexOptService {
            PackageManagerService pm = mInjector.getPackageManagerService();
            ArraySet<String> packagesToOptimize;
            if (packageNames == null) {
                packagesToOptimize = mDexOptHelper.getOptimizablePackages();
                packagesToOptimize = mDexOptHelper.getOptimizablePackages(pm.snapshotComputer());
            } else {
                packagesToOptimize = new ArraySet<>(packageNames);
            }
@@ -334,7 +335,7 @@ public final class BackgroundDexOptService {
            return false;
        }

        ArraySet<String> pkgs = mDexOptHelper.getOptimizablePackages();
        ArraySet<String> pkgs = mDexOptHelper.getOptimizablePackages(pm.snapshotComputer());
        if (pkgs.isEmpty()) {
            Slog.i(TAG, "No packages to optimize");
            markPostBootUpdateCompleted(params);
@@ -556,8 +557,8 @@ public final class BackgroundDexOptService {
    }

    /** Gets the size of a package. */
    private long getPackageSize(PackageManagerService pm, String pkg) {
        PackageInfo info = pm.snapshotComputer().getPackageInfo(pkg, 0, UserHandle.USER_SYSTEM);
    private long getPackageSize(@NonNull Computer snapshot, String pkg) {
        PackageInfo info = snapshot.getPackageInfo(pkg, 0, UserHandle.USER_SYSTEM);
        long size = 0;
        if (info != null && info.applicationInfo != null) {
            File path = Paths.get(info.applicationInfo.sourceDir).toFile();
@@ -605,8 +606,9 @@ public final class BackgroundDexOptService {
                Slog.d(TAG, "Should Downgrade " + shouldDowngrade);
            }
            if (shouldDowngrade) {
                final Computer snapshot = pm.snapshotComputer();
                Set<String> unusedPackages =
                        pm.getUnusedPackages(mDowngradeUnusedAppsThresholdInMillis);
                        snapshot.getUnusedPackages(mDowngradeUnusedAppsThresholdInMillis);
                if (DEBUG) {
                    Slog.d(TAG, "Unsused Packages " + String.join(",", unusedPackages));
                }
@@ -618,7 +620,7 @@ public final class BackgroundDexOptService {
                            // Should be aborted by the scheduler.
                            return abortCode;
                        }
                        @DexOptResult int downgradeResult = downgradePackage(pm, pkg,
                        @DexOptResult int downgradeResult = downgradePackage(snapshot, pm, pkg,
                                /* isForPrimaryDex= */ true, isPostBootUpdate);
                        if (downgradeResult == PackageDexOptimizer.DEX_OPT_PERFORMED) {
                            updatedPackages.add(pkg);
@@ -629,7 +631,7 @@ public final class BackgroundDexOptService {
                            return status;
                        }
                        if (supportSecondaryDex) {
                            downgradeResult = downgradePackage(pm, pkg,
                            downgradeResult = downgradePackage(snapshot, pm, pkg,
                                    /* isForPrimaryDex= */false, isPostBootUpdate);
                            status = convertPackageDexOptimizerStatusToInternal(downgradeResult);
                            if (status != STATUS_OK) {
@@ -696,8 +698,8 @@ public final class BackgroundDexOptService {
     * @return PackageDexOptimizer.DEX_*
     */
    @DexOptResult
    private int downgradePackage(PackageManagerService pm, String pkg, boolean isForPrimaryDex,
            boolean isPostBootUpdate) {
    private int downgradePackage(@NonNull Computer snapshot, PackageManagerService pm, String pkg,
            boolean isForPrimaryDex, boolean isPostBootUpdate) {
        if (DEBUG) {
            Slog.d(TAG, "Downgrading " + pkg);
        }
@@ -709,15 +711,15 @@ public final class BackgroundDexOptService {
        if (!isPostBootUpdate) {
            dexoptFlags |= DexoptOptions.DEXOPT_IDLE_BACKGROUND_JOB;
        }
        long package_size_before = getPackageSize(pm, pkg);
        long package_size_before = getPackageSize(snapshot, pkg);
        int result = PackageDexOptimizer.DEX_OPT_SKIPPED;
        if (isForPrimaryDex || PLATFORM_PACKAGE_NAME.equals(pkg)) {
            // This applies for system apps or if packages location is not a directory, i.e.
            // monolithic install.
            if (!pm.canHaveOatDir(pkg)) {
            if (!pm.canHaveOatDir(snapshot, pkg)) {
                // For apps that don't have the oat directory, instead of downgrading,
                // remove their compiler artifacts from dalvik cache.
                pm.deleteOatArtifactsOfPackage(pkg);
                pm.deleteOatArtifactsOfPackage(snapshot, pkg);
            } else {
                result = performDexOptPrimary(pkg, reason, dexoptFlags);
            }
@@ -726,8 +728,9 @@ public final class BackgroundDexOptService {
        }

        if (result == PackageDexOptimizer.DEX_OPT_PERFORMED) {
            final Computer newSnapshot = pm.snapshotComputer();
            FrameworkStatsLog.write(FrameworkStatsLog.APP_DOWNGRADED, pkg, package_size_before,
                    getPackageSize(pm, pkg), /*aggressive=*/ false);
                    getPackageSize(newSnapshot, pkg), /*aggressive=*/ false);
        }
        return result;
    }
+62 −178

File changed.

Preview size limit exceeded, changes collapsed.

Loading