Merge "Add two fields on ART metrics (apk type and isa)."
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user