Fix the resolving of apk type.

Bug: 177694884
Test: m

Change-Id: I0ca23a023ae5005288ac8f0b3289067b1d9e84f2
This commit is contained in:
yawanng
2021-03-29 22:35:15 +00:00
parent 7ff8faf4af
commit fd15990a51
3 changed files with 18 additions and 10 deletions

View File

@@ -272,7 +272,8 @@ public class PackageDexOptimizer {
dexMetadataPath,
options.getCompilationReason(),
newResult,
ArtStatsLogUtils.getApkType(path),
ArtStatsLogUtils.getApkType(path, pkg.getBaseApkPath(),
pkg.getSplitCodePaths()),
dexCodeIsa,
path);
} finally {

View File

@@ -29,6 +29,7 @@ import com.android.internal.art.ArtStatsLog;
import com.android.server.pm.PackageManagerService;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -41,8 +42,6 @@ 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 =
ART_DATUM_REPORTED__COMPILATION_REASON__ART_COMPILATION_REASON_INSTALL_BULK_SECONDARY;
@@ -187,11 +186,14 @@ public class ArtStatsLogUtils {
isa);
}
public static int getApkType(String path) {
if (path.equals(BASE_APK)) {
public static int getApkType(String path, String baseApkPath, String[] splitApkPaths) {
if (path.equals(baseApkPath)) {
return ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE;
} else if(Arrays.stream(splitApkPaths).anyMatch(p->p.equals(path))) {
return ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_SPLIT;
} else{
return ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_UNKNOWN;
}
return ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_SPLIT;
}
private static long getDexBytes(String apkPath) {

View File

@@ -51,8 +51,9 @@ public final class ArtStatsLogUtilsTest {
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 String BASE_APK_PATH = "/tmp/base.apk";
private static final String[] SPLIT_APK_PATHS =
new String[]{"/tmp/split1.apk", "/tmp/split2.apk"};
private static final byte[] DEX_CONTENT = "dexData".getBytes();
private static final int COMPILATION_REASON = 1;
private static final int RESULT_CODE = 222;
@@ -248,12 +249,16 @@ public final class ArtStatsLogUtilsTest {
@Test
public void testGetApkType() {
// Act
int result1 = ArtStatsLogUtils.getApkType(BASE_APK);
int result2 = ArtStatsLogUtils.getApkType(SPLIT_APK);
int result1 = ArtStatsLogUtils.getApkType("/tmp/base.apk", BASE_APK_PATH, SPLIT_APK_PATHS);
int result2 = ArtStatsLogUtils.getApkType("/tmp/split1.apk", BASE_APK_PATH,
SPLIT_APK_PATHS);
int result3 = ArtStatsLogUtils.getApkType("/tmp/none.apk", BASE_APK_PATH, SPLIT_APK_PATHS);
// 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);
Assert.assertEquals(result3,
ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_UNKNOWN);
}
private void verifyWrites(int dexMetadataType) {