Loading services/core/java/com/android/server/pm/PackageDexOptimizer.java +4 −5 Original line number Diff line number Diff line Loading @@ -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.getBaseApkPath().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); } Loading services/core/java/com/android/server/pm/dex/ArtStatsLogUtils.java +41 −6 Original line number Diff line number Diff line Loading @@ -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 = Loading Loading @@ -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, Loading @@ -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, Loading @@ -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) { Loading Loading @@ -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, Loading @@ -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)); } } } services/tests/servicestests/src/com/android/server/pm/dex/ArtStatsLogUtilsTest.java +41 −17 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -97,13 +101,14 @@ 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. Loading @@ -127,13 +132,14 @@ 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. Loading @@ -157,13 +163,14 @@ 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. Loading @@ -185,13 +192,14 @@ 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. Loading @@ -214,13 +222,14 @@ 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. Loading @@ -231,6 +240,17 @@ public final class ArtStatsLogUtilsTest { } } @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( Loading @@ -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, Loading @@ -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 { Loading Loading
services/core/java/com/android/server/pm/PackageDexOptimizer.java +4 −5 Original line number Diff line number Diff line Loading @@ -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.getBaseApkPath().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); } Loading
services/core/java/com/android/server/pm/dex/ArtStatsLogUtils.java +41 −6 Original line number Diff line number Diff line Loading @@ -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 = Loading Loading @@ -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, Loading @@ -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, Loading @@ -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) { Loading Loading @@ -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, Loading @@ -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)); } } }
services/tests/servicestests/src/com/android/server/pm/dex/ArtStatsLogUtilsTest.java +41 −17 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -97,13 +101,14 @@ 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. Loading @@ -127,13 +132,14 @@ 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. Loading @@ -157,13 +163,14 @@ 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. Loading @@ -185,13 +192,14 @@ 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. Loading @@ -214,13 +222,14 @@ 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. Loading @@ -231,6 +240,17 @@ public final class ArtStatsLogUtilsTest { } } @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( Loading @@ -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, Loading @@ -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 { Loading