Merge "[pm/metrics] add dexopt latency to the metrics" into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
9ec97178ec
@@ -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 {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user