Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b5789014 authored by yawanng's avatar yawanng
Browse files

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

Bug: 177694884
Test: atest ArtStatsLogUtilsTest
Change-Id: If7a45b263c507e05801117eea85ab610f869c482
parent 76f8061d
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -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);
                    }
+41 −6
Original line number Diff line number Diff line
@@ -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));
        }
    }
}
+41 −17
Original line number Diff line number Diff line
@@ -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,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.
@@ -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.
@@ -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.
@@ -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.
@@ -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.
@@ -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(
@@ -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 {