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

Commit 5b35efd0 authored by yawanng's avatar yawanng
Browse files

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

Bug: 177694884
Test: atest ArtStatsLogUtilsTest

Merged-In: If7a45b263c507e05801117eea85ab610f869c482
Change-Id: I0178545d85e9dab425cec9fb38512d2a692d0cbf
parent 5fdf93fc
Loading
Loading
Loading
Loading
+4 −5
Original line number Original line Diff line number Diff line
@@ -258,23 +258,22 @@ public class PackageDexOptimizer {
                        packageStats, options.isDowngrade(), profileName, dexMetadataPath,
                        packageStats, options.isDowngrade(), profileName, dexMetadataPath,
                        options.getCompilationReason());
                        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.
                // 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");
                    Trace.traceBegin(Trace.TRACE_TAG_PACKAGE_MANAGER, "dex2oat-metrics");
                    try {
                    try {
                        long sessionId = Math.randomLongInternal();
                        long sessionId = Math.randomLongInternal();
                        ArtStatsLogUtils.writeStatsLog(
                        ArtStatsLogUtils.writeStatsLog(
                                mArtStatsLogger,
                                mArtStatsLogger,
                                sessionId,
                                sessionId,
                                path,
                                compilerFilter,
                                compilerFilter,
                                sharedGid,
                                sharedGid,
                                packageStats.getCompileTime(path),
                                packageStats.getCompileTime(path),
                                dexMetadataPath,
                                dexMetadataPath,
                                options.getCompilationReason(),
                                options.getCompilationReason(),
                                newResult);
                                newResult,
                                ArtStatsLogUtils.getApkType(path),
                                dexCodeIsa);
                    } finally {
                    } finally {
                        Trace.traceEnd(Trace.TRACE_TAG_PACKAGE_MANAGER);
                        Trace.traceEnd(Trace.TRACE_TAG_PACKAGE_MANAGER);
                    }
                    }
+41 −6
Original line number Original line Diff line number Diff line
@@ -39,6 +39,7 @@ public class ArtStatsLogUtils {
    private static final String TAG = ArtStatsLogUtils.class.getSimpleName();
    private static final String TAG = ArtStatsLogUtils.class.getSimpleName();
    private static final String PROFILE_DEX_METADATA = "primary.prof";
    private static final String PROFILE_DEX_METADATA = "primary.prof";
    private static final String VDEX_DEX_METADATA = "primary.vdex";
    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 =
    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);
                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(
    public static void writeStatsLog(
            ArtStatsLogger logger,
            ArtStatsLogger logger,
            long sessionId,
            long sessionId,
            String path,
            String compilerFilter,
            String compilerFilter,
            int uid,
            int uid,
            long compileTime,
            long compileTime,
            String dexMetadataPath,
            String dexMetadataPath,
            int compilationReason,
            int compilationReason,
            int result) {
            int result,
            int apkType,
            String isa) {
        int dexMetadataType = getDexMetadataType(dexMetadataPath);
        int dexMetadataType = getDexMetadataType(dexMetadataPath);
        logger.write(
        logger.write(
                sessionId,
                sessionId,
@@ -140,7 +159,9 @@ public class ArtStatsLogUtils {
                compilerFilter,
                compilerFilter,
                ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_RESULT_CODE,
                ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_RESULT_CODE,
                result,
                result,
                dexMetadataType);
                dexMetadataType,
                apkType,
                isa);
        logger.write(
        logger.write(
                sessionId,
                sessionId,
                uid,
                uid,
@@ -148,7 +169,16 @@ public class ArtStatsLogUtils {
                compilerFilter,
                compilerFilter,
                ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_TOTAL_TIME,
                ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_TOTAL_TIME,
                compileTime,
                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) {
    private static int getDexMetadataType(String dexMetadataPath) {
@@ -207,7 +237,9 @@ public class ArtStatsLogUtils {
                String compilerFilter,
                String compilerFilter,
                int kind,
                int kind,
                long value,
                long value,
                int dexMetadataType) {
                int dexMetadataType,
                int apkType,
                String isa) {
            ArtStatsLog.write(
            ArtStatsLog.write(
                    ArtStatsLog.ART_DATUM_REPORTED,
                    ArtStatsLog.ART_DATUM_REPORTED,
                    sessionId,
                    sessionId,
@@ -220,7 +252,10 @@ public class ArtStatsLogUtils {
                    ArtStatsLog.ART_DATUM_REPORTED__THREAD_TYPE__ART_THREAD_MAIN,
                    ArtStatsLog.ART_DATUM_REPORTED__THREAD_TYPE__ART_THREAD_MAIN,
                    kind,
                    kind,
                    value,
                    value,
                    dexMetadataType);
                    dexMetadataType,
                    apkType,
                    ISA_MAP.getOrDefault(isa,
                            ArtStatsLog.ART_DATUM_REPORTED__ISA__ART_ISA_UNKNOWN));
        }
        }
    }
    }
}
}
+41 −17
Original line number Original line Diff line number Diff line
@@ -22,6 +22,7 @@ import com.android.internal.art.ArtStatsLog;
import com.android.server.pm.dex.ArtStatsLogUtils.ArtStatsLogger;
import com.android.server.pm.dex.ArtStatsLogUtils.ArtStatsLogger;


import org.junit.AfterClass;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.Test;
@@ -49,6 +50,9 @@ public final class ArtStatsLogUtilsTest {
    private static final String COMPILER_FILTER = "space-profile";
    private static final String COMPILER_FILTER = "space-profile";
    private static final String PROFILE_DEX_METADATA = "primary.prof";
    private static final String PROFILE_DEX_METADATA = "primary.prof";
    private static final String VDEX_DEX_METADATA = "primary.vdex";
    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 byte[] DEX_CONTENT = "dexData".getBytes();
    private static final int COMPILATION_REASON = 1;
    private static final int COMPILATION_REASON = 1;
    private static final int RESULT_CODE = 222;
    private static final int RESULT_CODE = 222;
@@ -97,13 +101,14 @@ public final class ArtStatsLogUtilsTest {
            ArtStatsLogUtils.writeStatsLog(
            ArtStatsLogUtils.writeStatsLog(
                    mockLogger,
                    mockLogger,
                    SESSION_ID,
                    SESSION_ID,
                    apk.toString(),
                    COMPILER_FILTER,
                    COMPILER_FILTER,
                    UID,
                    UID,
                    COMPILE_TIME,
                    COMPILE_TIME,
                    dexMetadataPath.toString(),
                    dexMetadataPath.toString(),
                    COMPILATION_REASON,
                    COMPILATION_REASON,
                    RESULT_CODE);
                    RESULT_CODE,
                    ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
                    INSTRUCTION_SET);


            // Assert
            // Assert
            verifyWrites(ArtStatsLog.
            verifyWrites(ArtStatsLog.
@@ -127,13 +132,14 @@ public final class ArtStatsLogUtilsTest {
            ArtStatsLogUtils.writeStatsLog(
            ArtStatsLogUtils.writeStatsLog(
                    mockLogger,
                    mockLogger,
                    SESSION_ID,
                    SESSION_ID,
                    apk.toString(),
                    COMPILER_FILTER,
                    COMPILER_FILTER,
                    UID,
                    UID,
                    COMPILE_TIME,
                    COMPILE_TIME,
                    dexMetadataPath.toString(),
                    dexMetadataPath.toString(),
                    COMPILATION_REASON,
                    COMPILATION_REASON,
                    RESULT_CODE);
                    RESULT_CODE,
                    ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
                    INSTRUCTION_SET);


            // Assert
            // Assert
            verifyWrites(ArtStatsLog.
            verifyWrites(ArtStatsLog.
@@ -157,13 +163,14 @@ public final class ArtStatsLogUtilsTest {
            ArtStatsLogUtils.writeStatsLog(
            ArtStatsLogUtils.writeStatsLog(
                    mockLogger,
                    mockLogger,
                    SESSION_ID,
                    SESSION_ID,
                    apk.toString(),
                    COMPILER_FILTER,
                    COMPILER_FILTER,
                    UID,
                    UID,
                    COMPILE_TIME,
                    COMPILE_TIME,
                    dexMetadataPath.toString(),
                    dexMetadataPath.toString(),
                    COMPILATION_REASON,
                    COMPILATION_REASON,
                    RESULT_CODE);
                    RESULT_CODE,
                    ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
                    INSTRUCTION_SET);


            // Assert
            // Assert
            verifyWrites(ArtStatsLog.
            verifyWrites(ArtStatsLog.
@@ -185,13 +192,14 @@ public final class ArtStatsLogUtilsTest {
            ArtStatsLogUtils.writeStatsLog(
            ArtStatsLogUtils.writeStatsLog(
                    mockLogger,
                    mockLogger,
                    SESSION_ID,
                    SESSION_ID,
                    apk.toString(),
                    COMPILER_FILTER,
                    COMPILER_FILTER,
                    UID,
                    UID,
                    COMPILE_TIME,
                    COMPILE_TIME,
                    /*dexMetadataPath=*/ null,
                    /*dexMetadataPath=*/ null,
                    COMPILATION_REASON,
                    COMPILATION_REASON,
                    RESULT_CODE);
                    RESULT_CODE,
                    ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
                    INSTRUCTION_SET);


            // Assert
            // Assert
            verifyWrites(ArtStatsLog.
            verifyWrites(ArtStatsLog.
@@ -214,13 +222,14 @@ public final class ArtStatsLogUtilsTest {
            ArtStatsLogUtils.writeStatsLog(
            ArtStatsLogUtils.writeStatsLog(
                    mockLogger,
                    mockLogger,
                    SESSION_ID,
                    SESSION_ID,
                    apk.toString(),
                    COMPILER_FILTER,
                    COMPILER_FILTER,
                    UID,
                    UID,
                    COMPILE_TIME,
                    COMPILE_TIME,
                    dexMetadataPath.toString(),
                    dexMetadataPath.toString(),
                    COMPILATION_REASON,
                    COMPILATION_REASON,
                    RESULT_CODE);
                    RESULT_CODE,
                    ArtStatsLog.ART_DATUM_REPORTED__APK_TYPE__ART_APK_TYPE_BASE,
                    INSTRUCTION_SET);


            // Assert
            // Assert
            verifyWrites(ArtStatsLog.
            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) {
    private void verifyWrites(int dexMetadataType) {
        InOrder inorder = inOrder(mockLogger);
        InOrder inorder = inOrder(mockLogger);
        inorder.verify(mockLogger).write(
        inorder.verify(mockLogger).write(
@@ -239,7 +259,9 @@ public final class ArtStatsLogUtilsTest {
                COMPILER_FILTER,
                COMPILER_FILTER,
                ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_RESULT_CODE,
                ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_RESULT_CODE,
                RESULT_CODE,
                RESULT_CODE,
                dexMetadataType);
                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,
@@ -247,7 +269,9 @@ public final class ArtStatsLogUtilsTest {
                COMPILER_FILTER,
                COMPILER_FILTER,
                ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_TOTAL_TIME,
                ArtStatsLog.ART_DATUM_REPORTED__KIND__ART_DATUM_DEX2OAT_TOTAL_TIME,
                COMPILE_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 {
    private Path zipFiles(String suffix, Path... files) throws IOException {