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

Commit 5e41fa60 authored by Jiakai Zhang's avatar Jiakai Zhang Committed by Android (Google) Code Review
Browse files

Merge "Notify Pinner Service and write FrameworkStatsLog."

parents f104ba94 83c90310
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -331,6 +331,7 @@ public final class BackgroundDexOptService {
    /** Adds listener for package update */
    public void addPackagesUpdatedListener(PackagesUpdatedListener listener)
            throws LegacyDexoptDisabledException {
        // TODO(b/251903639): Evaluate whether this needs to support ART Service or not.
        Installer.checkLegacyDexoptDisabled();
        synchronized (mLock) {
            mPackagesUpdatedListeners.add(listener);
@@ -629,6 +630,8 @@ public final class BackgroundDexOptService {

    /** Gets the size of a package. */
    private long getPackageSize(@NonNull Computer snapshot, String pkg) {
        // TODO(b/251903639): Make this in line with the calculation in
        // `DexOptHelper.DexoptDoneHandler`.
        PackageInfo info = snapshot.getPackageInfo(pkg, 0, UserHandle.USER_SYSTEM);
        long size = 0;
        if (info != null && info.applicationInfo != null) {
@@ -723,6 +726,8 @@ public final class BackgroundDexOptService {
            return optimizePackages(pkgs, lowStorageThreshold, updatedPackages, isPostBootUpdate);
        } finally {
            // Always let the pinner service know about changes.
            // TODO(b/251903639): ART Service does this for all dexopts, while the code below only
            // runs for background jobs. We should try to make them behave the same.
            notifyPinService(updatedPackages);
            // Only notify IORap the primary dex opt, because we don't want to
            // invalidate traces unnecessary due to b/161633001 and that it's
+32 −0
Original line number Diff line number Diff line
@@ -57,8 +57,11 @@ import android.util.Log;
import android.util.Slog;

import com.android.internal.logging.MetricsLogger;
import com.android.internal.util.FrameworkStatsLog;
import com.android.internal.util.IndentingPrintWriter;
import com.android.server.LocalManagerRegistry;
import com.android.server.LocalServices;
import com.android.server.PinnerService;
import com.android.server.art.ArtManagerLocal;
import com.android.server.art.DexUseManagerLocal;
import com.android.server.art.ReasonMapping;
@@ -970,6 +973,35 @@ public final class DexOptHelper {
                mPm.getPackageUsage().maybeWriteAsync(mPm.mSettings.getPackagesLocked());
                mPm.mCompilerStats.maybeWriteAsync();
            }

            if (result.getReason().equals(ReasonMapping.REASON_INACTIVE)) {
                for (DexoptResult.PackageDexoptResult pkgRes : result.getPackageDexoptResults()) {
                    if (pkgRes.getStatus() == DexoptResult.DEXOPT_PERFORMED) {
                        long pkgSizeBytes = 0;
                        long pkgSizeBeforeBytes = 0;
                        for (DexoptResult.DexContainerFileDexoptResult dexRes :
                                pkgRes.getDexContainerFileDexoptResults()) {
                            long dexContainerSize = new File(dexRes.getDexContainerFile()).length();
                            pkgSizeBytes += dexRes.getSizeBytes() + dexContainerSize;
                            pkgSizeBeforeBytes += dexRes.getSizeBeforeBytes() + dexContainerSize;
                        }
                        FrameworkStatsLog.write(FrameworkStatsLog.APP_DOWNGRADED,
                                pkgRes.getPackageName(), pkgSizeBeforeBytes, pkgSizeBytes,
                                false /* aggressive */);
                    }
                }
            }

            var updatedPackages = new ArraySet<String>();
            for (DexoptResult.PackageDexoptResult pkgRes : result.getPackageDexoptResults()) {
                if (pkgRes.hasUpdatedArtifacts()) {
                    updatedPackages.add(pkgRes.getPackageName());
                }
            }
            if (!updatedPackages.isEmpty()) {
                LocalServices.getService(PinnerService.class)
                        .update(updatedPackages, false /* force */);
            }
        }
    }