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.EventLogTags;
|
||||||
import com.android.server.LocalManagerRegistry;
|
import com.android.server.LocalManagerRegistry;
|
||||||
import com.android.server.art.model.DexoptParams;
|
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.Installer.LegacyDexoptDisabledException;
|
||||||
import com.android.server.pm.dex.ArtManagerService;
|
import com.android.server.pm.dex.ArtManagerService;
|
||||||
import com.android.server.pm.dex.DexManager;
|
import com.android.server.pm.dex.DexManager;
|
||||||
@@ -2534,8 +2535,9 @@ final class InstallPackageHelper {
|
|||||||
packageManagerLocal.withFilteredSnapshot()) {
|
packageManagerLocal.withFilteredSnapshot()) {
|
||||||
DexoptParams params =
|
DexoptParams params =
|
||||||
dexoptOptions.convertToDexoptParams(0 /* extraFlags */);
|
dexoptOptions.convertToDexoptParams(0 /* extraFlags */);
|
||||||
DexOptHelper.getArtManagerLocal().dexoptPackage(
|
DexoptResult dexOptResult = DexOptHelper.getArtManagerLocal().dexoptPackage(
|
||||||
snapshot, packageName, params);
|
snapshot, packageName, params);
|
||||||
|
installRequest.onDexoptFinished(dexOptResult);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ import android.util.ArrayMap;
|
|||||||
import android.util.ExceptionUtils;
|
import android.util.ExceptionUtils;
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
|
|
||||||
|
import com.android.server.art.model.DexoptResult;
|
||||||
import com.android.server.pm.parsing.pkg.ParsedPackage;
|
import com.android.server.pm.parsing.pkg.ParsedPackage;
|
||||||
import com.android.server.pm.pkg.AndroidPackage;
|
import com.android.server.pm.pkg.AndroidPackage;
|
||||||
import com.android.server.pm.pkg.PackageState;
|
import com.android.server.pm.pkg.PackageState;
|
||||||
@@ -127,6 +128,8 @@ final class InstallRequest {
|
|||||||
private final int mSessionId;
|
private final int mSessionId;
|
||||||
private final int mRequireUserAction;
|
private final int mRequireUserAction;
|
||||||
|
|
||||||
|
private int mDexoptStatus;
|
||||||
|
|
||||||
// New install
|
// New install
|
||||||
InstallRequest(InstallingSession params) {
|
InstallRequest(InstallingSession params) {
|
||||||
mUserId = params.getUser().getIdentifier();
|
mUserId = params.getUser().getIdentifier();
|
||||||
@@ -609,6 +612,10 @@ final class InstallRequest {
|
|||||||
return mRequireUserAction;
|
return mRequireUserAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getDexoptStatus() {
|
||||||
|
return mDexoptStatus;
|
||||||
|
}
|
||||||
|
|
||||||
public void setScanFlags(int scanFlags) {
|
public void setScanFlags(int scanFlags) {
|
||||||
mScanFlags = 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() {
|
public void onInstallCompleted() {
|
||||||
if (getReturnCode() == INSTALL_SUCCEEDED) {
|
if (getReturnCode() == INSTALL_SUCCEEDED) {
|
||||||
if (mPackageMetrics != null) {
|
if (mPackageMetrics != null) {
|
||||||
|
|||||||
@@ -48,12 +48,14 @@ final class PackageMetrics {
|
|||||||
public static final int STEP_SCAN = 2;
|
public static final int STEP_SCAN = 2;
|
||||||
public static final int STEP_RECONCILE = 3;
|
public static final int STEP_RECONCILE = 3;
|
||||||
public static final int STEP_COMMIT = 4;
|
public static final int STEP_COMMIT = 4;
|
||||||
|
public static final int STEP_DEXOPT = 5;
|
||||||
|
|
||||||
@IntDef(prefix = {"STEP_"}, value = {
|
@IntDef(prefix = {"STEP_"}, value = {
|
||||||
STEP_PREPARE,
|
STEP_PREPARE,
|
||||||
STEP_SCAN,
|
STEP_SCAN,
|
||||||
STEP_RECONCILE,
|
STEP_RECONCILE,
|
||||||
STEP_COMMIT,
|
STEP_COMMIT,
|
||||||
|
STEP_DEXOPT
|
||||||
})
|
})
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
public @interface StepInt {
|
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)
|
// List of steps (e.g., 1, 2, 3) and corresponding list of durations (e.g., 200ms, 100ms, 150ms)
|
||||||
private Pair<int[], long[]> getInstallStepDurations() {
|
private Pair<int[], long[]> getInstallStepDurations() {
|
||||||
ArrayList<Integer> steps = new ArrayList<>();
|
ArrayList<Integer> steps = new ArrayList<>();
|
||||||
@@ -203,6 +209,11 @@ final class PackageMetrics {
|
|||||||
mStartTimestampMillis = System.currentTimeMillis();
|
mStartTimestampMillis = System.currentTimeMillis();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InstallStep(long durationMillis) {
|
||||||
|
mStartTimestampMillis = -1;
|
||||||
|
mDurationMillis = durationMillis;
|
||||||
|
}
|
||||||
|
|
||||||
void finish() {
|
void finish() {
|
||||||
mDurationMillis = System.currentTimeMillis() - mStartTimestampMillis;
|
mDurationMillis = System.currentTimeMillis() - mStartTimestampMillis;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user