Merge "Add measurement for dex size." am: bdcda2cb05 am: a3e895e610
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1648807 Change-Id: I914acb7986ce684ee722e43470508866c365236b
This commit is contained in:
@@ -273,7 +273,8 @@ public class PackageDexOptimizer {
|
|||||||
options.getCompilationReason(),
|
options.getCompilationReason(),
|
||||||
newResult,
|
newResult,
|
||||||
ArtStatsLogUtils.getApkType(path),
|
ArtStatsLogUtils.getApkType(path),
|
||||||
dexCodeIsa);
|
dexCodeIsa,
|
||||||
|
path);
|
||||||
} finally {
|
} finally {
|
||||||
Trace.traceEnd(Trace.TRACE_TAG_PACKAGE_MANAGER);
|
Trace.traceEnd(Trace.TRACE_TAG_PACKAGE_MANAGER);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ import java.io.IOException;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
|
|
||||||
/** Utils class to report ART metrics to statsd. */
|
/** Utils class to report ART metrics to statsd. */
|
||||||
@@ -150,7 +152,8 @@ public class ArtStatsLogUtils {
|
|||||||
int compilationReason,
|
int compilationReason,
|
||||||
int result,
|
int result,
|
||||||
int apkType,
|
int apkType,
|
||||||
String isa) {
|
String isa,
|
||||||
|
String apkPath) {
|
||||||
int dexMetadataType = getDexMetadataType(dexMetadataPath);
|
int dexMetadataType = getDexMetadataType(dexMetadataPath);
|
||||||
logger.write(
|
logger.write(
|
||||||
sessionId,
|
sessionId,
|
||||||
@@ -162,6 +165,16 @@ public class ArtStatsLogUtils {
|
|||||||
dexMetadataType,
|
dexMetadataType,
|
||||||
apkType,
|
apkType,
|
||||||
isa);
|
isa);
|
||||||
|
logger.write(
|
||||||
|
sessionId,
|
||||||
|
uid,
|
||||||
|
compilationReason,
|
||||||
|
compilerFilter,
|
||||||
|
ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_DEX_CODE_BYTES,
|
||||||
|
getDexBytes(apkPath),
|
||||||
|
dexMetadataType,
|
||||||
|
apkType,
|
||||||
|
isa);
|
||||||
logger.write(
|
logger.write(
|
||||||
sessionId,
|
sessionId,
|
||||||
uid,
|
uid,
|
||||||
@@ -181,6 +194,37 @@ public class ArtStatsLogUtils {
|
|||||||
return ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_SPLIT;
|
return ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_SPLIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static long getDexBytes(String apkPath) {
|
||||||
|
StrictJarFile jarFile = null;
|
||||||
|
long dexBytes = 0;
|
||||||
|
try {
|
||||||
|
jarFile = new StrictJarFile(apkPath,
|
||||||
|
/*verify=*/ false,
|
||||||
|
/*signatureSchemeRollbackProtectionsEnforced=*/ false);
|
||||||
|
Iterator<ZipEntry> it = jarFile.iterator();
|
||||||
|
Pattern p = Pattern.compile("classes(\\d)*[.]dex");
|
||||||
|
Matcher m = p.matcher("");
|
||||||
|
while (it.hasNext()) {
|
||||||
|
ZipEntry entry = it.next();
|
||||||
|
m.reset(entry.getName());
|
||||||
|
if (m.matches()) {
|
||||||
|
dexBytes += entry.getSize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dexBytes;
|
||||||
|
} catch (IOException ignore) {
|
||||||
|
Slog.e(TAG, "Error when parsing APK " + apkPath);
|
||||||
|
return -1L;
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (jarFile != null) {
|
||||||
|
jarFile.close();
|
||||||
|
}
|
||||||
|
} catch (IOException ignore) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static int getDexMetadataType(String dexMetadataPath) {
|
private static int getDexMetadataType(String dexMetadataPath) {
|
||||||
if (dexMetadataPath == null) {
|
if (dexMetadataPath == null) {
|
||||||
return ArtStatsLog.ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_NONE;
|
return ArtStatsLog.ART_DATUM_REPORTED__DEX_METADATA_TYPE__ART_DEX_METADATA_TYPE_NONE;
|
||||||
|
|||||||
@@ -108,7 +108,8 @@ public final class ArtStatsLogUtilsTest {
|
|||||||
COMPILATION_REASON,
|
COMPILATION_REASON,
|
||||||
RESULT_CODE,
|
RESULT_CODE,
|
||||||
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
|
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
|
||||||
INSTRUCTION_SET);
|
INSTRUCTION_SET,
|
||||||
|
apk.toString());
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
verifyWrites(ArtStatsLog.
|
verifyWrites(ArtStatsLog.
|
||||||
@@ -139,7 +140,8 @@ public final class ArtStatsLogUtilsTest {
|
|||||||
COMPILATION_REASON,
|
COMPILATION_REASON,
|
||||||
RESULT_CODE,
|
RESULT_CODE,
|
||||||
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
|
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
|
||||||
INSTRUCTION_SET);
|
INSTRUCTION_SET,
|
||||||
|
apk.toString());
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
verifyWrites(ArtStatsLog.
|
verifyWrites(ArtStatsLog.
|
||||||
@@ -170,7 +172,8 @@ public final class ArtStatsLogUtilsTest {
|
|||||||
COMPILATION_REASON,
|
COMPILATION_REASON,
|
||||||
RESULT_CODE,
|
RESULT_CODE,
|
||||||
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
|
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
|
||||||
INSTRUCTION_SET);
|
INSTRUCTION_SET,
|
||||||
|
apk.toString());
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
verifyWrites(ArtStatsLog.
|
verifyWrites(ArtStatsLog.
|
||||||
@@ -199,7 +202,8 @@ public final class ArtStatsLogUtilsTest {
|
|||||||
COMPILATION_REASON,
|
COMPILATION_REASON,
|
||||||
RESULT_CODE,
|
RESULT_CODE,
|
||||||
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
|
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
|
||||||
INSTRUCTION_SET);
|
INSTRUCTION_SET,
|
||||||
|
apk.toString());
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
verifyWrites(ArtStatsLog.
|
verifyWrites(ArtStatsLog.
|
||||||
@@ -229,7 +233,8 @@ public final class ArtStatsLogUtilsTest {
|
|||||||
COMPILATION_REASON,
|
COMPILATION_REASON,
|
||||||
RESULT_CODE,
|
RESULT_CODE,
|
||||||
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
|
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
|
||||||
INSTRUCTION_SET);
|
INSTRUCTION_SET,
|
||||||
|
apk.toString());
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
verifyWrites(ArtStatsLog.
|
verifyWrites(ArtStatsLog.
|
||||||
@@ -262,6 +267,16 @@ public final class ArtStatsLogUtilsTest {
|
|||||||
dexMetadataType,
|
dexMetadataType,
|
||||||
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
|
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
|
||||||
INSTRUCTION_SET);
|
INSTRUCTION_SET);
|
||||||
|
inorder.verify(mockLogger).write(
|
||||||
|
SESSION_ID,
|
||||||
|
UID,
|
||||||
|
COMPILATION_REASON,
|
||||||
|
COMPILER_FILTER,
|
||||||
|
ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_DEX_CODE_BYTES,
|
||||||
|
DEX_CONTENT.length,
|
||||||
|
dexMetadataType,
|
||||||
|
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
|
||||||
|
INSTRUCTION_SET);
|
||||||
inorder.verify(mockLogger).write(
|
inorder.verify(mockLogger).write(
|
||||||
SESSION_ID,
|
SESSION_ID,
|
||||||
UID,
|
UID,
|
||||||
|
|||||||
Reference in New Issue
Block a user