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

Commit 948bd864 authored by Yan Wang's avatar Yan Wang Committed by Android (Google) Code Review
Browse files

Merge "Add two fields on ART metrics (apk type and isa)." into sc-dev

parents fd87df7d b5789014
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 {