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

Commit 7d6e3256 authored by Joanne Chung's avatar Joanne Chung Committed by Android (Google) Code Review
Browse files

Merge "[pm][metrics] add frozen latency to metrics" into main

parents 8fb4fa60 5eb265e1
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -1582,7 +1582,8 @@ final class InstallPackageHelper {

        final PackageFreezer freezer =
                freezePackageForInstall(pkgName, UserHandle.USER_ALL, installFlags,
                        "installPackageLI", ApplicationExitInfo.REASON_PACKAGE_UPDATED);
                        "installPackageLI", ApplicationExitInfo.REASON_PACKAGE_UPDATED, request);

        boolean shouldCloseFreezerBeforeReturn = true;
        try {
            final PackageState oldPackageState;
@@ -2032,11 +2033,11 @@ final class InstallPackageHelper {
    }

    private PackageFreezer freezePackageForInstall(String packageName, int userId, int installFlags,
            String killReason, int exitInfoReason) {
            String killReason, int exitInfoReason, InstallRequest request) {
        if ((installFlags & PackageManager.INSTALL_DONT_KILL_APP) != 0) {
            return new PackageFreezer(mPm);
            return new PackageFreezer(mPm, request);
        } else {
            return mPm.freezePackage(packageName, userId, killReason, exitInfoReason);
            return mPm.freezePackage(packageName, userId, killReason, exitInfoReason, request);
        }
    }

@@ -3207,7 +3208,7 @@ final class InstallPackageHelper {
            try (PackageFreezer freezer =
                         mPm.freezePackage(stubPkg.getPackageName(), UserHandle.USER_ALL,
                                 "setEnabledSetting",
                                 ApplicationExitInfo.REASON_PACKAGE_UPDATED)) {
                                 ApplicationExitInfo.REASON_PACKAGE_UPDATED, null /* request */)) {
                pkg = installStubPackageLI(stubPkg, parseFlags, 0 /*scanFlags*/);
                mAppDataHelper.prepareAppDataAfterInstallLIF(pkg);
                synchronized (mPm.mLock) {
@@ -3231,7 +3232,8 @@ final class InstallPackageHelper {
                try (PackageFreezer freezer =
                             mPm.freezePackage(stubPkg.getPackageName(), UserHandle.USER_ALL,
                                     "setEnabledSetting",
                                     ApplicationExitInfo.REASON_PACKAGE_UPDATED)) {
                                     ApplicationExitInfo.REASON_PACKAGE_UPDATED,
                                     null /* request */)) {
                    synchronized (mPm.mLock) {
                        // NOTE: Ensure the system package is enabled; even for a compressed stub.
                        // If we don't, installing the system package fails during scan
@@ -4291,7 +4293,8 @@ final class InstallPackageHelper {
                                + " name: " + pkgSetting.getPackageName());
                try (@SuppressWarnings("unused") PackageFreezer freezer = mPm.freezePackage(
                        parsedPackage.getPackageName(), UserHandle.USER_ALL,
                        "scanPackageInternalLI", ApplicationExitInfo.REASON_OTHER)) {
                        "scanPackageInternalLI", ApplicationExitInfo.REASON_OTHER,
                        null /* request */)) {
                    DeletePackageHelper deletePackageHelper = new DeletePackageHelper(mPm);
                    deletePackageHelper.deletePackageLIF(parsedPackage.getPackageName(), null, true,
                            mPm.mUserManager.getUserIds(), 0, null, false);
+12 −0
Original line number Diff line number Diff line
@@ -831,4 +831,16 @@ final class InstallRequest {
            }
        }
    }

    public void onFreezeStarted() {
        if (mPackageMetrics != null) {
            mPackageMetrics.onStepStarted(PackageMetrics.STEP_FREEZE_INSTALL);
        }
    }

    public void onFreezeCompleted() {
        if (mPackageMetrics != null) {
            mPackageMetrics.onStepFinished(PackageMetrics.STEP_FREEZE_INSTALL);
        }
    }
}
+0 −1
Original line number Diff line number Diff line
@@ -543,7 +543,6 @@ class InstallingSession {
            mInstallPackageHelper.installPackagesTraced(installRequests);

            for (InstallRequest request : installRequests) {
                request.onInstallCompleted();
                doPostInstall(request);
            }
        }
+2 −1
Original line number Diff line number Diff line
@@ -147,7 +147,8 @@ public final class MovePackageHelper {
        final PackageFreezer freezer;
        synchronized (mPm.mLock) {
            freezer = mPm.freezePackage(packageName, UserHandle.USER_ALL,
                    "movePackageInternal", ApplicationExitInfo.REASON_USER_REQUESTED);
                    "movePackageInternal", ApplicationExitInfo.REASON_USER_REQUESTED,
                    null /* request */);
        }

        final Bundle extras = new Bundle();
+21 −2
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.pm;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.pm.PackageManager;

import dalvik.system.CloseGuard;
@@ -29,6 +30,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
 * app code/data to prevent the app from running while you're working.
 */
final class PackageFreezer implements AutoCloseable {
    @Nullable private InstallRequest mInstallRequest;

    private final String mPackageName;

    private final AtomicBoolean mClosed = new AtomicBoolean();
@@ -43,18 +46,29 @@ final class PackageFreezer implements AutoCloseable {
     * {@link PackageManager#INSTALL_DONT_KILL_APP} or
     * {@link PackageManager#DELETE_DONT_KILL_APP}.
     */
    PackageFreezer(PackageManagerService pm) {

    PackageFreezer(PackageManagerService pm, @Nullable InstallRequest request) {
        mPm = pm;
        mPackageName = null;
        mClosed.set(true);
        mCloseGuard.open("close");
        mInstallRequest = request;
        // We only focus on the install Freeze metrics now
        if (mInstallRequest != null) {
            mInstallRequest.onFreezeStarted();
        }
    }

    PackageFreezer(String packageName, int userId, String killReason,
            PackageManagerService pm, int exitInfoReason) {
            PackageManagerService pm, int exitInfoReason, @Nullable InstallRequest request) {
        mPm = pm;
        mPackageName = packageName;
        mInstallRequest = request;
        final PackageSetting ps;
        // We only focus on the install Freeze metrics now
        if (mInstallRequest != null) {
            mInstallRequest.onFreezeStarted();
        }
        synchronized (mPm.mLock) {
            final int refCounts = mPm.mFrozenPackages
                    .getOrDefault(mPackageName, 0 /* defaultValue */) + 1;
@@ -92,5 +106,10 @@ final class PackageFreezer implements AutoCloseable {
                }
            }
        }
        // We only focus on the install Freeze metrics now
        if (mInstallRequest != null) {
            mInstallRequest.onFreezeCompleted();
            mInstallRequest = null;
        }
    }
}
Loading