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

This commit is contained in:
TreeHugger Robot
2023-03-01 21:09:24 +00:00
committed by Android (Google) Code Review
3 changed files with 40 additions and 1 deletions

View File

@@ -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 {

View File

@@ -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) {

View File

@@ -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;
}