Loading services/core/java/com/android/server/pm/InstallPackageHelper.java +3 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 { Loading services/core/java/com/android/server/pm/InstallRequest.java +26 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading Loading @@ -609,6 +612,10 @@ final class InstallRequest { return mRequireUserAction; } public int getDexoptStatus() { return mDexoptStatus; } public void setScanFlags(int scanFlags) { mScanFlags = scanFlags; } Loading Loading @@ -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) { Loading services/core/java/com/android/server/pm/PackageMetrics.java +11 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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<>(); Loading Loading @@ -203,6 +209,11 @@ final class PackageMetrics { mStartTimestampMillis = System.currentTimeMillis(); } InstallStep(long durationMillis) { mStartTimestampMillis = -1; mDurationMillis = durationMillis; } void finish() { mDurationMillis = System.currentTimeMillis() - mStartTimestampMillis; } Loading Loading
services/core/java/com/android/server/pm/InstallPackageHelper.java +3 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 { Loading
services/core/java/com/android/server/pm/InstallRequest.java +26 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading Loading @@ -609,6 +612,10 @@ final class InstallRequest { return mRequireUserAction; } public int getDexoptStatus() { return mDexoptStatus; } public void setScanFlags(int scanFlags) { mScanFlags = scanFlags; } Loading Loading @@ -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) { Loading
services/core/java/com/android/server/pm/PackageMetrics.java +11 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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<>(); Loading Loading @@ -203,6 +209,11 @@ final class PackageMetrics { mStartTimestampMillis = System.currentTimeMillis(); } InstallStep(long durationMillis) { mStartTimestampMillis = -1; mDurationMillis = durationMillis; } void finish() { mDurationMillis = System.currentTimeMillis() - mStartTimestampMillis; } Loading