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

Commit 8c421efc authored by Sam Gilbert's avatar Sam Gilbert Committed by Automerger Merge Worker
Browse files

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

Merge "Revert "Remove ComputerTracker and fix consistency in PackageManagerService"" into tm-dev am: 2a82f857

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

Change-Id: I9a1f380a062f0ad965458ee700675999e05f622f
parents 94b51c04 2a82f857
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ 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;
@@ -689,6 +690,8 @@ 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();

+0 −2
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@ 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;
@@ -63,7 +62,6 @@ 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;
+4 −5
Original line number Diff line number Diff line
@@ -52,7 +52,6 @@ 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;
@@ -487,12 +486,12 @@ public class AppsFilter implements Watchable, Snappable {
    }

    /** Builder method for an AppsFilter */
    public static AppsFilter create(@NonNull PackageManagerServiceInjector injector,
            @NonNull PackageManagerInternal pmInt) {
    public static AppsFilter create(
            PackageManagerInternal pms, PackageManagerServiceInjector injector) {
        final boolean forceSystemAppsQueryable =
                injector.getContext().getResources()
                        .getBoolean(R.bool.config_forceSystemPackagesQueryable);
        final FeatureConfigImpl featureConfig = new FeatureConfigImpl(pmInt, injector);
        final FeatureConfigImpl featureConfig = new FeatureConfigImpl(pms, injector);
        final String[] forcedQueryablePackageNames;
        if (forceSystemAppsQueryable) {
            // all system apps already queryable, no need to read and parse individual exceptions
@@ -513,7 +512,7 @@ public class AppsFilter implements Watchable, Snappable {
        };
        AppsFilter appsFilter = new AppsFilter(stateProvider, featureConfig,
                forcedQueryablePackageNames, forceSystemAppsQueryable, null,
                injector.getBackgroundExecutor(), pmInt);
                injector.getBackgroundExecutor(), pms);
        featureConfig.setAppsFilter(appsFilter);
        return appsFilter;
    }
+13 −16
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ 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;
@@ -270,7 +269,7 @@ public final class BackgroundDexOptService {
            PackageManagerService pm = mInjector.getPackageManagerService();
            ArraySet<String> packagesToOptimize;
            if (packageNames == null) {
                packagesToOptimize = mDexOptHelper.getOptimizablePackages(pm.snapshotComputer());
                packagesToOptimize = mDexOptHelper.getOptimizablePackages();
            } else {
                packagesToOptimize = new ArraySet<>(packageNames);
            }
@@ -335,7 +334,7 @@ public final class BackgroundDexOptService {
            return false;
        }

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

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

File changed.

Preview size limit exceeded, changes collapsed.

Loading