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

Commit f5e32751 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "[pm/metrics] add dexopt latency to the metrics" into udc-dev am: 9ec97178

parents 749b3234 9ec97178
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -164,6 +164,7 @@ import com.android.internal.util.FrameworkStatsLog;
import com.android.server.EventLogTags;
import com.android.server.LocalManagerRegistry;
import com.android.server.art.model.DexoptParams;
import com.android.server.art.model.DexoptResult;
import com.android.server.pm.Installer.LegacyDexoptDisabledException;
import com.android.server.pm.dex.ArtManagerService;
import com.android.server.pm.dex.DexManager;
@@ -2534,8 +2535,9 @@ final class InstallPackageHelper {
                                    packageManagerLocal.withFilteredSnapshot()) {
                        DexoptParams params =
                                dexoptOptions.convertToDexoptParams(0 /* extraFlags */);
                        DexOptHelper.getArtManagerLocal().dexoptPackage(
                        DexoptResult dexOptResult = DexOptHelper.getArtManagerLocal().dexoptPackage(
                                snapshot, packageName, params);
                        installRequest.onDexoptFinished(dexOptResult);
                    }
                } else {
                    try {
+26 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import android.util.ArrayMap;
import android.util.ExceptionUtils;
import android.util.Slog;

import com.android.server.art.model.DexoptResult;
import com.android.server.pm.parsing.pkg.ParsedPackage;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.PackageState;
@@ -127,6 +128,8 @@ final class InstallRequest {
    private final int mSessionId;
    private final int mRequireUserAction;

    private int mDexoptStatus;

    // New install
    InstallRequest(InstallingSession params) {
        mUserId = params.getUser().getIdentifier();
@@ -609,6 +612,10 @@ final class InstallRequest {
        return mRequireUserAction;
    }

    public int getDexoptStatus() {
        return mDexoptStatus;
    }

    public void setScanFlags(int scanFlags) {
        mScanFlags = scanFlags;
    }
@@ -799,6 +806,25 @@ final class InstallRequest {
        }
    }

    public void onDexoptFinished(DexoptResult dexoptResult) {
        if (mPackageMetrics == null) {
            return;
        }
        mDexoptStatus = dexoptResult.getFinalStatus();
        if (mDexoptStatus != DexoptResult.DEXOPT_PERFORMED) {
            return;
        }
        long durationMillis = 0;
        for (DexoptResult.PackageDexoptResult packageResult :
                dexoptResult.getPackageDexoptResults()) {
            for (DexoptResult.DexContainerFileDexoptResult fileResult :
                    packageResult.getDexContainerFileDexoptResults()) {
                durationMillis += fileResult.getDex2oatWallTimeMillis();
            }
        }
        mPackageMetrics.onStepFinished(PackageMetrics.STEP_DEXOPT, durationMillis);
    }

    public void onInstallCompleted() {
        if (getReturnCode() == INSTALL_SUCCEEDED) {
            if (mPackageMetrics != null) {
+11 −0
Original line number Diff line number Diff line
@@ -48,12 +48,14 @@ final class PackageMetrics {
    public static final int STEP_SCAN = 2;
    public static final int STEP_RECONCILE = 3;
    public static final int STEP_COMMIT = 4;
    public static final int STEP_DEXOPT = 5;

    @IntDef(prefix = {"STEP_"}, value = {
            STEP_PREPARE,
            STEP_SCAN,
            STEP_RECONCILE,
            STEP_COMMIT,
            STEP_DEXOPT
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface StepInt {
@@ -175,6 +177,10 @@ final class PackageMetrics {
        }
    }

    public void onStepFinished(@StepInt int step, long durationMillis) {
        mInstallSteps.put(step, new InstallStep(durationMillis));
    }

    // List of steps (e.g., 1, 2, 3) and corresponding list of durations (e.g., 200ms, 100ms, 150ms)
    private Pair<int[], long[]> getInstallStepDurations() {
        ArrayList<Integer> steps = new ArrayList<>();
@@ -203,6 +209,11 @@ final class PackageMetrics {
            mStartTimestampMillis = System.currentTimeMillis();
        }

        InstallStep(long durationMillis) {
            mStartTimestampMillis = -1;
            mDurationMillis = durationMillis;
        }

        void finish() {
            mDurationMillis = System.currentTimeMillis() - mStartTimestampMillis;
        }