Merge "Add two fields on ART metrics (apk type and isa)."

This commit is contained in:
Treehugger Robot
2021-03-29 22:21:21 +00:00
committed by Gerrit Code Review
3 changed files with 86 additions and 28 deletions

View File

@@ -258,23 +258,22 @@ public class PackageDexOptimizer {
packageStats, options.isDowngrade(), profileName, dexMetadataPath,
options.getCompilationReason());
// Only report metrics for base apk for now.
// TODO: add ISA and APK type to metrics.
// OTAPreopt doesn't have stats so don't report in that case.
if (pkg.getBaseCodePath().equals(path) && packageStats != null) {
if (packageStats != null) {
Trace.traceBegin(Trace.TRACE_TAG_PACKAGE_MANAGER, "dex2oat-metrics");
try {
long sessionId = Math.randomLongInternal();
ArtStatsLogUtils.writeStatsLog(
mArtStatsLogger,
sessionId,
path,
compilerFilter,
sharedGid,
packageStats.getCompileTime(path),
dexMetadataPath,
options.getCompilationReason(),
newResult);
newResult,
ArtStatsLogUtils.getApkType(path),
dexCodeIsa);
} finally {
Trace.traceEnd(Trace.TRACE_TAG_PACKAGE_MANAGER);
}

View File

@@ -39,6 +39,7 @@ public class ArtStatsLogUtils {
private static final String TAG = ArtStatsLogUtils.class.getSimpleName();
private static final String PROFILE_DEX_METADATA = "primary.prof";
private static final String VDEX_DEX_METADATA = "primary.vdex";
private static final String BASE_APK= "base.apk";
private static final int ART_COMPILATION_REASON_INSTALL_BULK_SECONDARY =
@@ -122,16 +123,34 @@ public class ArtStatsLogUtils {
ART_COMPILATION_FILTER_FAKE_RUN_FROM_VDEX_FALLBACK);
}
private static final Map<String, Integer> ISA_MAP = new HashMap();
static {
COMPILE_FILTER_MAP.put("arm", ArtStatsLog.
ART_DATUM_REPORTED__ISA__ART_ISA_ARM);
COMPILE_FILTER_MAP.put("arm64", ArtStatsLog.
ART_DATUM_REPORTED__ISA__ART_ISA_ARM64);
COMPILE_FILTER_MAP.put("x86", ArtStatsLog.
ART_DATUM_REPORTED__ISA__ART_ISA_X86);
COMPILE_FILTER_MAP.put("x86_64", ArtStatsLog.
ART_DATUM_REPORTED__ISA__ART_ISA_X86_64);
COMPILE_FILTER_MAP.put("mips", ArtStatsLog.
ART_DATUM_REPORTED__ISA__ART_ISA_MIPS);
COMPILE_FILTER_MAP.put("mips64", ArtStatsLog.
ART_DATUM_REPORTED__ISA__ART_ISA_MIPS64);
}
public static void writeStatsLog(
ArtStatsLogger logger,
long sessionId,
String path,
String compilerFilter,
int uid,
long compileTime,
String dexMetadataPath,
int compilationReason,
int result) {
int result,
int apkType,
String isa) {
int dexMetadataType = getDexMetadataType(dexMetadataPath);
logger.write(
sessionId,
@@ -140,7 +159,9 @@ public class ArtStatsLogUtils {
compilerFilter,
ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_RESULT_CODE,
result,
dexMetadataType);
dexMetadataType,
apkType,
isa);
logger.write(
sessionId,
uid,
@@ -148,7 +169,16 @@ public class ArtStatsLogUtils {
compilerFilter,
ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_TOTAL_TIME,
compileTime,
dexMetadataType);
dexMetadataType,
apkType,
isa);
}
public static int getApkType(String path) {
if (path.equals(BASE_APK)) {
return ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE;
}
return ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_SPLIT;
}
private static int getDexMetadataType(String dexMetadataPath) {
@@ -207,7 +237,9 @@ public class ArtStatsLogUtils {
String compilerFilter,
int kind,
long value,
int dexMetadataType) {
int dexMetadataType,
int apkType,
String isa) {
ArtStatsLog.write(
ArtStatsLog.ART_DATUM_REPORTED,
sessionId,
@@ -220,7 +252,10 @@ public class ArtStatsLogUtils {
ArtStatsLog.ART_DATUM_REPORTED__THREAD_TYPE__ART_THREAD_MAIN,
kind,
value,
dexMetadataType);
dexMetadataType,
apkType,
ISA_MAP.getOrDefault(isa,
ArtStatsLog.ART_DATUM_REPORTED__ISA__ART_ISA_UNKNOWN));
}
}
}

View File

@@ -22,6 +22,7 @@ import com.android.internal.art.ArtStatsLog;
import com.android.server.pm.dex.ArtStatsLogUtils.ArtStatsLogger;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -49,6 +50,9 @@ public final class ArtStatsLogUtilsTest {
private static final String COMPILER_FILTER = "space-profile";
private static final String PROFILE_DEX_METADATA = "primary.prof";
private static final String VDEX_DEX_METADATA = "primary.vdex";
private static final String INSTRUCTION_SET = "arm64";
private static final String BASE_APK = "base.apk";
private static final String SPLIT_APK = "split.apk";
private static final byte[] DEX_CONTENT = "dexData".getBytes();
private static final int COMPILATION_REASON = 1;
private static final int RESULT_CODE = 222;
@@ -97,17 +101,18 @@ public final class ArtStatsLogUtilsTest {
ArtStatsLogUtils.writeStatsLog(
mockLogger,
SESSION_ID,
apk.toString(),
COMPILER_FILTER,
UID,
COMPILE_TIME,
dexMetadataPath.toString(),
COMPILATION_REASON,
RESULT_CODE);
RESULT_CODE,
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
INSTRUCTION_SET);
// Assert
verifyWrites(ArtStatsLog.
ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_PROFILE_AND_VDEX);
ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_PROFILE_AND_VDEX);
} finally {
deleteSliently(dexMetadataPath);
deleteSliently(apk);
@@ -127,17 +132,18 @@ public final class ArtStatsLogUtilsTest {
ArtStatsLogUtils.writeStatsLog(
mockLogger,
SESSION_ID,
apk.toString(),
COMPILER_FILTER,
UID,
COMPILE_TIME,
dexMetadataPath.toString(),
COMPILATION_REASON,
RESULT_CODE);
RESULT_CODE,
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
INSTRUCTION_SET);
// Assert
verifyWrites(ArtStatsLog.
ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_PROFILE);
ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_PROFILE);
} finally {
deleteSliently(dexMetadataPath);
deleteSliently(apk);
@@ -157,17 +163,18 @@ public final class ArtStatsLogUtilsTest {
ArtStatsLogUtils.writeStatsLog(
mockLogger,
SESSION_ID,
apk.toString(),
COMPILER_FILTER,
UID,
COMPILE_TIME,
dexMetadataPath.toString(),
COMPILATION_REASON,
RESULT_CODE);
RESULT_CODE,
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
INSTRUCTION_SET);
// Assert
verifyWrites(ArtStatsLog.
ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_VDEX);
ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_VDEX);
} finally {
deleteSliently(dexMetadataPath);
deleteSliently(apk);
@@ -185,17 +192,18 @@ public final class ArtStatsLogUtilsTest {
ArtStatsLogUtils.writeStatsLog(
mockLogger,
SESSION_ID,
apk.toString(),
COMPILER_FILTER,
UID,
COMPILE_TIME,
/*dexMetadataPath=*/ null,
COMPILATION_REASON,
RESULT_CODE);
RESULT_CODE,
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
INSTRUCTION_SET);
// Assert
verifyWrites(ArtStatsLog.
ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_NONE);
ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_NONE);
} finally {
deleteSliently(apk);
}
@@ -214,23 +222,35 @@ public final class ArtStatsLogUtilsTest {
ArtStatsLogUtils.writeStatsLog(
mockLogger,
SESSION_ID,
apk.toString(),
COMPILER_FILTER,
UID,
COMPILE_TIME,
dexMetadataPath.toString(),
COMPILATION_REASON,
RESULT_CODE);
RESULT_CODE,
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
INSTRUCTION_SET);
// Assert
verifyWrites(ArtStatsLog.
ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_UNKNOWN);
ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_UNKNOWN);
} finally {
deleteSliently(dexMetadataPath);
deleteSliently(apk);
}
}
@Test
public void testGetApkType() {
// Act
int result1 = ArtStatsLogUtils.getApkType(BASE_APK);
int result2 = ArtStatsLogUtils.getApkType(SPLIT_APK);
// Assert
Assert.assertEquals(result1, ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE);
Assert.assertEquals(result2, ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_SPLIT);
}
private void verifyWrites(int dexMetadataType) {
InOrder inorder = inOrder(mockLogger);
inorder.verify(mockLogger).write(
@@ -239,7 +259,9 @@ public final class ArtStatsLogUtilsTest {
COMPILER_FILTER,
ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_RESULT_CODE,
RESULT_CODE,
dexMetadataType);
dexMetadataType,
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
INSTRUCTION_SET);
inorder.verify(mockLogger).write(
SESSION_ID,
UID,
@@ -247,7 +269,9 @@ public final class ArtStatsLogUtilsTest {
COMPILER_FILTER,
ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_TOTAL_TIME,
COMPILE_TIME,
dexMetadataType);
dexMetadataType,
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
INSTRUCTION_SET);
}
private Path zipFiles(String suffix, Path... files) throws IOException {